Docker 搭建 Gogs
Docker 搭建 Gogs
准备工作
- 先准备配置目录和持久化目录,举个栗子:
mkdir -p /opt/module/gogs/{data,backup}
拉取官方Gogs镜像
# 拉取 gogs:0.13
docker pull gogs/gogs:0.13
# 拉取最新版 gogs 镜像
docker pull gogs/gogs
启动一个临时容器【通过创建一个临时的测试容器,用来复制配置文件,来反推配置】
docker run -d \-p 10022:22 \-p 13000:3000 \-v /opt/module/gogs/data:/data \--name=gogs \gogs/gogs:0.13
参数说明:
docker run -d: 启动一个Docker容器并将其设置为在后台(守护进程模式)运行。-p 10022:22: 将主机的端口10022映射到容器内部的端口22,这允许你通过主机的10022端口访问容器内部的SSH服务。-p 13000:3000: 将主机的端口10300映射到容器内部的端口3000,这允许你通过主机的10300端口访问容器内部的Gogs Web应用程序。-v /opt/module/gogs/data:/data: 将主机上的/opt/module/gogs/data目录挂载到容器内部的/data目录,这样可以持久化地存储Gogs的数据,以防容器停止后数据丢失。--name=gogs: 为容器指定一个名称,即"gogs",以便在后续操作中更容易引用该容器。gogs/gogs:0.13: 指定要运行的Docker镜像的名称和标签。在这里,使用的是Gogs官方镜像的0.13版本。
复制gogs的配置文件到宿主机中
# 将容器app.ini文件复制到宿主机
docker cp gogs:/data/gogs/conf/app.ini /opt/module/gogs/conf# 将容器data文件夹下内容复制到宿主机
docker cp gogs:/data /opt/module/gogs/data# 将容器中的log文件夹复制到宿主机【可以不执行】
docker cp gogs:/var/log/nginx /opt/module/nginx/logs
docker cp gogs:/data /opt/module/gogs/data
移除临时容器
docker stop gogs
docker rm gogs
运行镜像
docker run -d \-p 10022:22 \-p 13000:3000 \-v /opt/module/gogs/data:/data \-v /opt/module/gogs/backup:/backup \-e TZ="Asia/Shanghai"\--name=gogs \--restart=always \gogs/gogs:0.13
参数说明:
docker run -d: 启动一个Docker容器并将其设置为在后台(守护进程模式)运行。-p 10022:22: 将主机的端口10022映射到容器内部的端口22,这允许你通过主机的10022端口访问容器内部的SSH服务。-p 13000:3000: 将主机的端口10300映射到容器内部的端口3000,这允许你通过主机的10300端口访问容器内部的Gogs Web应用程序。-v /opt/module/gogs/data:/data: 将主机上的/opt/module/gogs/data目录挂载到容器内部的/data目录,这样可以持久化地存储Gogs的数据,以防容器停止后数据丢失。-v /opt/module/gogs/backup:/backup: 将主机上的/opt/module/gogs/backup目录挂载到容器内部的/backup目录,这样可以持久化地存储Gogs的数据,以防容器停止后数据丢失。-e TZ="Asia/Shanghai": 设置容器的时区为"Asia/Shanghai"。--name=gogs: 为容器指定一个名称,即"gogs",以便在后续操作中更容易引用该容器。--restart=always: 指定容器的重启策略为始终自动重启。这意味着如果容器意外停止,Docker将自动重新启动容器。gogs/gogs:0.13: 指定要运行的Docker镜像的名称和标签。在这里,使用的是Gogs官方镜像的0.13版本。
查看启动日志
#docker logs [服务id/服务名]
docker logs gogsdocker logs -f -t --tail 20 gogs
进入gogs容器内部
docker ps # 查看正在运行的容器,并得到 容器id# 进入tomcat容器内部
docker exec -it [容器id] /bin/bash # 中间那个是容器id 就是 CONTAINER_ID
docker exec -it [容器id] /bin/sh
# -it 表示进入
docker exec -it gogs sh
docker exec -it gogs /bin/sh
# 使用 命令别名 开启 ll命令
cat <<EOF >> /etc/profile
alias ll='ls -l --color=tty'
alias grep='grep --color=auto'
EOFsource /etc/profile
查看防火墙【开放端口】
# 查询端口是否开放
firewall-cmd --query-port=10022/tcp
firewall-cmd --query-port=13000/tcp# 开放80、443端口
firewall-cmd --permanent --add-port=10022/tcp
firewall-cmd --permanent --add-port=13000/tcp# 移除端口
firewall-cmd --permanent --remove-port=10022/tcp
firewall-cmd --permanent --remove-port=13000/tcp# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload# 查看已经开发那些端口
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports
测试
#浏览器中服务器
http://虚拟机IP:13000
http://虚拟机IP:10022

