Skip to content

Gitea 安装与反向代理文档

环境信息

  • 宿主机(FRP + Nginx 反向代理)10.20.24.225 / 218.83.245.18
  • FRP 服务端(公网入口)8.153.84.140
  • 域名ai-ear.cn8.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 -f

2. 宿主机 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 -arv

3. 虚拟机安装 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/fstab

4. 启动 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.0

5. 宿主机 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 docker

8. 管理员账号与初始化

当前 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