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

评论区

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

目录