ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

自建代码托管环境:Gitea与Docker部署实战指南

自建代码托管环境:Gitea与Docker部署实战指南 1. 为什么需要自建代码托管环境在云端代码托管服务大行其道的今天自建代码托管环境似乎是个反潮流的选择。但作为一个经历过三次服务商迁移的老码农我必须说自己掌控的代码仓库才是真正的数字资产保险箱。去年某知名托管平台突然调整免费政策导致我们团队十几个私有仓库面临迁移。那次经历让我深刻认识到核心业务代码必须掌握在自己手里。自建环境不仅能规避平台政策风险还能获得以下优势数据主权完整代码物理存储位置明确符合金融、政务等敏感行业的合规要求定制化工作流可以自由集成内部CI/CD系统不受平台功能限制成本可控长期使用成本低于企业版托管服务特别适合中小团队离线可用在内网环境下仍能保持完整的版本控制功能2. 环境规划与基础准备2.1 硬件选型方案我的自建环境跑在一台年付不到500的入门级云服务器上2核4G配置实测可稳定支持20人团队日常使用。关键是要做好存储规划# 推荐磁盘分区方案以100G系统盘为例 /boot 1G # 引导分区 / 20G # 系统分区 /var 50G # 仓库数据分区 swap 4G # 交换分区重要提示务必为/var单独分区Gitea的仓库数据默认存放在/var/lib/gitea频繁的git操作会导致大量小文件写入独立分区能避免系统盘被撑爆。2.2 操作系统调优选用Ubuntu 22.04 LTS作为基础系统需要做以下针对性优化# 修改文件描述符限制应对高并发克隆请求 echo * soft nofile 65535 /etc/security/limits.conf echo * hard nofile 65535 /etc/security/limits.conf # 调整内核参数 cat EOF /etc/sysctl.d/99-gitea.conf vm.swappiness 10 net.core.somaxconn 2048 net.ipv4.tcp_max_syn_backlog 2048 EOF sysctl -p /etc/sysctl.d/99-gitea.conf3. Docker化部署实战3.1 容器编排架构采用Docker Compose部署可以完美解决依赖管理问题。这是我的docker-compose.yml核心配置version: 3 services: server: image: gitea/gitea:1.21 container_name: gitea environment: - USER_UID1000 - USER_GID1000 - DB_TYPEmysql - DB_HOSTdb:3306 - DB_NAMEgitea - DB_USERgitea - DB_PASSWDYourStrongPassword volumes: - /var/lib/gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - 3000:3000 - 222:22 # SSH端口重映射 depends_on: - db db: image: mysql:8.0 container_name: mysql environment: - MYSQL_ROOT_PASSWORDRootPassword - MYSQL_USERgitea - MYSQL_PASSWORDYourStrongPassword - MYSQL_DATABASEgitea volumes: - /var/lib/mysql:/var/lib/mysql command: --default-authentication-pluginmysql_native_password关键配置解析将宿主机的22端口映射为222避免与SSH服务冲突使用volume持久化数据库和仓库数据显式设置时区保证提交记录时间准确3.2 初始化配置技巧首次访问http://服务器IP:3000 会进入安装向导有几个容易踩坑的选项数据库连接字符串必须使用db:3306而非localhost因为是从gitea容器连接db容器SSH服务器域名填写公网IP或域名否则生成的克隆地址会错误管理员账户务必在此处设置否则第一个注册用户会自动成为管理员4. 生产环境加固方案4.1 网络安全配置# 防火墙规则示例UFW ufw allow 222/tcp # Gitea SSH ufw allow 3000/tcp # Gitea HTTP ufw allow 80/tcp # 后续Nginx反代用 ufw enable4.2 定期备份策略创建备份脚本/usr/local/bin/backup-gitea.sh#!/bin/bash BACKUP_DIR/backups/gitea TIMESTAMP$(date %Y%m%d-%H%M) # 导出数据库 docker exec mysql mysqldump -uroot -pRootPassword gitea $BACKUP_DIR/gitea-db-$TIMESTAMP.sql # 备份数据卷 tar czvf $BACKUP_DIR/gitea-data-$TIMESTAMP.tar.gz /var/lib/gitea # 保留最近7天备份 find $BACKUP_DIR -type f -mtime 7 -delete添加到cron每周执行0 3 * * 1 /usr/local/bin/backup-gitea.sh5. 高级功能集成5.1 与CI/CD系统对接在Gitea后台添加Drone CI的OAuth2应用设置→应用→创建新OAuth2应用回调URL填写http://drone.yourdomain.com/login在Drone的docker-compose中添加环境变量environment: - DRONE_GITEA_SERVERhttp://gitea.yourdomain.com - DRONE_GITEA_CLIENT_ID获取的ClientID - DRONE_GITEA_CLIENT_SECRET获取的ClientSecret5.2 邮件通知配置修改Gitea的app.ini位于/var/lib/gitea/conf[mailer] ENABLED true HOST smtp.yourmail.com:465 FROM gityourdomain.com USER gityourdomain.com PASSWD YourMailPassword PROTOCOL smtps测试配置是否生效docker exec -it gitea sh -c gitea admin user mail-test -u 你的管理员用户名6. 踩坑记录与解决方案问题1Docker Desktop报错virtualization support not detected原因Windows未开启虚拟化解决BIOS中开启VT-x/AMD-V并禁用Hyper-V问题2推送大文件时超时修改nginx配置client_max_body_size 100M; proxy_read_timeout 300s;问题3Gitea的act_runner权限问题临时方案降级到1.20.5版本长期方案关注官方补丁更新这套环境已经稳定运行两年多经历过三次大版本升级。最让我惊喜的是Gitea的资源占用——平均内存消耗不到1GB却能流畅支持团队日常开发。对于想要完全掌控代码资产的技术团队自建托管环境绝对是值得投入的基础建设。
返回列表