自建 Git 服务器 Gitea 部署指南
代码想私有托管,又不想用 GitHub?Gitea 是最好的选择。轻量、私有、免费。
为什么 Gitea
- 轻量 — 几百 MB,Docker 几分钟跑起来
- 私有 — 代码存在自己服务器
- 功能全 — Git 仓库、PR、Wiki、CI 都有
- 免费开源
部署
version: "3.8"
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
ports:
- "3022:22" # SSH
- "3001:3000" # Web
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__server__DOMAIN=git.soulwrite.xyz
- GITEA__server__ROOT_URL=https://git.soulwrite.xyz/
networks:
- app
networks:
app:
driver: bridge
首次访问 http://IP:3001,配置管理员账号和数据库。
数据库
Gitea 支持 SQLite(简单)或 MySQL/PostgreSQL(生产)。用 SQLite 的话:
volumes:
- ./gitea-data:/data
不需要额外数据库容器
MySQL 配置:
services:
gitea:
environment:
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=mysql:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea_pass
mysql:
image: mysql:8.0
# ...
反代 + HTTPS
upstream gitea_backend {
server gitea:3000;
}
server {
listen 443 ssl;
server_name git.soulwrite.xyz;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://gitea_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ ^/(ssh_info|git) {
proxy_pass http://gitea_backend;
}
}
使用
1. 创建仓库
Web 界面 → 新仓库 → 填写名称 → 创建。
2. 本地克隆
git clone https://git.soulwrite.xyz/用户名/仓库名.git
3. SSH 推送
# 添加 SSH Key 到 Gitea
git remote add origin [email protected]:用户名/仓库名.git
git push -u origin main
备份
# 备份数据目录
tar czf gitea-backup-$(date +%F).tar.gz ./gitea-data
踩坑记录
坑 1:SSH 推不上
SSH 端口改成了 3022:
git remote add origin ssh://[email protected]:3022/用户/仓库.git
坑 2:页面样式乱
首次加载慢,等几秒。或者检查静态资源有没有正确加载。
坑 3:仓库打不开
权限问题:
chown -R 1000:1000 ./gitea-data
我的用法
- 私有代码 — 不方便放 GitHub 的项目
- 配置备份 — 服务器配置文件丢进仓库
- 笔记 — 用 Git 管理 Markdown 笔记
总结
Gitea 是自建 Git 服务的最佳选择:
- 轻量 — 几百 MB
- 功能全 — PR、Wiki、CI
- 私有 — 代码不出服务器
- 免费 — 开源不花钱
几分钟部署,永久使用。
Nginx/OpenResty 自建Git服务器Gitea
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法