主题
Gitea 安装与反向代理文档
环境信息
- 宿主机(FRP + Nginx 反向代理):
10.20.24.225/218.83.245.18 - FRP 服务端(公网入口):
8.153.84.140 - 域名:
ai-ear.cn→8.153.84.140 - Gitea 虚拟机:
192.168.122.156 - 登录凭据:
root/ai-ear.cn - Gitea 版本:
1.27.0 - 容器镜像:
docker.gitea.com/gitea:1.27.0 - Gitea Web 访问地址:https://ai-ear.cn:9002
- Gitea 内部地址:http://192.168.122.156:3000
- SSH 端口映射:宿主机
2222→ 容器22 - 持久化目录:
/u02/gitea(NFS 挂载到宿主机/mnt/xfs/gitea)
访问链路
text
浏览器 https://ai-ear.cn:9002
↓
远程 Nginx (8.153.84.140:9002) SSL 终止
↓
FRP Server (8.153.84.140:19002)
↓
FRP Client (10.20.24.225)
↓
本地 Nginx (127.0.0.1:9002) 反向代理
↓
Gitea 容器 (192.168.122.156:3000)1. 宿主机 FRP 配置
配置文件:/etc/frp/frpc.toml
toml
# FRP Client Configuration
# Deploy this file on local host (10.20.24.225)
serverAddr = "8.153.84.140"
serverPort = 7000
transport.tcpMux = true
auth.method = "token"
auth.token = "xxx"
# 9002 端口映射给 Gitea
[[proxies]]
name = "host-tcp-9002"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9002
remotePort = 19002⚠️
auth.token为敏感信息,请勿外传。
服务状态:
bash
systemctl status frpc
journalctl -u frpc -f2. 宿主机 NFS 导出
bash
# 添加 NFS 导出条目(使用 no_root_squash,确保容器内 root 可正常设置权限)
echo "/mnt/xfs/gitea *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
# 重新加载导出
sudo exportfs -arv3. 虚拟机安装 NFS 并挂载
bash
ssh root@192.168.122.156
# 安装 NFS 客户端
dnf install -y nfs-utils
# 创建挂载点
mkdir -p /u02/gitea
# 挂载 NFS 目录
mount 192.168.122.1:/mnt/xfs/gitea /u02/gitea
# 设置容器 git 用户权限(UID/GID 1000)
chown 1000:1000 /u02/gitea配置开机自动挂载:
bash
echo "192.168.122.1:/mnt/xfs/gitea /u02/gitea nfs defaults,_netdev 0 0" >> /etc/fstab4. 启动 Gitea 容器
bash
docker run -d --name gitea \
--restart=always \
-p 3000:3000 \
-p 2222:22 \
-v /u02/gitea:/data \
-e ROOT_URL=https://ai-ear.cn:9002/ \
-e SSH_DOMAIN=ai-ear.cn \
-e SSH_PORT=2222 \
-e USER_UID=1000 \
-e USER_GID=1000 \
docker.gitea.com/gitea:1.27.05. 宿主机 Nginx 反向代理
配置文件:/etc/nginx/sites-available/gitea.conf
nginx
server {
listen 127.0.0.1:9002;
server_name ai-ear.cn;
access_log /var/log/nginx/gitea.access.log;
error_log /var/log/nginx/gitea.error.log;
location / {
proxy_pass http://192.168.122.156:3000;
proxy_set_header Host ai-ear.cn:9002;
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 https;
proxy_set_header X-Forwarded-Host ai-ear.cn;
proxy_set_header X-Forwarded-Port 9002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}启用并重启:
bash
sudo ln -sf /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/gitea.conf
sudo nginx -t
sudo systemctl reload nginx验证本地监听:
bash
ss -ltnp | grep 9002
curl -H "Host: ai-ear.cn" -H "X-Forwarded-Proto: https" http://127.0.0.1:9002/6. 验证公网访问
bash
curl -I -k https://ai-ear.cn:9002/返回 HTTP 200,页面为 Gitea。
7. 确保 Docker 在 NFS 挂载后启动(可选但建议)
防止开机时 Docker 在 NFS 挂载前启动,导致数据写入本地目录:
bash
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/remote-fs.conf <<EOF
[Unit]
Requires=remote-fs.target
After=remote-fs.target
EOF
systemctl daemon-reload
systemctl restart docker8. 管理员账号与初始化
当前 Gitea 已初始化,管理员账号:
| 项目 | 值 |
|---|---|
| 用户名 | yaoguang2800 |
| 邮箱 | 2430768953@qq.com |
| 管理员 | 是 |
登录地址:https://ai-ear.cn:9002/user/login
如果忘记管理员密码,可在虚拟机内重置:
bash
ssh root@192.168.122.156
docker exec --user git gitea gitea admin user change-password --username yaoguang2800 --password <新密码>9. 禁止用户注册
配置文件:/u02/gitea/gitea/conf/app.ini
ini
[service]
DISABLE_REGISTRATION = true修改命令:
bash
ssh root@192.168.122.156
sed -i 's/^DISABLE_REGISTRATION = false/DISABLE_REGISTRATION = true/' /u02/gitea/gitea/conf/app.ini
docker restart gitea验证:访问 https://ai-ear.cn:9002/user/sign_up,页面提示:
Registration is disabled. Please contact your site administrator.
常用命令
bash
# 停止 / 启动 Gitea
docker stop gitea
docker start gitea
# 查看日志
docker logs -f gitea
# 进入容器
docker exec -it gitea bash
# 查看 FRP 状态
systemctl status frpc
journalctl -u frpc -f
# 查看 Nginx 日志
tail -f /var/log/nginx/gitea.access.log /var/log/nginx/gitea.error.log