海外云服务器搭建Gitea自建Git服务器完整教程(2026最新版)
Meta Description: 从零开始用海外云服务器搭建Gitea轻量Git服务器,涵盖Docker/二进制双安装方式、MySQL/SQLite数据库配置、反向代理SSL、用户权限管理、CI/CD集成,附服务器配置推荐与价格对比。
- 前言
- 为什么选择Gitea自建Git服务器
- 服务器配置推荐
- 第一步:服务器初始化
- 第二步:安装MySQL数据库
- 第三步:安装Gitea(二进制方式)
- 第四步:配置Systemd服务
- 第五步:Web初始化配置
Meta Description: 从零开始用海外云服务器搭建Gitea轻量Git服务器,涵盖Docker/二进制双安装方式、MySQL/SQLite数据库配置、反向代理SSL、用户权限管理、CI/CD集成,附服务器配置推荐与价格对比。
关键词:海外云服务器搭建Gitea、自建Git服务器教程、Gitea部署教程、Gitea Docker安装、Gitea反向代理配置、轻量GitLab替代、海外代码托管
前言
用海外云服务器搭建Gitea自建Git服务器,是个人开发者和小型团队摆脱GitHub/GitLab限制的最佳方案。Gitea是一个用Go语言编写的轻量级自托管Git服务,功能涵盖代码托管、Pull Request、Issue追踪、CI/CD(Gitea Actions)、包管理(Package Registry)等,安装仅需一个二进制文件或一条Docker命令,内存占用不到GitLab的十分之一。与GitHub相比,Gitea无仓库数量限制、无协作者限制、代码完全自主可控;与GitLab CE相比,Gitea启动速度快10倍、内存占用低5-10倍,2核1G的小型VPS即可流畅运行。本文提供完整的命令步骤,从安装到配置再到安全加固,所有操作均可直接复制执行。
🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持。
一、为什么选择Gitea自建Git服务器
完全自主可控:代码存储在自己的服务器上,不受GitHub政策变动影响。2024年GitHub宣布收紧免费私有仓库协作者限制后,自建Git服务的需求大幅增长。Gitea不收集任何遥测数据,隐私有保障。
资源占用极低:Gitea用Go语言编写,编译为单一二进制文件,不依赖Node.js、Ruby、Python等运行时。在2核1G的VPS上,Gitea启动后仅占用约50MB内存,而GitLab CE至少需要4GB内存才能正常运行。这对于预算有限的个人开发者和初创团队来说是决定性优势。
功能完整度高:Gitea支持Git全部核心功能(分支、标签、合并、rebase),并提供Web端代码编辑、Pull Request、Code Review、Issue/Wiki、Actions(类GitHub Actions的CI/CD)、Package Registry(npm/Maven/Docker/PyPI)、LFS(大文件存储)、Webhook、LDAP/OAuth2集成等功能。对于90%的开发团队,Gitea的功能已经足够。
迁移成本低:从GitHub/GitLab迁移仓库到Gitea非常简单——Gitea内置了从GitHub、GitLab、Gogs、Gitea、Bitbucket等平台一键导入仓库的功能,也支持标准的 git push --mirror 方式迁移。反之,将来想迁出也只需反向操作,不存在数据锁定。
社区活跃:Gitea在GitHub上有45k+ Stars,活跃贡献者超过500人,每月发布新版本,中文文档完善。遇到问题可以在Gitea官方论坛或中文社区快速获得帮助。
二、服务器配置推荐
Gitea对硬件要求极低,但要根据仓库规模和并发用户数合理选择配置:
| 使用场景 | CPU | 内存 | 硬盘 | 带宽 | 推荐系统 | 月费参考 |
|---|---|---|---|---|---|---|
| 个人代码托管 | 1核 | 1GB | 20GB SSD | 1Mbps | Ubuntu 22.04 | $3.5-5/月 |
| 小团队(3-10人) | 2核 | 2GB | 40GB SSD | 3Mbps | Ubuntu 22.04 | $6-10/月 |
| 中型团队(10-30人) | 4核 | 4GB | 80GB SSD | 5Mbps | Ubuntu 22.04 | $15-25/月 |
| 大型项目/CI密集 | 8核 | 8GB | 160GB SSD | 10Mbps | Ubuntu 22.04 | $30-50/月 |
硬盘预估:代码仓库本身通常不大(1个中型项目约100-500MB),但Gitea的 LFS(大文件存储)和 Actions 构建缓存会快速占用磁盘。建议预留至少双倍于仓库总量的磁盘空间,并启用磁盘配额限制单个用户的存储上限。
| 服务商 | 最低配 | 1核2G | 2核4G | 数据中心 | 优点 |
|---|---|---|---|---|---|
| 阿里云国际版 ECS | $4.2/月 | $5.5/月 | $12/月 | 新加坡/香港/硅谷 | 中文面板、支持支付宝 |
| AWS Lightsail | $3.5/月 | $5/月 | $10/月 | 全球20+区域 | 新用户免费套餐、生态完善 |
| 腾讯云国际版 CVM | $4.5/月 | $6/月 | $13/月 | 香港/新加坡/东京 | 低延迟到国内、微信支付 |
| Vultr | $6.0/月 | $6/月 | $12/月 | 全球32个 | 按小时计费、随时销毁 |
| DigitalOcean | $6.0/月 | $6/月 | $12/月 | 全球14个 | 文档最完善、社区教程多 |
💡 新手建议:选阿里云国际版或腾讯云国际版香港节点,延迟低、有中文面板,通过 5.chengzicloud.cloud 购买还可享额外折扣。
🚀 通过 5.chengzicloud.cloud 购买以上平台均有额外折扣,点击首页查看最新优惠。
三、第一步:服务器初始化
所有操作均以root用户执行。先更新系统并安装基础依赖:
// Ubuntu 22.04
apt update && apt upgrade -y
apt install -y curl wget git unzip apt-transport-https ca-certificates gnupg lsb-release
// CentOS 7
yum update -y
yum install -y curl wget git unzip epel-release
创建专用用户和目录:
// 创建git用户
useradd -m -s /bin/bash git
passwd git
// 创建必要目录
mkdir -p /var/lib/gitea/{custom,data,log}
mkdir -p /etc/gitea
chown git:git /var/lib/gitea/{custom,data,log}
chmod 750 /var/lib/gitea/{custom,data,log}
chown root:git /etc/gitea
chmod 770 /etc/gitea
关键说明:/var/lib/gitea 存储所有数据(仓库、数据库、日志),/etc/gitea 存储配置文件。将配置文件所有者设为 root:git 而非 git:git,是为了防止Gitea进程自身修改配置文件导致安全问题。
四、第二步:安装MySQL数据库
虽然Gitea支持SQLite(适合单人使用),但推荐安装MySQL以获得更好的并发性能和数据安全性。
// Ubuntu 22.04
apt install -y mysql-server
mysql_secure_installation
// CentOS 7
yum install -y mysql-server
systemctl start mysqld
// 获取初始密码
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
创建Gitea专用数据库和用户:
// 登录MySQL
mysql -u root -p
// 创建数据库和用户
CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
EXIT;
密码安全:请将 YourStrongPassword123! 替换为真实的强密码(16位以上,包含大小写字母、数字和特殊字符)。密码会写入配置文件,因此配置文件权限控制至关重要。
五、第三步:安装Gitea(二进制方式)
这是最推荐的安装方式,轻量且可控:
// 下载最新版Gitea(以1.22为例,实际请查看官网获取最新版本号)
su - git
wget -O gitea https://dl.gitea.com/gitea/1.22.0/gitea-1.22.0-linux-amd64
chmod +x gitea
mv gitea /usr/local/bin/
// 验证安装
gitea --version
备选方式:Docker安装
如果偏好容器化部署,可以使用Docker一键安装:
// 安装Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
// 启动Gitea容器
docker run -d \
--name=gitea \
-p 3000:3000 \
-p 2222:22 \
-v /var/lib/gitea:/data \
-v /etc/gitea:/etc/gitea \
-e USER_UID=1000 \
-e USER_GID=1000 \
--restart=always \
gitea/gitea:latest
Docker方式将数据挂载到 /var/lib/gitea,与二进制方式目录结构一致,方便将来切换。SSH端口映射到2222避免与系统SSH冲突。
六、第四步:配置Systemd服务
创建Gitea系统服务,实现开机自启和进程管理:
// 退出git用户,以root操作
exit
// 创建systemd服务文件
cat > /etc/systemd/system/gitea.service << 'EOF'
[Unit]
Description=Gitea
After=network.target
After=mysqld.service
Requires=mysqld.service
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
EOF
// 启动服务
systemctl daemon-reload
systemctl enable --now gitea
// 验证服务状态
systemctl status gitea
此时Gitea已在3000端口运行。打开浏览器访问 http://你的服务器IP:3000,会进入Gitea的初始化安装向导。
七、第五步:Web初始化配置
在浏览器中完成Gitea的初始化设置:
- 数据库设置:选择MySQL,填入
localhost:3306、数据库名gitea、用户gitea、密码 - 仓库根目录:保持默认
/var/lib/gitea/data/gitea-repositories - 应用URL:填入你的域名(如
https://git.yourdomain.com/),末尾带斜杠 - SSH端口:如果使用二进制安装填
22,Docker安装填2222 - HTTP端口:保持
3000 - 管理员账号:设置第一个管理员用户名和密码
- 邮件设置:可选配置SMTP用于找回密码和通知
完成设置后,Gitea会自动重启。用刚才设置的管理员账号登录即可。
八、第六步:Nginx反向代理+SSL证书
生产环境必须使用HTTPS。配置Nginx反向代理并申请Let's Encrypt免费SSL证书:
// 安装Nginx
apt install -y nginx
// 安装Certbot
apt install -y certbot python3-certbot-nginx
创建Nginx配置:
cat > /etc/nginx/sites-available/gitea << 'EOF'
server {
listen 80;
server_name git.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name git.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/git.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.yourdomain.com/privkey.pem;
client_max_body_size 512M;
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 /assets/ {
alias /var/lib/gitea/data/gitea/public/assets/;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
EOF
// 启用站点
ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t
申请SSL证书:
// 先确保域名DNS已解析到服务器IP
certbot --nginx -d git.yourdomain.com --non-interactive --agree-tos -m [email protected]
// 验证自动续签
certbot renew --dry-run
重启Nginx并更新Gitea配置中的应用URL:
systemctl restart nginx
在 /etc/gitea/app.ini 中修改应用URL为HTTPS地址:
[repository]
ROOT_URL = https://git.yourdomain.com/
[server]
DOMAIN = git.yourdomain.com
ROOT_URL = https://git.yourdomain.com/
HTTP_PORT = 3000
重启Gitea使配置生效:
systemctl restart gitea
九、第七步:SSH克隆配置
Gitea支持SSH克隆,配置后用户可以使用SSH密钥推送代码:
// 编辑Gitea配置
cat >> /etc/gitea/app.ini << 'EOF'
[server]
SSH_DOMAIN = git.yourdomain.com
SSH_PORT = 22
SSH_LISTEN_PORT = 22
START_SSH_SERVER = true
EOF
// 重启Gitea
systemctl restart gitea
重要:START_SSH_SERVER = true 让Gitea内置SSH服务器监听22端口。如果系统SSH也使用22端口,会冲突。两种解决方案:
方案一(推荐):将系统SSH改到其他端口:
// 修改SSH端口
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
systemctl restart sshd
方案二:使用Docker方式的2222端口映射,通过 ssh -p 2222 user@host 克隆。
用户在Gitea Web界面添加SSH公钥后,即可通过SSH克隆和推送:
// SSH克隆示例
git clone [email protected]:username/repo.git
// HTTPS克隆示例
git clone https://git.yourdomain.com/username/repo.git
十、第八步:安全加固
Gitea部署完成后,必须进行安全加固:
10.1 防火墙配置
// Ubuntu 22.04 (ufw)
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
// CentOS 7 (firewalld)
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
注意:不要开放3000端口到公网,Nginx反向代理已经处理了HTTP/HTTPS流量。
10.2 限制注册和仓库创建
在Gitea Web管理面板 → 站点设置 → 取消勾选「启用公开注册」,改为仅管理员可创建新用户。或者在 app.ini 中配置:
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true
10.3 定期备份
编写自动备份脚本,每天备份数据库和仓库:
cat > /home/git/backup-gitea.sh << 'BACKUP'
#!/bin/bash
BACKUP_DIR="/home/git/gitea-backups"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
// 备份MySQL数据库
mysqldump -u gitea -p'YourStrongPassword123!' gitea | gzip > $BACKUP_DIR/gitea-db-$DATE.sql.gz
// 备份Gitea数据目录
tar czf $BACKUP_DIR/gitea-data-$DATE.tar.gz /var/lib/gitea/data /etc/gitea/
// 保留最近7天的备份
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
BACKUP
chmod +x /home/git/backup-gitea.sh
// 添加cron定时任务(每天凌晨3点执行)
echo "0 3 * * * /home/git/backup-gitea.sh" | crontab -
10.4 启用Fail2ban防暴力破解
apt install -y fail2ban
cat > /etc/fail2ban/filter.d/gitea.conf << 'EOF'
[Definition]
failregex = .*Failed authentication attempt.*from <HOST>
ignoreregex =
EOF
cat > /etc/fail2ban/jail.d/gitea.conf << 'EOF'
[gitea]
enabled = true
port = http,https
filter = gitea
logpath = /var/lib/gitea/log/gitea.log
maxretry = 5
bantime = 3600
findtime = 600
EOF
systemctl enable --now fail2ban
十一、Gitea Actions:内置CI/CD
Gitea 1.19+内置了Gitea Actions,兼容GitHub Actions的工作流语法,无需额外安装Runner:
在Gitea管理面板 → Actions → Runners → 添加Runner:
// 安装Gitea Act Runner
wget -O act_runner https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-$(uname -s)-$(uname -m)
chmod +x act_runner
mv act_runner /usr/local/bin/
// 注册Runner(在管理面板获取注册Token后执行)
act_runner register --instance https://git.yourdomain.com --token YOUR_REGISTRATION_TOKEN
// 创建systemd服务
cat > /etc/systemd/system/gitea-runner.service << 'EOF'
[Unit]
Description=Gitea Runner
After=network.target
[Service]
Type=simple
User=git
ExecStart=/usr/local/bin/act_runner daemon
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now gitea-runner
在仓库中创建 .gitea/workflows/ci.yml 即可使用:
name: CI Pipeline
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: echo "Build step"
- name: Test
run: echo "Test step"
十二、常见问题FAQ
Q:Gitea和GitLab CE有什么区别?
A:最大的区别是资源占用。Gitea用Go编写,单二进制文件,2核1G即可流畅运行;GitLab CE用Ruby编写,官方推荐最低4核8G。功能上GitLab CE更丰富(内置容器注册表、监控面板、安全扫描),但Gitea覆盖了90%的日常开发需求。对于个人开发者和10人以下团队,Gitea是性价比最高的选择。
Q:从GitHub迁移仓库到Gitea麻烦吗?
A:非常简单。在Gitea Web界面点击「迁移仓库」→ 选择「GitHub」→ 输入GitHub Personal Access Token → 选择要迁移的仓库 → 点击确认。Gitea会自动导入代码、Issues、Pull Requests、Wiki和协作权限。也可以通过命令行 git push --mirror 迁移。
Q:Gitea支持Docker镜像仓库吗?
A:支持。Gitea内置了Package Registry,可以托管Docker镜像、npm包、Maven包、PyPI包等。在管理面板启用后,通过 docker push git.yourdomain.com/username/repo:tag 推送镜像。
Q:多人协作时SSH密钥怎么管理?
A:每个用户在Gitea Web界面 → 设置 → SSH公钥中添加自己的公钥。一个用户可以添加多个公钥(不同设备)。管理员可以在管理面板查看和删除所有用户的SSH公钥。
Q:仓库数据会丢失吗?
A:只要做好备份就不会。Gitea的数据全部存储在MySQL数据库和 /var/lib/gitea/data 目录中。建议:(1) 启用MySQL的自动备份;(2) 定期打包 /var/lib/gitea/data 目录;(3) 将备份上传到异地存储(如阿里云OSS或AWS S3)。上面的备份脚本已经涵盖了前两步。
Q:Gitea的Actions和GitHub Actions完全兼容吗?
A:大部分兼容。Gitea Actions支持所有常用的GitHub Actions(checkout、setup-node、upload-artifact等),工作流语法完全一致。少数使用 github.event 特定字段的高级Action可能不兼容,但主流CI/CD场景没有问题。
Q:可以同时托管多个用户的代码仓库吗?
A:可以。Gitea本身就是为多用户设计的。每个注册用户有独立的命名空间(username/repo),支持创建组织(Organization)进行团队协作。管理员可以设置存储配额、仓库数量限制等策略。
十三、总结
海外云服务器搭建Gitea自建Git服务器,是个人开发者和小型团队实现代码自主可控的最优解。整个安装过程30分钟即可完成,一台$5/月的入门级VPS就能流畅运行。相比GitHub的隐私风险和GitLab CE的资源消耗,Gitea在功能完整度和运维成本之间取得了最佳平衡。无论是个人项目管理、团队协作开发,还是CI/CD自动化部署,Gitea都能胜任。
延伸阅读:
- 海外云服务器搭建Docker+Portainer容器管理平台完整教程
- 海外云服务器搭建WordPress独立博客完整教程
- 海外云服务器搭建Nginx反向代理+Let's Encrypt SSL证书配置教程
🚀 需要海外云服务器搭建Gitea?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,2核2G低至$5/月,享专属折扣和中文技术支持。
本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。