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安装 & 环境变量
运行启动:
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.comDISABLE_SSH = falseSSH_PORT = 222SSH_LISTEN_PORT = 22 # 这个必须是 22,改了没用注意 SSH_LISTEN_PORT 是容器内部监听的,固定是 22。我一开始改了这个,重启好几次都没生效,后来看文档才明白。
改完重启:
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 Upgrade和Connection- 支持 WebSocket(Gitea 的实时功能需要)X-Forwarded-Proto- 让 Gitea 知道是 HTTPS 还是 HTTP
总结回顾
回顾一下核心要点:
- ✅ Docker Compose 一键部署,超级简单
- ✅ PostgreSQL 数据库性能更好
- ✅ SSH 端口配置要正确,否则 clone 不通
- ✅ Nginx 反向代理记得设置
client_max_body_size
现在就可以开始:
- 创建目录,复制上面的
docker-compose.yml - 运行
docker-compose up -d启动 - 访问
http://localhost:3000完成初始配置 - 修改 app.ini 配置 SSH 端口
- (可选)配置 Nginx 反向代理
Gitea 真的比 GitLab 轻量太多,使用下来整体挺稳的。个人或者小团队用很合适。也可以考虑把 Astro 静态博客托管到你的 Gitea 私人仓库进行版本管理及自动化拉取变更、构建静态页面。
推荐文章
基于标签匹配 · 智能推荐支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
喵斯基部落