886 字
4 分钟

Docker-compose 自部署个人代码托管服务:Gitea 极简搭建指南

前言#

前段时间我分享过 Gogs安装教程,体验还不错。但说实话,Gitea 这个从 Gogs 分支而来的轻量级 DevOps 平台真的更香——Go 语言编写、极易安装、运行飞快,支持 Git 托管和 CI/CD,更新频繁维护活跃,更适合长期使用。

为什么我选择 Gitea 而不是 GitHub?#

说实话,刚开始我也和很多人一样,直接用 GitHub 多方便啊。但是慢慢地我发现了一些问题:

  • 代码隐私没保障 - 尤其是在内网环境或者一些私密项目中
  • 依赖第三方平台 - 稳定性和政策风险都不在自己掌控中
  • 有各种限制 - 私有仓库数量、协作人数都有门槛

你有没有遇到过这样的情况?公司内部项目想自托管,又不想折腾 GitLab 那么重的东西。这时候 Gitea 真的太适合了。

开始搭建: Docker Compose 部署#

个人比较习惯使用 Docker Compose 来进行自部署,原因只有一个:它更易于维护。

下面是我的 docker-compose.yml 配置,使用的是 PostgreSQL 数据库(高性能) :

version: "3"
networks:
gitea:
external: false
services:
server:
image: docker.gitea.com/gitea:1.25.4
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: docker.io/library/postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data

更多关于Docker Compose 容器化部署的配置可以参考官方文档 ->通过Docker安装 & 环境变量

运行启动:

Terminal window
docker-compose up -d

等个几秒,访问 http://localhost:3000 就能看到安装界面了。

SSH 配置踩坑#

第一次部署完,页面上显示的 SSH 地址不对。我把容器里的 22 端口映射到了宿主机的 222,但页面显示的还是默认端口。

结果就是 clone 的时候报 connection refused,折腾了半天。

解决办法:

/data/gitea/conf/app.ini

[server]
SSH_DOMAIN = your-git-domain.com
DISABLE_SSH = false
SSH_PORT = 222
SSH_LISTEN_PORT = 22 # 这个必须是 22,改了没用

注意 SSH_LISTEN_PORT 是容器内部监听的,固定是 22。我一开始改了这个,重启好几次都没生效,后来看文档才明白。

改完重启:

Terminal window
docker restart gitea

这时候页面上显示的 clone 地址就是 ssh://git@your-git-domain.com:222/user/repo.git 了。

客户端配置:

不想每次敲端口,可以在 ~/.ssh/config 里加:

Host gitea
HostName your-git-domain.com
Port 222
User git

之后就能直接用 git clone gitea:user/repo.git

Nginx 反向代理#

有域名的话建议配个反向代理。注意 client_max_body_size 要设大一点,不然传大文件会报错。

location / {
client_max_body_size 512M;
proxy_pass http://localhost:3000;
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
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;
}

注意这些配置项:

  • client_max_body_size 512M - 支持上传 512MB 的文件
  • proxy_set_header UpgradeConnection - 支持 WebSocket(Gitea 的实时功能需要)
  • X-Forwarded-Proto - 让 Gitea 知道是 HTTPS 还是 HTTP

总结回顾#

回顾一下核心要点:

  1. ✅ Docker Compose 一键部署,超级简单
  2. ✅ PostgreSQL 数据库性能更好
  3. ✅ SSH 端口配置要正确,否则 clone 不通
  4. ✅ Nginx 反向代理记得设置 client_max_body_size

现在就可以开始:

  1. 创建目录,复制上面的 docker-compose.yml
  2. 运行 docker-compose up -d 启动
  3. 访问 http://localhost:3000 完成初始配置
  4. 修改 app.ini 配置 SSH 端口
  5. (可选)配置 Nginx 反向代理

Gitea 真的比 GitLab 轻量太多,使用下来整体挺稳的。个人或者小团队用很合适。也可以考虑把 Astro 静态博客托管到你的 Gitea 私人仓库进行版本管理及自动化拉取变更、构建静态页面。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Docker-compose 自部署个人代码托管服务:Gitea 极简搭建指南
https://blog.moewah.com/posts/2221/
作者
MoeWah
发布于
2025-04-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
MoeWah
Hello, I'm MoeWah.
分类
标签
站点统计
文章
163
分类
9
标签
353
总字数
282,616
运行时长
0
最后活动
0 天前

目录