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

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
相关文章 智能推荐
1
Docker-Compose 自部署 MinIO S3 对象存储服务
私有化部署 如何用Docker Compose快速部署MinIO S3对象存储?本文详细拆解环境准备、配置文件编写及启动验证全流程,手把手指导你搭建私有化数据存储平台。支持Lobe-Chat、思源笔记等应用的S3兼容数据同步,确保高效安全的数据管理。
2
Gitea Webhook 自动部署:零依赖实现 Astro 博客多端同步发布
私有化部署 如何在多个地方(家里、公司)推送代码后实现博客自动构建?本文分享基于 Gitea Webhook 的零依赖解决方案,重点解决 Astro 博客多端同步发布的痛点,助你实现代码一推,博客自动更新的理想工作流。
3
Docker-Compose自部署RSSHub,打造个人专属信息聚合系统
私有化部署 如何用Docker-Compose自建RSSHub服务?本文详细拆解从环境准备到配置优化的全流程,解决访问速度慢、内容质量差等问题,助你快速搭建属于自己的RSS信息流订阅系统,并提供从安装Docker到配置环境变量的完整指南,让你轻松掌握自建RSS信息流的方法。
4
使用 Lume 在 macOS 虚拟机中隔离运行 OpenClaw/Moltbot:完整部署指南
私有化部署 想在 macOS 虚拟机中安全隔离运行 OpenClaw 并实现高效部署?本文提供私有化部署实战复盘,详细步骤演示 Lume 创建虚拟机的全过程,帮助你快速搭建并确保系统稳定。
5
Docker-Compose 自部署 Umami 网站分析工具
私有化部署 如何快速部署 Umami 网站分析工具?本文详解 Docker Compose 自部署全流程,包含环境检查、YML 文件配置及数据库设置,10 分钟完成零配置部署。适合开发者和运维人员,轻松实现网站流量数据的私有化分析,避免 Google Analytics 隐私问题。
随机文章 随机推荐

评论区

Profile Image of the Author
MoeWah
Hello, I'm MoeWah.
专题文章
分类
站点统计
文章
198
分类
9
标签
434
总字数
373,761
运行时长
0
最后活动
0 天前

目录