自建 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

- 私有 — 代码不出服务器

- 免费 — 开源不花钱

几分钟部署,永久使用。