常用Git命令
# 配置
git config --global user.name "Your Name Comes Here"
git config --global user.email you@yourdomain.example.com# 查看
git --version
git status # 初始仓库
git init# 添加至暂存区
git add ./file (将需要提交的提交到暂存区)# 提交本地仓库
git commit - m 'feat: 注释' (提交到本地)
git commit --amend# 快捷提交
git commit -am 'feat: 注释'# 直接回退
git log --oneline
git checkout filename# 从暂存区回退
git reset HEAD filename
git checkout -- filename# 从本地仓回退
git log --oneline
git reset --hard XXX# 从本地仓重置回退
git reflog
git reset --hard XXX# 查看分支
git branch 查看本地所有分支
git branch -a 查看所有的分支
git branch -r 查看远程所有分支# 创建分支
git branch 分支名称# 切换分支
git checkout 分支名称# 创建并切换
git checkout -b 分支名称# 合并分支
git merge 目标分支 -m "描述"
git rebase 目标分支# 将本地的Test分支推送到远端的master分支
git push origin Test:master# 删除分支
git branch -d 分支
# 删除远程分支
git push origin --delete 分支 # 查看tag
git tag# 查看详情
git show tag名称# 创建tag
git tag -a "v1.0" -m "描述"
git tag -a "v1.0" 标识码 -m "描述"# 删除tag
git tag -d 标签名# 查看远程仓库
git remote [-v]# 删除关联
git remote remove origin# 推送tag
git push origin --tags
git push tag名称# 删除远程tag
git push origin --delete tag名称# 获取远程tag
git fetch origin tag V1.2# 拉取远程代码
git pull <远程主机名> <远程分支名>:<本地分支名># 一、开发分支(develop)上的代码达到上线的标准后,要合并到 master 分支
git checkout develop
git pull
git checkout master
git merge develop
git push -u origin master# 二、当master代码改动了,需要更新开发分支(develop)上的代码
git checkout master
git pull
git checkout develop
git merge master
git push -u origin develop
删除容器
注意: 还有删除数gogs据库
1. 停止和删除Gogs容器
docker stop gogs
docker rm gogs
2.查看数据卷的详细信息,包括挂载到容器的数据卷的名称:
docker inspect gogs
这将提供Gogs容器的详细信息,包括挂载的数据卷的名称。在JSON输出中,寻找"Mounts"字段,其中包含有关挂载的信息。
3.一旦你找到了相关的数据卷名称,你可以使用以下命令删除它:
#查看所有数据卷
docker volume lsdocker volume rm <volume_name>
请将<volume_name>替换为实际的数据卷名称,这样就可以删除与之关联的数据卷。
实际操作
[root@192 ~]# docker inspect gogs
[{"Id": "aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78","Created": "2023-09-08T10:35:12.579405355Z","Path": "/app/gogs/docker/start.sh","Args": ["/bin/s6-svscan","/app/gogs/docker/s6/"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 25338,"ExitCode": 0,"Error": "","StartedAt": "2023-09-08T10:35:12.847045044Z","FinishedAt": "0001-01-01T00:00:00Z","Health": {"Status": "healthy","FailingStreak": 0,"Log": [{"Start": "2023-09-08T18:40:43.607286021+08:00","End": "2023-09-08T18:40:43.684070251+08:00","ExitCode": 0,"Output": ""},{"Start": "2023-09-08T18:41:13.687167438+08:00","End": "2023-09-08T18:41:13.76545214+08:00","ExitCode": 0,"Output": ""},{"Start": "2023-09-08T18:41:43.769161045+08:00","End": "2023-09-08T18:41:43.851412268+08:00","ExitCode": 0,"Output": ""},{"Start": "2023-09-08T18:42:13.859782099+08:00","End": "2023-09-08T18:42:13.943519873+08:00","ExitCode": 0,"Output": ""},{"Start": "2023-09-08T18:42:43.951301454+08:00","End": "2023-09-08T18:42:44.023457417+08:00","ExitCode": 0,"Output": ""}]}},"Image": "sha256:4fa5cedc038517695cf354561e6eceec91d1803bc8b8d84744c796f2e47993b4","ResolvConfPath": "/var/lib/docker/containers/aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78/resolv.conf","HostnamePath": "/var/lib/docker/containers/aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78/hostname","HostsPath": "/var/lib/docker/containers/aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78/hosts","LogPath": "/var/lib/docker/containers/aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78/aa5966fa1e07c9830a93d146f4eebc0510db4f3d484f1aa74c57fd045a3efd78-json.log","Name": "/gogs","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": ["/opt/module/gogs/data:/data"],"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {"22/tcp": [{"HostIp": "","HostPort": "10022"}],"3000/tcp": [{"HostIp": "","HostPort": "13000"}]},"RestartPolicy": {"Name": "always","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"ConsoleSize": [41,207],"CapAdd": null,"CapDrop": null,"CgroupnsMode": "host","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": [],"BlkioDeviceWriteBps": [],"BlkioDeviceReadIOps": [],"BlkioDeviceWriteIOps": [],"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/92c6c2732f4f260fe37eb1965fc8c0b8b6c012c2b6d643011f8e295161106e14-init/diff:/var/lib/docker/overlay2/e8e4330e6a3c559eb093d7ee19dd92099ed5991c02623e70b288df5682bb99ac/diff:/var/lib/docker/overlay2/fb16d9b7d34cde7249809fec0867f74a96602cbc5e1e41df6e2229c318f1297b/diff:/var/lib/docker/overlay2/e52f016f52d3310c2b79b3cd41283f2fcb87778266b7657175ea11b97138bcf7/diff:/var/lib/docker/overlay2/3f28c4f1444f9c71a36d18744e709da916a7d3aae75fb501d61f3fbf5d504cbd/diff:/var/lib/docker/overlay2/ed08f7907ca663d1c06ccd8f595f7d9e0f0d9e320f4679dc47caf042df8dcc54/diff:/var/lib/docker/overlay2/732dc76ce54ea2e95f6c47811827e647e9739f587f0a6f8cb19c4ae89a6ddc64/diff:/var/lib/docker/overlay2/1f980dc96ce58159f4254a109d3ecf1d55261e37d533dfcbe75bc2c642850fdd/diff","MergedDir": "/var/lib/docker/overlay2/92c6c2732f4f260fe37eb1965fc8c0b8b6c012c2b6d643011f8e295161106e14/merged","UpperDir": "/var/lib/docker/overlay2/92c6c2732f4f260fe37eb1965fc8c0b8b6c012c2b6d643011f8e295161106e14/diff","WorkDir": "/var/lib/docker/overlay2/92c6c2732f4f260fe37eb1965fc8c0b8b6c012c2b6d643011f8e295161106e14/work"},"Name": "overlay2"},"Mounts": [{"Type": "bind","Source": "/opt/module/gogs/data","Destination": "/data","Mode": "","RW": true,"Propagation": "rprivate"},{"Type": "volume","Name": "4c4048a2ae7c1daed9004d6551878050cc8bfa318fcdc08d95ea73021aa17fcb","Source": "/var/lib/docker/volumes/4c4048a2ae7c1daed9004d6551878050cc8bfa318fcdc08d95ea73021aa17fcb/_data","Destination": "/backup","Driver": "local","Mode": "","RW": true,"Propagation": ""}],"Config": {"Hostname": "aa5966fa1e07","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"22/tcp": {},"3000/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["TZ=Asia/Shanghai","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOGS_CUSTOM=/data/gogs"],"Cmd": ["/bin/s6-svscan","/app/gogs/docker/s6/"],"Healthcheck": {"Test": ["CMD-SHELL","(curl -o /dev/null -sS http://localhost:3000/healthcheck) || exit 1"]},"Image": "gogs/gogs:0.13","Volumes": {"/backup": {},"/data": {}},"WorkingDir": "/app/gogs","Entrypoint": ["/app/gogs/docker/start.sh"],"OnBuild": null,"Labels": {}},"NetworkSettings": {"Bridge": "","SandboxID": "09962969d9df5d6ecc24bc036b7b0841236be252a03f478377b9d74043044e4f","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"22/tcp": [{"HostIp": "0.0.0.0","HostPort": "10022"},{"HostIp": "::","HostPort": "10022"}],"3000/tcp": [{"HostIp": "0.0.0.0","HostPort": "13000"},{"HostIp": "::","HostPort": "13000"}]},"SandboxKey": "/var/run/docker/netns/09962969d9df","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "e92cbb6dfd8e64c2dc986bdeb3b4b10871f1117eedfb2d961c819cffc95571e9","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.5","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:05","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "ddd0a110308f6f26f3a3b4e63faeefc70c565fc776148030a4498acaf49d8937","EndpointID": "e92cbb6dfd8e64c2dc986bdeb3b4b10871f1117eedfb2d961c819cffc95571e9","Gateway": "172.17.0.1","IPAddress": "172.17.0.5","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:05","DriverOpts": null}}}}
]
根据Docker容器的详细信息,你的Gogs容器在挂载了两个卷(volumes):
-
/opt/module/gogs/data目录挂载到容器的/data目录,这个卷用于持久化存储Gogs的数据。 -
还有一个匿名卷,它被挂载到容器的
/backup目录。这个卷通常由Gogs用于备份目的,可能包含一些历史数据。
要删除与Gogs相关的历史数据,你可以执行以下步骤:
-
停止和删除Gogs容器(如果尚未完成):
docker stop gogs docker rm gogs -
删除Gogs数据卷:
对于
/opt/module/gogs/data目录的数据卷,你可以使用以下命令删除它:docker volume rm gogs_data如果你想删除备份目录的匿名卷,可以使用以下命令:
docker volume rm 4c4048a2ae7c1daed9004d6551878050cc8bfa318fcdc08d95ea73021aa17fcb请谨慎操作,确保你不再需要这些数据。
-
然后,重新创建Gogs容器(使用之前的命令):
docker run -d \-p 10022:22 \-p 10300:3000 \--name=gogs \gogs/gogs:0.13
通过执行以上步骤,你将删除与Gogs相关的历史数据,并重新启动一个新的Gogs容器,以确保不再使用旧的数据。
相关文章:
Docker 搭建 Gogs
Docker 搭建 Gogs 准备工作 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/gogs/{data,backup} 拉取官方Gogs镜像 # 拉取 gogs:0.13 docker pull gogs/gogs:0.13 # 拉取最新版 gogs 镜像 docker pull gogs/gogs启动一个临时容器【通过创…...
PostgreSQL的备份方式
PostgreSQL 提供多种方式进行备份,适用于不同需求的场景。常用的备份方法如下: 1. 逻辑备份(pg_dump 和 pg_dumpall) 1.1 使用 pg_dump 备份单个数据库 pg_dump 是 PostgreSQL 内置的逻辑备份工具,可以将数据库导出为…...
Springboot 3项目整合Knife4j接口文档(接口分组详细教程)
文章目录 前言一、Spring Boot 3.0整合Knife4j二、OpenApi 3注解的使用规范三、使用步骤 1.Spring Boot 3.0项目中使用knife4j2.在application.yml中添加knife4j相关配置3.设置WebMvc相关配置(解决封装统一异常处理后doc.html无法打开的问题)4.创建Knif…...
深入解析 Conda 安装的默认依赖包及其作用:conda create安装了哪些包(中英双语)
深入解析 Conda 安装的默认依赖包及其作用 当我们使用 Conda 创建新环境时,例如执行命令: conda create -n olmes python3.10Conda 会自动为我们安装一系列基础依赖包,保证 Python 环境能够正常运行。这些包不仅是我们开发的基础工具&#…...
Redis核心技术知识点全集
Redis数据结构和常用命令 1. String字符串2. Hash哈希3. List列表4. Set集合5. Sorted Set有序集合6. Redis常用命令参考Redis事务机制...
【Unity3D】ECS入门学习(九)SystemBase
SystemBase:支持主线程或多线程执行筛选实体任务。 主要介绍是内部成员:Entities的各种筛选方法,其内部成员还有EntityManager ForEach方法筛选,传递一个有参委托函数进去,参数ref xxx组件类(可填多个&…...
【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始
模型部署系列文章 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程【保姆级教程附代码(二)】Pytor…...
CertiK《Hack3d:2024年度安全报告》(附报告全文链接)
CertiK《Hack3d:2024年度安全报告》现已发布,本次报告深入分析了2024年Web3.0领域的安全状况。2024年损失总额超过23亿美元,同比增幅高达31.61%;其中,12月的损失金额最少。过去一年,网络钓鱼攻击和私钥泄露…...
TIOBE 指数 12 月排行榜公布,VB.Net排行第九
IT之家 12 月 10 日消息,TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎,今天 TIOBE 官网公布了 2024 年 12 月的编程语言排行榜,IT之家整理如下: …...
【网络协议】开放式最短路径优先协议OSPF详解(一)
OSPF 是为取代 RIP 而开发的一种无类别的链路状态路由协议,它通过使用区域划分以实现更好的可扩展性。 文章目录 链路状态路由协议OSPF 的工作原理OSPF 数据包类型Dijkstra算法、管理距离与度量值OSPF的管理距离OSPF的度量值 链路状态路由协议的优势拓扑结构路由器O…...
嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)
基本概念之什么是驱动程序()? 驱动程序本质上是代码逻辑的集合,通常用于管理、驱动多个设备实例。某个设备要想使用驱动程序,需要实例化相应的驱动程序的结构体,并在系统中注册,获得主设备号、次设备号,并…...
爱死机第四季(秘密关卡)4KHDR国语字幕
通过网盘分享的文件:love_death_robot 链接: https://pan.baidu.com/s/1bG3Xtdopenil2O_y93hY_g?pwd8kib 提取码: 8kib...
kubelet状态错误报错
journalctl -xeu kubelet 执行后的日志如下: -- -- The process exit code is exited and its exit status is 1. Jan 02 14:20:06 iv-ydipyqxfr4wuxjsij0bd systemd[1]: kubelet.service: Failed with result exit-code. -- Subject: Unit failed -- Defined-By: system…...
<div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么
$t是Vue I18n插件提供的一种方法,用于根据当前应用的语言环境来获取相应的翻译文本。 以下是一个简单的示例,展示如何在Vue I18n中定义消息: const i18n new VueI18n({locale: en, // 设置默认语言messages: {en: {collectionPlan: Collec…...
[C++刷题] 求回文素数
求回文素数 题目 素数回文数的个数 题目描述 求 11 11 11 到 n n n 之间(包括 n n n),既是素数又是回文数的整数有多少个。 输入格式 一个大于 11 11 11 小于 10000 10000 10000 的整数 n n n。 输出格式 11 11 11 到 n n n 之…...
SQLALchemy如何将SQL语句编译为特定数据库方言
最近在一个使用fastapitortoise-orm的项目中,需要将orm的语句编译成特定数据库方言,但是查询了官方文档及一些资料却找不到合适的方法论😔,于是乎我就把目光放到了sqlalchemy身上,东找西找给我找着了。话不多说&#x…...
[卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析
目录 [卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析 1. 卫星目标跟踪的核心挑战 1.1 目标的高速与不确定性 1.2 卫星传感器的局限性 1.3 数据处理与融合问题 1.4 大尺度与实时性要求 2. 当前卫星目标跟踪的主流技术 2.1 卡尔曼滤波(Kalman …...
I2C(一):存储器模式:stm32作为主机对AT24C02写读数据
存储器模式:在HAL库中,I2C有专门对存储器外设设置的库函数 I2C(一):存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...
scrapy 教程
Scrapy Tutorial In this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installation guide. We are going to scrape quotes.toscrape.com, a website that lists quotes from famous authors. This tutorial …...
2025元旦源码免费送
我们常常在当下感到时间慢,觉得未来遥远,但一旦回头看,时间已经悄然流逝。对于未来,尽管如此,也应该保持一种从容的态度,相信未来仍有许多可能性等待着我们。 免费获取源码。 更多内容敬请期待。如有需要可…...
【Mojo+Python企业级混合编程实战指南】:20年架构师亲授3大高频场景落地方法论
第一章:Mojo与Python混合编程的企业级价值全景图Mojo 是一种专为 AI 原生系统设计的现代系统编程语言,兼具 Python 的表达力与 C/Rust 级别的性能。在企业级 AI 工程实践中,Mojo 并非旨在替代 Python,而是以“无缝互操作”为核心理…...
微信小程序uView实战:u-picker三级联动避坑指南(附完整代码)
uView框架下u-picker三级联动的深度实践与性能优化 在微信小程序开发中,地区选择器几乎是每个涉及用户地址功能的必备组件。uView作为一款优秀的小程序UI框架,其u-picker组件提供了强大的多级联动功能,但在实际开发中,不少开发者会…...
别再用if-else了!用状态机重构你的51单片机红外循迹小车代码(思路+代码对比)
用状态机重构51单片机红外循迹小车:告别if-else的工程化实践 当你的红外循迹小车代码开始变得像意大利面条一样混乱时,是时候考虑一种更优雅的解决方案了。想象一下,每次需要新增一个传感器或者修改转向逻辑时,都要在几十个if-els…...
解锁Windows全版本安装自由:MediaCreationTool.bat实战指南
解锁Windows全版本安装自由:MediaCreationTool.bat实战指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...
Wan2.1 VAE与MySQL联动:构建带用户历史记录的图像生成平台
Wan2.1 VAE与MySQL联动:构建带用户历史记录的图像生成平台 你有没有想过,自己用AI生成的每一张图片,都能被自动保存下来,形成一个专属的创意作品集?今天,我们就来动手搭建一个这样的平台。它不仅能让你用W…...
Graphormer高性能部署:PyTorch 2.8.0 + Torch-Geometric 2.4优化实践
Graphormer高性能部署:PyTorch 2.8.0 Torch-Geometric 2.4优化实践 1. 引言 Graphormer是一种基于纯Transformer架构的图神经网络,专为分子属性预测任务设计。与传统的图神经网络(GNN)相比,Graphormer通过全局注意力机制直接建模分子图中原…...
从一次时序违例修复说起:实战中set_multicycle_path与时钟使能(CE)的配合使用指南
从一次时序违例修复说起:实战中set_multicycle_path与时钟使能(CE)的配合使用指南 在FPGA设计流程中,时序收敛往往是最后阶段最令人头疼的问题之一。特别是当设计中使用时钟使能(Clock Enable, CE)信号进行功耗优化时,默认的单周期时序约束可…...
JAVA重点基础、进阶知识及易错点总结(13)File 类 + 路径操作
🚀 Java 巩固进阶 第13天 主题:File 类 路径操作 —— IO 体系的第一块基石📅 进度概览:从今天起,我们正式进入 Java IO 流体系。第一站:java.io.File。 💡 核心价值: 文件操作基石…...
MySQL 5.7.32 Online DDL避坑指南:如何避免主从延迟和锁等待?
MySQL 5.7.32 Online DDL实战避坑:高并发场景下的零停机表结构变更策略 在数据库运维的日常工作中,表结构变更(DDL)操作总是让人又爱又恨。特别是当面对千万级数据表时,一个简单的ALTER TABLE操作就可能引发连锁反应—…...
互联网大厂Java求职面试实录:谢飞机的三轮技术问答与深度解析
互联网大厂Java求职面试实录:谢飞机的三轮技术问答与深度解析 一、面试背景简介 本文模拟了某知名互联网大厂Java研发工程师岗位的面试过程,通过主角谢飞机与严肃面试官的真实问答,覆盖Java后端开发常见知识点,帮助读者系统梳理面…...
