# Gitea Docker 部署 使用 Docker Compose 部署 Gitea,支持两种模式: - **HTTP 模式**:Gitea 直接暴露端口,仅 HTTP - **Caddy 模式**:通过 Caddy 反向代理,同时支持 HTTP 和 HTTPS(自动证书) ## 架构 ### HTTP 模式(默认) ``` Client → Gitea (HTTP_PORT, e.g. 3000) ├─ PostgreSQL (5432, Docker 内部网络) └─ Gitea SSH (22 → 宿主机 SSH_PORT) ``` ### Caddy 模式(--profile caddy) ``` Client → Caddy (80/443, HTTP + HTTPS) → Gitea (3000, Docker 内部网络) ├─ PostgreSQL (5432, Docker 内部网络) └─ Gitea SSH (22 → 宿主机 SSH_PORT) ``` ## 快速开始 ### 前提条件 - 服务器 `SSH_PORT`(默认 2222)端口可从外网访问 - 如使用 Caddy 模式:域名已解析到服务器公网 IP,且 80、443 端口可从外网访问 ### 1. 配置环境变量 ```bash cp .env.example .env ``` 编辑 `.env`,关键配置: ```env DOMAIN=git.example.com # 你的域名 SSH_PORT=2222 # SSH 端口(宿主机端口,容器内仍为 22) POSTGRES_PASSWORD=changeme # PostgreSQL 密码(务必修改) ``` #### HTTP 模式 ```env ROOT_URL=http://git.example.com:3000/ ``` #### Caddy 模式 ```env ROOT_URL=https://git.example.com/ ``` ### 2. 启动服务 ```bash # HTTP 模式(仅 Gitea + PostgreSQL,无 Caddy) docker compose up -d # Caddy 模式(HTTP + HTTPS,Caddy 反向代理) docker compose --profile caddy up -d ``` > Caddy 会自动为 `DOMAIN` 申请 Let's Encrypt 证书,稍等片刻后即可通过 HTTPS 访问。 ### 3. 初始配置 首次访问会进入安装向导: 1. 设置管理员账户 2. 数据库已通过环境变量配置为 PostgreSQL,无需手动设置 ## 访问方式 ### HTTP 模式 | 方式 | 地址 | |-----|------| | Web 界面 | `http://:` | | HTTP 克隆 | `git clone http://:/<用户>/<仓库>.git` | | SSH 克隆 | `git clone ssh://git@:/<用户>/<仓库>.git` | ### Caddy 模式 | 方式 | 地址 | |-----|------| | Web 界面 | `https://` | | HTTP 克隆 | `git clone http:///<用户>/<仓库>.git` | | HTTPS 克隆 | `git clone https:///<用户>/<仓库>.git` | | SSH 克隆 | `git clone ssh://git@:/<用户>/<仓库>.git` | ## Git LFS 已启用 Git LFS 支持,使用方法: ```bash git lfs install git lfs track "*.psd" git add .gitattributes git commit -m "Track PSD files with LFS" git push ``` ## 数据备份 ### 备份 PostgreSQL 数据库 ```bash docker exec postgres pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql ``` ### 备份全部数据 ```bash # 备份数据目录 + 数据库导出 tar -czvf gitea-data-$(date +%Y%m%d).tar.gz data/ docker exec postgres pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql ``` ### 恢复数据库 ```bash cat gitea-db-20260327.sql | docker exec -i postgres psql -U gitea gitea ``` 重要文件: - `data/postgres/` - PostgreSQL 数据 - `data/git/repositories/` - 仓库数据 - `data/git/lfs/` - LFS 文件 - `data/gitea/conf/app.ini` - Gitea 配置 ## SQLite 迁移到 PostgreSQL 如果之前使用 SQLite,需执行以下步骤迁移到 PostgreSQL: ### 1. 停止 Gitea(保留 PostgreSQL 运行) ```bash docker compose stop gitea ``` ### 2. 备份现有数据 ```bash cp data/gitea/gitea.db data/gitea/gitea.db.bak ``` ### 3. 修改 app.ini 数据库配置 编辑 `data/gitea/conf/app.ini`,将 `[database]` 段改为: ```ini [database] DB_TYPE = postgres HOST = postgres:5432 NAME = gitea USER = gitea PASSWD = <你的 POSTGRES_PASSWORD> SCHEMA = SSL_MODE = disable PATH = ``` > 注意:如果 docker-compose.yml 中已通过 `GITEA__database__*` 环境变量配置,则 app.ini 中的值会被覆盖,可不修改 app.ini。 ### 4. 执行数据迁移 ```bash docker compose exec gitea gitea migrate ``` ### 5. 重启 Gitea ```bash docker compose start gitea ``` ### 6. 验证 访问 Web 界面,确认用户、仓库数据完整。 > 迁移成功后 `data/gitea/gitea.db` 可以保留作为备份,不会影响 PostgreSQL 运行。 ## 常用命令 ```bash # 启动(HTTP 模式) docker compose up -d # 启动(Caddy 模式) docker compose --profile caddy up -d # 停止 docker compose down # 查看日志 docker compose logs -f # 查看 PostgreSQL 日志 docker compose logs -f postgres # 查看 Caddy 日志 docker compose logs -f caddy # 重启 docker compose restart # 更新版本 # 修改 .env 中的 GITEA_VERSION 后 docker compose up -d # 连接 PostgreSQL docker exec -it postgres psql -U gitea ```