1 安装

1.1 准备工作

  • 域名:

    • Web:git.example.com(Cloudflare 橙云,用于 80/443 反代访问)

    • SSH:ssh.example.com(Cloudflare 灰云,仅 DNS,直接连 2222)

  • 端口:开放 80/443(Web)与 2222(SSH 对外映射)。

  • 证书:建议在 1Panel 中为 git.example.com 申请 Let’s Encrypt 证书。

  • 目录:准备 Gitea 数据与日志目录(默认:/data/gitea)。

1.2 通过 1Panel 安装 Gitea

  1. 打开 1Panel → 应用商店,搜索 Gitea,点击 安装。

  2. 数据卷:将容器的数据目录挂载到主机的 /data/gitea(示例)。

  3. 端口映射:

    • HTTP:容器 3000 → 仅内网访问或临时对外;后续建议通过 1Panel 站点反代到 https://git.example.com/

    • SSH:容器 22 → 映射主机 2222(对外)。

  4. 启动容器,确认运行正常。

1.3 首次启动与初始化向导

  • 访问临时地址(如 http://服务器IP:3000)进入 Gitea 初始化向导:

    • 数据库:生产建议 MySQL/PostgreSQL

    • 站点 URL:暂可先留默认,完成安装后我们会在 app.ini 里设置 ROOT_URL=https://git.example.com/

    • SSH设置:先启用,具体端口/域名稍后在 app.ini 里统一调整。

2 配置

2.1 关闭注册

Gitea 支持在 app.ini 里关闭匿名注册,这样仓库只对已邀请用户开放:

 [service]
 DISABLE_REGISTRATION = true
 REQUIRE_SIGNIN_VIEW = false
 REGISTER_EMAIL_CONFIRM = false
 ENABLE_NOTIFY_MAIL = false
 ALLOW_ONLY_EXTERNAL_REGISTRATION = false
 ENABLE_CAPTCHA = false
 DEFAULT_KEEP_EMAIL_PRIVATE = true
 DEFAULT_ALLOW_CREATE_ORGANIZATION = true
 DEFAULT_ENABLE_TIMETRACKING = true
 NO_REPLY_ADDRESS = noreply.localhost

2.2 在配置文件中修改配置

  • 1Panel 安装的 Gitea 通常将配置放在 /data/gitea/conf/app.ini

  • 修改后重启容器生效:1Panel → 容器 → 重启。

小贴士:不要只改环境变量忘了改 app.ini;另外 ROOT_URL 与反向代理一致性非常重要(见下一节)。

2.3 站点与 URL

  1. 1Panel 建站反代:

    • 在 1Panel 的 网站 → 站点创建 git.example.com

    • 颁发 Let’s Encrypt 证书;

    • 反向代理到容器 http://127.0.0.1:3000

    • 开启 强制 HTTPS。

  2. app.ini 对齐 ROOT_URL:

    • 反代生效后,将 ROOT_URL 设置为 公开访问的 HTTPS 地址:

 [server]
 APP_DATA_PATH = /data/gitea
 DOMAIN = git.example.com
 HTTP_PORT = 3000
 ROOT_URL = https://git.example.com/
 LFS_START_SERVER = true
 OFFLINE_MODE = true

说明:DOMAIN 用于生成链接;ROOT_URL 决定 Web 端重定向与回调,必须与外部访问一致(协议/域名/路径)。

2.4 常见坑位排查

  • “关掉橙云后不是 HTTPS”:

    • 橙云(Cloudflare 代理)提供边缘 HTTPS;关掉后如果你本地没有配置证书/反代,自然退回 HTTP。

    • 解决:在 1Panel 上启用 Let’s Encrypt 证书 + 反代 3000。

  • ROOT_URL 与反代不一致:

    • 登录跳转异常、OAuth 回调失败,多半是 ROOT_URL 写错协议或域名。

  • 混合内容/子资源失败:

    • 浏览器报不安全,多半是某些链接还是 http://。统一改用 https://,必要时清缓存。

3 SSH 连接

3.1 Cloudflare DNS 记录

  • git.example.com → 橙云(Proxied):给 Web 反代用。

  • ssh.example.com → 灰云(DNS only):Cloudflare 不代理这个 2222 端口,灰云直连你的服务器。

3.2 Gitea SSH 配置与端口映射

app.ini 配置 SSH 专用域名与端口:

 [server]
 APP_DATA_PATH = /data/gitea
 DOMAIN = git.kixyu9527.com
 SSH_DOMAIN = ssh.kixyu9527.com
 HTTP_PORT = 3000
 ROOT_URL = https://git.kixyu9527.com/
 DISABLE_SSH = false
 SSH_PORT = 2222
 SSH_LISTEN_PORT = 22
 LFS_START_SERVER = true
 LFS_JWT_SECRET = 默认
 OFFLINE_MODE = true
  • 端口映射:Gitea默认会做,修改配置文件后重启即可。

  • 防火墙:放行 2222/TCP

3.3 客户端测试

  1. 上传公钥到 Gitea 个人设置 → SSH Keys。

  2. 终端测试:

 ssh -T -p 2222 [email protected]

出现类似 Hi <username>! You’ve successfully authenticated... 即成功。

  1. Git 远程地址示例:

 git remote add origin ssh://[email protected]:2222/<owner>/<repo>.git

若出现 Permission denied (publickey,password)

  • 检查 本机私钥权限 与 公钥是否已添加;

  • 确认连接的确是 ssh.kixyu9527.com:2222(别误连到 git. 域名的 443/80);

  • 服务器防火墙、端口映射是否生效;

  • DISABLE_SSH=falseSSH_LISTEN_PORT=22

附:示例 app.ini 片段

以下为文中出现的两段关键配置,集中列出便于复制:

关闭注册

 [service]
 DISABLE_REGISTRATION = true
 REQUIRE_SIGNIN_VIEW = false
 REGISTER_EMAIL_CONFIRM = false
 ENABLE_NOTIFY_MAIL = false
 ALLOW_ONLY_EXTERNAL_REGISTRATION = false
 ENABLE_CAPTCHA = false
 DEFAULT_KEEP_EMAIL_PRIVATE = true
 DEFAULT_ALLOW_CREATE_ORGANIZATION = true
 DEFAULT_ENABLE_TIMETRACKING = true
 NO_REPLY_ADDRESS = noreply.localhost

Server/SSH

 [server]
 APP_DATA_PATH = /data/gitea
 DOMAIN = git.kixyu9527.com
 SSH_DOMAIN = ssh.kixyu9527.com
 HTTP_PORT = 3000
 ROOT_URL = https://git.kixyu9527.com/
 DISABLE_SSH = false
 SSH_PORT = 2222
 SSH_LISTEN_PORT = 22
 LFS_START_SERVER = true
 LFS_JWT_SECRET = 默认
 OFFLINE_MODE = true