Gitea 从 IP 访问切换到域名与 HTTPS

由 Markdown 技术文档生成的 wiki 页面。公开版已对敏感服务器信息做占位符脱敏。

返回技术导航 返回首页文章
Source: ops/02-gitea-domain-https-switch.md

文档日期:2026-07-08 当前 Gitea 地址:http://<服务器公网 IP>:<Gitea Web 端口>/ 计划域名:<Gitea 域名>

公开版说明:本文中的公网 IP、域名、端口和仓库路径均已脱敏,实际执行前需要替换为真实值。

1. 当前状态

当前 Gitea 已通过 Docker 运行,访问方式为:

text
http://<服务器公网 IP>:<Gitea Web 端口>/

这种方式适合临时使用和初始化排障。后续备案完成后,建议切换为:

text
https://<Gitea 域名>/

切换目标不是简单改一个域名,而是同时完成:

  • DNS A 记录
  • 阿里云备案状态确认
  • Nginx HTTP 反向代理
  • Certbot HTTPS 证书
  • Gitea app.ini 中的域名与 ROOT_URL
  • Git remote 地址更新

2. 切换前检查

确认容器正常:

bash
cd <Gitea compose 目录>
docker compose ps
curl -I http://127.0.0.1:<Gitea Web 端口>/

确认公网 IP 访问正常:

bash
curl -I http://<服务器公网 IP>:<Gitea Web 端口>/

确认已备份:

bash
docker run --rm \
  -v gitea_gitea-data:/data \
  -v "$PWD":/backup \
  alpine \
  tar -czf /backup/gitea-data-before-https-$(date +%F).tar.gz -C /data .

3. DNS 配置

在 DNS 平台添加 A 记录:

text
主机记录:git
记录类型:A
记录值:<服务器公网 IP>

验证解析:

bash
nslookup <Gitea 域名>

如果返回的 IP 是 <服务器公网 IP>,说明 DNS 基本生效。

4. 先配置 HTTP 反向代理

不要一开始就写 HTTPS 证书路径。证书文件不存在时,Nginx 会直接启动失败。

先写 HTTP:

nginx
server {
    listen 80;
    server_name <Gitea 域名>;

    client_max_body_size 512M;

    location / {
        proxy_pass http://127.0.0.1:<Gitea Web 端口>;
        proxy_http_version 1.1;

        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;
    }
}

检查并重载:

bash
nginx -t
systemctl reload nginx

验证:

bash
curl -I http://<Gitea 域名>/

5. 申请 HTTPS 证书

HTTP 可访问后,再执行:

bash
certbot --nginx -d <Gitea 域名>

成功后检查:

bash
curl -I https://<Gitea 域名>/

自动续期检查:

bash
certbot renew --dry-run

6. 修改 Gitea app.ini

进入容器编辑:

bash
docker exec -it gitea vi <Gitea app.ini>

建议 [server] 段调整为:

ini
[server]
PROTOCOL = http
DOMAIN = <Gitea 域名>
ROOT_URL = https://<Gitea 域名>/
HTTP_PORT = <Gitea Web 端口>
SSH_DOMAIN = <Gitea 域名>
SSH_PORT = <Gitea SSH 端口>

注意:PROTOCOL = http 是指 Gitea 容器内部仍以 HTTP 对 Nginx 提供服务;公网 HTTPS 由 Nginx 处理。

重启:

bash
cd <Gitea compose 目录>
docker compose restart

7. 更新 Git remote

查看现有地址:

bash
git remote -v

HTTP 地址切换:

bash
git remote set-url gitea https://<Gitea 域名>/<用户名>/<仓库名>.git

SSH 地址切换:

bash
git remote set-url gitea ssh://git@<Gitea 域名>:<Gitea SSH 端口>/<用户名>/<仓库名>.git

测试:

bash
git ls-remote gitea

8. 安全收口

确认域名和 HTTPS 可用后,可以考虑把 Docker 的 <Gitea Web 端口> 端口限制为本机访问:

yaml
ports:
  - "127.0.0.1:<Gitea Web 端口>:<Gitea Web 端口>"
  - "<Gitea SSH 端口>:22"

这样外部访问只能通过 Nginx 进入,减少绕过 HTTPS 的入口。

修改后重建:

bash
docker compose up -d

9. 回滚方式

如果域名或 HTTPS 出问题,可以先回到 IP 访问:

ini
[server]
DOMAIN = <服务器公网 IP>
ROOT_URL = http://<服务器公网 IP>:<Gitea Web 端口>/
SSH_DOMAIN = <服务器公网 IP>
SSH_PORT = <Gitea SSH 端口>

重启:

bash
docker compose restart

临时访问:

text
http://<服务器公网 IP>:<Gitea Web 端口>/

10. 最小检查清单

text
[ ] Gitea 数据已备份
[ ] DNS A 记录指向 <服务器公网 IP>
[ ] 备案状态允许访问
[ ] HTTP 反向代理可访问
[ ] Certbot 证书申请成功
[ ] ROOT_URL 已改为 https://<Gitea 域名>/
[ ] Git remote 已更新
[ ] <Gitea Web 端口> 端口已考虑本机绑定