自建企业级代码托管平台:Gitea 深度部署与配置指南 引言 在当今的软件开发领域,代码托管平台已成为团队协作不可或缺的基础设施。虽然 GitHub、GitLab 等公有云服务提供了强大的功能,但出于数据安全、成本控制和定制化需求,越来越多的企业和团队选择自建代码托管平台。Gitea 作为一款轻量级、高性能的 Git 服务,凭借其简洁的设计和出色的性能,成为了自建代码托管平台的热门选择。
本文将深入探讨 Gitea 的部署、配置和优化,提供从零开始搭建企业级代码托管平台的完整解决方案。
一、Gitea 核心优势与架构解析 1.1 为什么选择 Gitea? Gitea 是用 Go 语言编写的开源 Git 服务,具有以下显著优势:
资源占用极低 :单核 CPU、512MB 内存即可流畅运行部署简单 :提供二进制包、Docker 镜像等多种部署方式功能完整 :支持 Issues、Pull Requests、Webhooks、CI/CD 等企业级功能高度可定制 :丰富的配置选项和扩展机制活跃的社区 :持续的更新和维护,良好的文档支持1.2 Gitea 架构概览 Gitea 采用模块化设计,主要包含以下组件:
Web 服务器(基于 Go 的 HTTP 服务) Git HTTP/SSH 服务 数据库层(支持 SQLite、MySQL、PostgreSQL) 存储层(本地存储或对象存储) 缓存层(支持 Redis、Memcached) 👋 二、环境准备与系统要求 2.1 硬件要求 最低配置 :1 核 CPU,512MB 内存,10GB 存储推荐配置 :2 核 CPU,2GB 内存,50GB+ 存储(根据团队规模调整)生产环境建议 :4 核 CPU,4GB 内存,SSD 存储2.2 软件环境 本文以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版可相应调整:
1 2 3 4 5 6 7 8 9 10 11 sudo apt update && sudo apt upgrade -ysudo apt install -y curl wget git nginx supervisorsudo apt install -y postgresql postgresql-contribsudo apt install -y redis-server
💡 三、Gitea 部署实战 3.1 数据库配置 1 2 3 4 5 6 7 8 9 10 11 12 sudo -i -u postgrescreateuser --pwprompt gitea createdb -O gitea giteadb exit
3.2 创建系统用户 1 2 3 4 5 6 7 8 9 sudo adduser \ --system \ --shell /bin/bash \ --gecos 'Git Version Control' \ --group \ --disabled-password \ --home /home/gitea \ gitea
3.3 下载并安装 Gitea 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo su - giteamkdir -p /home/gitea/{gitea,custom,data,logs}cd /home/giteawget -O gitea https://dl.gitea.io/gitea/1.21.0/gitea-1.21.0-linux-amd64 chmod +x gitea./gitea --version
3.4 配置 systemd 服务 创建服务文件 /etc/systemd/system/gitea.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [Unit] Description =Gitea (Git with a cup of tea)After =syslog.targetAfter =network.targetAfter =postgresql.serviceAfter =redis-server.service[Service] RestartSec =2 sType =simpleUser =giteaGroup =giteaWorkingDirectory =/home/giteaExecStart =/home/gitea/gitea web --config /home/gitea/app.iniRestart =alwaysEnvironment =USER=gitea HOME=/home/gitea[Install] WantedBy =multi-user.target
启用并启动服务:
1 2 3 sudo systemctl daemon-reloadsudo systemctl enable giteasudo systemctl start gitea
四、Gitea 详细配置 4.1 初始 Web 配置 访问 http://your-server-ip:3000 完成初始配置:
数据库设置 :
数据库类型:PostgreSQL 主机:localhost:5432 数据库名:giteadb 用户名:gitea 密码:YourSecurePassword123 常规设置 :
站点标题:公司代码托管平台 仓库根目录:/home/gitea/data/gitea-repositories LFS 根目录:/home/gitea/data/gitea-lfs 运行用户:gitea SSH 服务器域名:git.yourcompany.com SSH 端口:22(或自定义端口) 管理员账户 :
4.2 配置文件详解 Gitea 的主要配置文件位于 /home/gitea/app.ini,以下为关键配置项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 APP_NAME = 公司代码托管平台RUN_USER = giteaRUN_MODE = prod[server] APP_DATA_PATH = /home/gitea/dataHTTP_PORT = 3000 ROOT_URL = https://git.yourcompany.com/DISABLE_SSH = false SSH_PORT = 22 SSH_LISTEN_PORT = 22 DOMAIN = git.yourcompany.comSSH_DOMAIN = git.yourcompany.comLFS_START_SERVER = true LFS_CONTENT_PATH = /home/gitea/data/gitea-lfs[database] DB_TYPE = postgresHOST = localhost:5432 NAME = giteadbUSER = giteaPASSWD = YourSecurePassword123SSL_MODE = disable[repository] ROOT = /home/gitea/data/gitea-repositories[session] PROVIDER = redisPROVIDER_CONFIG = network=tcp,addr=127.0 .0.1 :6379 ,password=,db=0 [picture] AVATAR_UPLOAD_PATH = /home/gitea/data/avatars[attachment] PATH = /home/gitea/data/attachments[log] ROOT_PATH = /home/gitea/logsMODE = fileLEVEL = Info[security] INSTALL_LOCK = true SECRET_KEY = your-secret-key-hereINTERNAL_TOKEN = your-internal-token-here
4.3 Nginx 反向代理配置 创建 Nginx 配置文件 /etc/nginx/sites-available/gitea:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 server { listen 80 ; server_name git.yourcompany.com; return 301 https://$server_name $request_uri ; } server { listen 443 ssl http2; server_name git.yourcompany.com; ssl_certificate /etc/letsencrypt/live/git.yourcompany.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.yourcompany.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3 ; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off ; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; client_max_body_size 100M ; 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 ; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y ; add_header Cache-Control "public, immutable" ; proxy_pass http://127.0.0.1:3000; } }
启用配置并重启 Nginx:
1 2 3 sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginx
五、高级功能配置 5.1 邮件通知配置 5.2 集成 CI/CD(使用 Drone) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 kind: pipeline type: docker name: default steps: - name: test image: golang:1.21 commands: - go test ./... - name: build image: golang:1.21 commands: - go build -o app . - name: docker image: plugins/docker settings: repo: yourcompany/app tags: latest username: from_secret: docker_username password: from_secret: docker_password
5.3 备份策略 创建备份脚本 /home/gitea/backup.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/bash BACKUP_DIR="/home/gitea/backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR /gitea_backup_$DATE .zip" mkdir -p $BACKUP_DIR sudo systemctl stop giteacd /home/gitea./gitea dump \ --config app.ini \ --file $BACKUP_FILE \ --type zip sudo systemctl start giteafind $BACKUP_DIR -name "gitea_backup_*.zip" -mtime +7 -delete
设置定时任务:
1 2 0 2 * * * /home/gitea/backup.sh
六、性能优化与监控 6.1 数据库优化 1 2 3 4 ALTER DATABASE giteadb SET effective_cache_size = '4GB' ;ALTER DATABASE giteadb SET shared_buffers = '1GB' ;ALTER DATABASE giteadb SET work_mem = '16MB' ;
6.2 Gitea 性能调优 1 2 3 4 5 6 7 8 9 10 11 12 [queue] TYPE = redisCONN_STR = network=tcp,addr=127.0 .0.1 :6379 ,password=,db=0 LENGTH = 1000 [cache] ADAPTER = redisHOST = network=tcp,addr=127.0 .0.1 :6379 ,password=,db=1 [repository] ENABLE_PUSH_CREATE_USER = true ENABLE_PUSH_CREATE_ORG = true
6.3 监控配置 使用 Prometheus 监控 Gitea:
1 2 3 [metrics] ENABLED = true ENABLED_TOKEN = your-metrics-token
七、安全加固 7.1 SSH 安全配置 1 2 3 4 5 6 7 8 9 10 sudo nano /etc/ssh/sshd_configPasswordAuthentication no PubkeyAuthentication yes sudo systemctl restart sshd
7.2 防火墙配置 1 2 3 4 5 6 7 sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 2222/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
7.3 定期更新 1 2 3 4 5 6 7 8 9 cd /home/giteawget -O gitea-new https://dl.gitea.io/gitea/latest/gitea-latest-linux-amd64 chmod +x gitea-newsudo systemctl stop giteamv gitea gitea-oldmv gitea-new giteasudo systemctl start gitea
👋 八、故障排除 8.1 常见问题解决 服务无法启动 :
1 2 3 journalctl -u gitea -f sudo tail -f /home/gitea/log/gitea.log
数据库连接失败 :
1 2 sudo -u postgres psql -h localhost -U gitea -d giteadb
磁盘空间不足 :
1 2 sudo find /home/gitea/data -name "*.tmp" -delete
✨ 结语 通过本文的详细指导,您已经成功搭建了一个功能完整、性能优异的企业级代码托管平台。Gitea 的轻量级特性使其特别适合中小型团队和资源有限的环境。随着团队规模的扩大,您可以根据需要进一步扩展架构,如添加负载均衡、分布式存储等。
自建代码托管平台不仅提供了数据自主权,还能根据团队特定需求进行深度定制。建议定期关注 Gitea 的版本更新,及时获取新功能和安全性修复,确保平台的稳定运行。
记住,良好的备份策略和监控体系是生产环境稳定运行的基石。祝您的团队在代码协作中取得更大的成功!
[up主专用,视频内嵌代码贴在这]
零点119官方团队
一站式科技资源平台 | 学生/开发者/极客必备
本文由零点119官方团队原创,转载请注明出处。文章ID: ea016370