基于Docker和Gitea自建Git仓库镜像服务实践

📅 发布时间:2026/7/8 12:34:17 👁️ 浏览次数:
基于Docker和Gitea自建Git仓库镜像服务实践
目录基于Docker和Gitea自建Git仓库镜像服务实践1. 准备工作2. 安装Docker与Docker Compose3. 使用Docker Compose部署Gitea4. 完成Gitea初始配置5. 配置Nginx反向代理与SSL6. 镜像远程仓库以GitHub为例6.1 手动添加镜像6.2 批量添加使用API7. 使用镜像站进行代码操作8. 维护与合规建议9. 常见问题基于Docker和Gitea自建Git仓库镜像服务实践在日常开发中团队往往需要同时维护多个代码托管平台的仓库如GitHub、GitLab、Gitee。为便于统一管理和加速内部访问搭建一个私有的Git镜像服务是一种高效解决方案。本文介绍如何使用Docker快速部署Gitea并利用其镜像功能将外部仓库同步到内部服务器实现代码的本地备份与快速拉取。免责声明本文所述镜像功能仅限个人学习或团队内部使用用于提升开发效率。镜像内容请遵守原仓库的开源协议及GitHub等服务条款不得公开分发或用于商业用途。1. 准备工作云服务器2核4GB以上配置Ubuntu 22.04推荐。域名如git.example.com用于HTTPS访问。开放端口80、443Web、22SSH可选。2. 安装Docker与Docker Compose# 安装DockerUbuntusudoaptupdatesudoaptinstall-yapt-transport-https ca-certificatescurlsoftware-properties-commoncurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpgechodeb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu$(lsb_release-cs)stable|sudotee/etc/apt/sources.list.d/docker.list/dev/nullsudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io# 安装Docker Composesudocurl-Lhttps://github.com/docker/compose/releases/latest/download/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-composesudochmodx /usr/local/bin/docker-compose3. 使用Docker Compose部署Gitea创建项目目录并编写docker-compose.ymlversion:3networks:gitea:external:falseservices:server:image:gitea/gitea:latestcontainer_name:giteaenvironment:-USER_UID1000-USER_GID1000-GITEA__database__DB_TYPEsqlite3-GITEA__server__DOMAINgit.example.com# 改为你的域名-GITEA__server__HTTP_PORT3000-GITEA__server__ROOT_URLhttps://git.example.com-GITEA__server__SSH_DOMAINgit.example.com-GITEA__server__SSH_PORT22-GITEA__cron__mirror__ENABLEDtrue-GITEA__cron__mirror__SCHEDULEevery 6h# 每6小时同步restart:alwaysnetworks:-giteavolumes:-./data:/data-/etc/timezone:/etc/timezone:ro-/etc/localtime:/etc/localtime:roports:-3000:3000-22:22# 若宿主机22被占用可改为其他如2222:22启动服务docker-composeup-d4. 完成Gitea初始配置访问http://服务器IP:3000进入安装页面。数据库保持SQLite3。应用设置中填写域名、应用URLhttps://git.example.comSSH端口与实际映射一致。注册第一个用户自动成为管理员。5. 配置Nginx反向代理与SSL安装Nginx并配置站点server { listen 80; server_name git.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name git.example.com; ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }使用Certbot申请SSL证书sudoaptinstall-ycertbot python3-certbot-nginxsudocertbot--nginx-dgit.example.com6. 镜像远程仓库以GitHub为例Gitea支持从任何Git平台迁移仓库并保持镜像同步。6.1 手动添加镜像登录Gitea点击“”→“新迁移”。迁移类型选择GitHub或其他平台。仓库URL输入要镜像的地址如https://github.com/user/repo。镜像勾选“该仓库是镜像”设置同步间隔。点击“迁移仓库”开始克隆。首次迁移会完整拉取所有分支和标签之后按设定的cron计划自动同步。6.2 批量添加使用API获取访问令牌用户设置→应用执行脚本GITEA_URLhttps://git.example.comTOKEN你的令牌USERNAME你的用户名REPOS(https://github.com/user/repo1https://github.com/user/repo2)forrepoin${REPOS[]};docurl-XPOST$GITEA_URL/api/v1/repos/migrate\-HAuthorization: token$TOKEN\-HContent-Type: application/json\-d{ clone_addr: $repo,repo_name:$(basename$repo),mirror:true,private:true,service:github}done7. 使用镜像站进行代码操作团队内可通过HTTPS或SSH克隆、推送代码gitclone https://git.example.com/用户名/repo.git# 或gitclone gitgit.example.com:用户名/repo.git推送代码时可同时推送到镜像站和原上游需分别设置remote。8. 维护与合规建议磁盘管理定期检查仓库大小清理不再需要的镜像。定期更新docker-compose pull docker-compose up -d升级Gitea。权限控制建议将镜像仓库设为私有仅授权成员访问。法律合规镜像仅用于内部开发加速不得公开。确保镜像内容符合原仓库许可证要求。遵守各代码托管平台的服务条款。9. 常见问题同步失败检查服务器是否能访问外网查看Gitea日志docker-compose logs server。SSL证书续期Certbot会自动续期也可手动运行sudo certbot renew。SSH连接问题确认端口映射正确并在Gitea配置中更新SSH端口。通过以上步骤您已成功搭建一个私有的Git镜像服务。它不仅能提升团队内部代码拉取速度还能作为多平台仓库的统一备份同时完全符合技术社区的规范要求。如果在实践中遇到问题欢迎留言交流。