--- title: Gitea 完整配置指南(SSH + frp + Caddy) author: shenwei created: 2026-06-04 description: 涵盖 Gitea SSH 配置、frp 转发、Caddy 反代、以及客户端配置的完整指南 tags: [git, gitea, ssh, frp, caddy, docker] --- #git #gitea #ssh #frp #caddy #docker # Gitea 完整配置指南(SSH + frp + Caddy) 这是一份综合指南,涵盖 Gitea 的完整配置,包括 SSH 设置、通过 frp 和 Caddy 进行远程访问、以及 Git 客户端配置。 ## 目录 1. [第一部分:Gitea 部署与基础 SSH 配置](#第一部分gitea-部署与基础-ssh-配置) 2. [第二部分:远程访问架构(frp + Caddy)](#第二部分远程访问架构frp--caddy) 3. [第三部分:客户端配置](#第三部分客户端配置) 4. [第四部分:故障排除](#第四部分故障排除) 5. [第五部分:最佳实践](#第五部分最佳实践) --- # 第一部分:Gitea 部署与基础 SSH 配置 ## 1. Docker 部署(推荐标准配置) ### 基础 Docker Compose 配置 ```yaml version: "3" services: gitea: image: gitea/gitea:latest container_name: gitea restart: always ports: - "3000:3000" # Web UI HTTP - "2222:22" # SSH(宿主机 2222 -> 容器内 22) volumes: - ./gitea:/data environment: - ROOT_URL=http://localhost:3000 ``` **为什么用 2222?** - 宿主机的 22 端口通常已被系统 SSH 占用 - 使用 `2222 → 22` 映射避免冲突 - 容器内 Gitea SSH 服务依然运行在 22,外部通过 2222 访问 --- ## 2. Gitea SSH 服务启用 ### 检查配置 进入容器检查配置: ```bash docker exec -it gitea /bin/sh cat /data/gitea/conf/app.ini ``` 确保 `[server]` 部分包含: ```ini [server] START_SSH_SERVER = true SSH_PORT = 22 ``` - `START_SSH_SERVER = true`:启用 SSH 服务 - `SSH_PORT = 22`:容器内监听 22 端口(通过 Docker 映射到外部端口) ### 重启服务 ```bash docker compose down docker compose up -d ``` --- ## 3. 基础 SSH 连接测试 ### 测试 SSH 连通性(本地网络) ```bash # 使用指定端口连接 ssh -T git@192.168.3.17 -p 2222 ``` **预期输出(成功):** ``` Hi username! You've successfully authenticated with the key named ... Gitea does not provide shell access. ``` ### 常见错误与修复 #### ❌ Connection refused ``` ssh: connect to host ... port 2222: Connection refused ``` **原因:** Docker 未正确映射端口 **修复:** 检查 docker-compose.yml 中是否有 `- "2222:22"` #### ❌ Connection closed ``` Connection closed by 192.168.3.17 port 2222 ``` **原因:** SSH 服务存在但不是 Gitea 在处理,或 Gitea SSH 未启用 **修复:** 1. 检查 `app.ini` 中 `START_SSH_SERVER = true` 2. 重启 Docker 容器 #### ❌ Permission denied (publickey) ``` Permission denied (publickey) ``` **原因:** SSH key 未在 Gitea 中添加或未加载 **修复:** ```bash # 确保公钥已添加到 Gitea # 在 Gitea Web UI → Settings → SSH Keys 中验证 # 或重新加载 SSH Agent ssh-add ~/.ssh/id_ed25519 ``` --- # 第二部分:远程访问架构(frp + Caddy) ## 1. 整体架构 ### 实际部署拓扑 ``` ┌──────────────────────────────────────────────────────────────────┐ │ Gitea 远程访问架构 │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ │ │ │ Browser │──HTTPS──┐ │ │ └─────────┘ │ │ │ ▼ │ │ ┌──────────┐ ┌──────────┐ │ │ │ Caddy │───▶│ frps │ VPS1 │ │ │ :80/:443 │ │ :7000 │ 192.227.222.142 │ │ └──────────┘ │ :13001 │ │ │ │ :12222 │ │ │ └────┬─────┘ │ │ │ frp 隧道 │ │ ┌─────────────┐ │ │ │ │ Git Client │──TCP :12222─────────┤ │ │ └─────────────┘ │ │ │ ▼ │ │ ┌──────────┐ │ │ │ frpc │ NAS │ │ │ Gitea │ 192.168.x.x │ │ │ :3000 │ (Web) │ │ │ :2222 │ (SSH) │ │ └──────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘ ``` ### 端口分配 | 端点 | 端口 | 说明 | |------|------|------| | VPS1 :7000 | frps 控制 | frpc 与 frps 通信 | | VPS1 :13001 | Gitea HTTP | Caddy 反代目标(不直接对外) | | VPS1 :12222 | Gitea SSH | Git 客户端直连 | | VPS1 :443 | Caddy HTTPS | gitea.ishenwei.online 入口 | | NAS :3000 | Gitea Web | Docker 容器映射端口 | | NAS :2222 | Gitea SSH | Docker `2222:22` 映射 | ### 核心原则 1. **HTTP 走 Caddy**:浏览器通过 Caddy 反代访问 Gitea Web UI(自动 HTTPS) 2. **SSH 直接转发**:SSH 流量不经过 Caddy(Caddy 是 HTTP 代理,无法处理 SSH TCP 流量) 3. **防火墙放行**:VPS1 必须放行 7000、13001、12222 三个端口 4. **13001 不要直接对外**:仅供 Caddy 本机反代用,可用 iptables 限制为 localhost 访问 --- ## 2. frpc 配置(NAS 端) ### 部署位置 - **路径**:`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml` - **运行方式**:systemd(详见第五部分管理命令) ### frpc.toml 配置(Gitea 相关部分) ```toml # ===== 服务器连接 ===== serverAddr = "192.227.222.142" # VPS1 serverPort = 7000 auth.method = "token" auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs" # ===== 日志 ===== log.level = "info" log.maxDays = 3 # ===== 管理界面(可选)===== webServer.addr = "127.0.0.1" webServer.port = 7400 webServer.user = "admin" webServer.password = "admin" # ===== Gitea Web(给 Caddy 反代用)===== [[proxies]] name = "gitea-web" type = "tcp" localIP = "127.0.0.1" localPort = 3000 remotePort = 13001 # ===== Gitea SSH(直接暴露给 Git 客户端)===== [[proxies]] name = "gitea-ssh" type = "tcp" localIP = "127.0.0.1" localPort = 2222 remotePort = 12222 ``` **配置说明:** - `remotePort = 13001`:Caddy 在 VPS1 上反代此端口 - `remotePort = 12222`:Git 客户端通过 `gitea.ishenwei.online:12222` 连接 --- ## 3. frps 配置(VPS1 端) ### 基本信息 | 配置项 | 值 | |--------|-----| | 服务器 IP | 192.227.222.142 | | 部署路径 | `/opt/frp/frp_0.65.0_linux_amd64/` | | 配置文件 | `frps.toml` | | 运行方式 | systemd | | 管理界面 | http://127.0.0.1:7500 (admin/admin) | ### frps.toml 配置 ```toml # ===== 监听配置 ===== bindAddr = "0.0.0.0" bindPort = 7000 # ===== 认证(必须与所有 frpc 一致)===== auth.method = "token" auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs" # ===== 日志 ===== log.to = "/var/log/frps.log" log.level = "info" log.maxDays = 7 # ===== 管理 Dashboard ===== webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin" # ===== 安全限制(可选但推荐)===== # 限制 frpc 可以使用的端口范围 allowPorts = [ { start = 10000, end = 65535 } ] # 单个客户端最大代理数 maxPoolCount = 50 # 心跳超时(秒) transport.heartbeatTimeout = 90 ``` ### frps systemd 服务 创建 `/etc/systemd/system/frps.service`: ```ini [Unit] Description=frp server After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/frp/frp_0.65.0_linux_amd64/frps -c /opt/frp/frp_0.65.0_linux_amd64/frps.toml Restart=on-failure RestartSec=10 LimitNOFILE=1048576 [Install] WantedBy=multi-user.target ``` 启用并启动: ```bash systemctl daemon-reload systemctl enable frps systemctl start frps systemctl status frps # 查看日志 journalctl -u frps -f tail -f /var/log/frps.log ``` ### VPS1 防火墙配置 ```bash # UFW(推荐) ufw allow 7000/tcp # frp 控制通道 ufw allow 12222/tcp # Gitea SSH(对外) ufw allow 80/tcp # Caddy HTTP(自动跳转 HTTPS) ufw allow 443/tcp # Caddy HTTPS # 13001 仅本机访问,无需对外放行 # 如果需要明确禁止,可以: ufw deny 13001/tcp # 验证规则 ufw status numbered ``` **重要:** 如果 VPS 提供商有云控制台安全组(如 AWS Security Group、阿里云安全组),**必须同时放行**,缺一不可。 --- ## 4. Caddy 反代配置(VPS1 端) Caddy 部署在与 frps 相同的 VPS1 上,自动申请并续期 Let's Encrypt 证书。 ### 安装 Caddy(Debian/Ubuntu) ```bash sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \ | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \ | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy ``` Caddy 安装后自动注册为 systemd 服务,配置文件位于 `/etc/caddy/Caddyfile`。 ### Caddyfile 配置 编辑 `/etc/caddy/Caddyfile`: ```caddy # ============================================ # Gitea Web UI # ============================================ gitea.ishenwei.online { # 反代到本机 frps 监听的 Gitea HTTP 端口 reverse_proxy 127.0.0.1:13001 { # 传递真实客户端 IP 给 Gitea header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} } # 日志(可选) log { output file /var/log/caddy/gitea.log { roll_size 50mb roll_keep 5 } format json } # 大文件支持(Git push/LFS 必需) request_body { max_size 5GB } } # ============================================ # 其他服务示例(同样模式) # ============================================ # n8n.ishenwei.online { # reverse_proxy 127.0.0.1:15679 # } # # vaultwarden.ishenwei.online { # reverse_proxy 127.0.0.1:15151 # } ``` ### 关键要点 - **反代目标是 `127.0.0.1:13001`**:frps 把 NAS 上 Gitea 的 :3000 转发到 VPS1 的 :13001 - **不要将 SSH 端口(12222)配进 Caddy**:Caddy 是 HTTP/HTTPS 反向代理,无法承载 SSH TCP 协议 - **自动 HTTPS**:Caddy 会自动通过 Let's Encrypt 申请证书并自动续期(前提是域名 A 记录已正确指向 VPS1,且 80/443 端口已放行) - **大文件支持**:`request_body max_size` 必须设置足够大,否则 `git push` 大仓库会失败 ### DNS 配置 在你的 DNS 服务商(Cloudflare/阿里云等)添加 A 记录: ``` gitea.ishenwei.online A 192.227.222.142 ``` 如果使用 Cloudflare,**必须关闭代理(小灰云)** 用 DNS only 模式,否则 Caddy 申请证书会失败,且 SSH 不工作。 ### Caddy 管理命令 ```bash # 验证 Caddyfile 语法 caddy validate --config /etc/caddy/Caddyfile # 优雅重载(修改配置后用这个,不会断连) sudo systemctl reload caddy # 查看状态 sudo systemctl status caddy # 查看日志 sudo journalctl -u caddy -f tail -f /var/log/caddy/gitea.log ``` ### 验证 HTTPS ```bash # 测试证书 curl -I https://gitea.ishenwei.online # 预期返回: # HTTP/2 200 # server: Caddy # ... ``` --- ## 5. Gitea app.ini 配置 ### SSH 相关配置 编辑 `/data/gitea/conf/app.ini`: ```ini [server] ROOT_URL = https://gitea.ishenwei.online/ SSH_DOMAIN = gitea.ishenwei.online SSH_PORT = 12222 START_SSH_SERVER = true ``` **配置说明:** - `SSH_DOMAIN = gitea.ishenwei.online`:Web 界面显示的 SSH 地址 - `SSH_PORT = 12222`:对外暴露的 SSH 端口(影响 Web 上显示的 Clone 地址) - `ROOT_URL`:Web UI 根路径,通常指向域名 ### 重启应用 ```bash docker compose down docker compose up -d ``` --- # 第三部分:客户端配置 ## 1. SSH Key 生成 ### 生成密钥对 ```bash ssh-keygen -t ed25519 -C "your-email@example.com" ``` **为什么用 ed25519?** - 更安全、密钥更短 - 现代标准推荐 **默认路径:** ``` ~/.ssh/id_ed25519 # 私钥 ~/.ssh/id_ed25519.pub # 公钥 ``` ### 启动 SSH Agent ```bash # Linux/macOS eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # Windows (PowerShell) # 通常自动运行,无需手动启动 ssh-add $env:USERPROFILE\.ssh\id_ed25519 ``` --- ## 2. 添加公钥到 Gitea ### 在 Gitea Web UI 中添加 1. 登录 Gitea Web UI 2. 点击右上角头像 → Settings 3. 选择 SSH Keys 4. 点击 Add Key ### 复制公钥内容 ```bash cat ~/.ssh/id_ed25519.pub ``` 将输出内容完整复制到 Gitea,包括前缀 `ssh-ed25519 AAA...` --- ## 3. SSH Config 配置(推荐) ### 简化 SSH 连接 编辑 `~/.ssh/config`: ```bash # 本地网络 - Gitea(Docker) Host gitea-local HostName 192.168.3.17 User git Port 2222 IdentityFile ~/.ssh/id_ed25519 # 远程 - Gitea(通过 frp) Host gitea.ishenwei.online HostName gitea.ishenwei.online User git Port 12222 IdentityFile ~/.ssh/id_ed25519 ``` ### 使用简化命令 配置后,可以用更简洁的命令: ```bash # 本地网络 ssh -T gitea-local # 远程(通过 frp) ssh -T gitea.yourdomain.com ``` --- ## 4. Git 仓库配置 ### 方式一:Clone 时使用 SSH ```bash # 本地 git clone ssh://git@192.168.3.17:2222/username/repo.git # 远程(通过 frp) git clone ssh://git@gitea.ishenwei.online:12222/username/repo.git # 使用 SSH Config 别名 git clone ssh://gitea-local/username/repo.git git clone ssh://gitea.ishenwei.online/username/repo.git ``` ### 方式二:修改已有仓库的 Remote URL ```bash # 查看当前 remote git remote -v # 修改为 SSH git remote set-url origin ssh://git@192.168.3.17:2222/username/repo.git # 远程版本 git remote set-url origin ssh://git@gitea.ishenwei.online:12222/username/repo.git # 验证修改 git remote -v ``` ### 验证连接 ```bash git pull ``` --- ## 5. VS Code / IDE 集成 在配置好 SSH 和 Git Remote 后: - **VS Code**:无需额外配置,自动使用 Git + SSH - **JetBrains IDE**:自动识别 SSH Config - **其他 IDE**:通常也会自动识别系统 SSH 配置 **优势:** - 无需输入密码 - 不受代理干扰 - Clone / Pull 不会卡住 --- # 第四部分:故障排除 ## 1. SSH 连接测试 ### 测试不同场景 ```bash # 本地网络测试 ssh -vT git@192.168.3.17 -p 2222 # 远程(通过 frp)测试 ssh -vT git@gitea.ishenwei.online -p 12222 # 使用 SSH Config 别名测试 ssh -vT gitea-local ssh -vT gitea.ishenwei.online ``` ### 详细调试信息 ```bash # -v 显示调试信息 # -vv 显示更详细信息 # -vvv 显示最详细信息 ssh -vvv git@gitea.ishenwei.online -p 12222 ``` --- ## 2. 常见问题 ### 问题:Permission denied (publickey) **可能原因:** 1. SSH key 未加载 2. 公钥未在 Gitea 中添加 3. 使用了错误的用户名(应该是 `git`,不是账户名) **检修步骤:** ```bash # 1. 查看已加载的 key ssh-add -l # 2. 如果列表为空,重新加载 ssh-add ~/.ssh/id_ed25519 # 3. 验证 Gitea Web UI 中是否已添加该公钥 # 4. 确认使用 git 用户 ssh -vT git@gitea.ishenwei.online -p 12222 ``` ### 问题:Connection refused **可能原因:** 1. Gitea 未运行 2. SSH 端口未正确映射 3. 防火墙未放行端口 **检修步骤:** ```bash # 1. 检查 Docker 容器状态 docker ps | grep gitea # 2. 检查端口映射 docker port gitea # 3. 检查防火墙(本地) ss -tlnp | grep 2222 # 4. 检查防火墙(远程 VPS) ufw status ``` ### 问题:Connection closed by remote **可能原因:** 1. SSH 服务异常关闭 2. 连接超时 3. 网络问题 **检修步骤:** ```bash # 1. 重启 Gitea 容器 docker restart gitea # 2. 检查容器日志 docker logs -f gitea # 3. 测试基本连通性 ping gitea.ishenwei.online ``` ### 问题:Bad owner or permissions on ~/.ssh/config **原因:** SSH config 文件权限不正确 **修复:** ```bash chmod 600 ~/.ssh/config chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub ``` --- ## 3. 防火墙排查 ### 本地网络(NAS/局域网) ```bash # Windows - 测试端口连通性 Test-NetConnection -ComputerName 192.168.3.17 -Port 2222 # macOS/Linux - 测试端口连通性 nc -zv 192.168.3.17 2222 # 或使用 telnet telnet 192.168.3.17 2222 ``` ### 远程 VPS ```bash # 测试 frp 通信端口 telnet your-vps.com 7000 # 测试 Gitea HTTP 端口(给 Caddy) telnet your-vps.com 13000 # 测试 Gitea SSH 端口 telnet your-vps.com 12222 ``` ### 群晖 NAS 防火墙 NAS 无 UFW,防火墙配置在: - DSM → 控制面板 → 安全性 → 防火墙 - 需手动添加规则放行 frp 和 SSH 端口 --- ## 4. frp 故障排除 ### 检查 frp 日志 ```bash # 查看 frpc 日志 journalctl -u frpc -f # 或直接运行 frpc 查看输出 ./frpc -c frpc.toml ``` ### 验证 frps 连接 ```bash # 在 VPS 上检查已连接的隧道 netstat -tlnp | grep 13000 netstat -tlnp | grep 12222 # 或使用 frp 的状态查询(如果启用了 admin 功能) curl http://localhost:7400/api/serverinfo ``` --- # 第五部分:最佳实践 ## 1. 安全建议 ### SSH Key 管理 - ✅ 使用 ed25519 算法 - ✅ 为私钥设置强密码 - ✅ 定期轮换密钥 - ✅ 不同用途使用不同密钥(添加 `-C "标签"` 区分) ### 防火墙配置 - ✅ 只放行必要的端口 - ✅ 使用 VPN 或跳板机访问敏感服务 - ✅ 监控 SSH 连接日志 - ✅ 禁用密码认证,仅允许密钥认证 ### Gitea 配置 - ✅ 设置强密码 - ✅ 启用 2FA(双因素认证) - ✅ 定期备份仓库 - ✅ 监控访问日志 --- ## 2. 性能优化 ### SSH 连接复用 编辑 `~/.ssh/config` 添加连接复用: ```bash Host * ControlMaster auto ControlPath ~/.ssh/control-%C ControlPersist 600 ServerAliveInterval 60 ServerAliveCountMax 3 ``` ### Git 相关优化 ```bash # 配置 SSH 超时 git config --global core.sshCommand "ssh -o ConnectTimeout=10" # 配置代理(如需要) git config --global https.proxy [proxy-url] ``` --- ## 3. 多环境管理 ### SSH Config 示例 ```bash # 本地 Gitea Host gitea-local HostName 192.168.3.17 User git Port 2222 IdentityFile ~/.ssh/id_ed25519_gitea # 远程 Gitea(通过 frp) Host gitea-remote HostName gitea.ishenwei.online User git Port 12222 IdentityFile ~/.ssh/id_ed25519_gitea # GitHub Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github # GitLab Host gitlab.com HostName gitlab.com User git IdentityFile ~/.ssh/id_ed25519_gitlab ``` ### Git 配置管理 ```bash # 查看当前配置 git config --list # 全局配置 git config --global user.name "Your Name" git config --global user.email "your-email@example.com" # 项目级配置(在仓库目录中) git config --local user.email "project-specific@example.com" ``` --- ## 4. 监控与维护 ### 定期检查 ```bash # 检查 SSH key 过期情况 ssh-keygen -l -f ~/.ssh/id_ed25519.pub # 查看 Gitea 日志 docker logs -f gitea # 查看 frp 连接状态 journalctl -u frpc -f ``` ### 日志轮转 确保日志不会占满磁盘: ```bash # Docker 日志轮转配置(docker-compose.yml) services: gitea: logging: driver: "json-file" options: max-size: "100m" max-file: "3" ``` --- # 总结 ## 快速检查清单 部署完成后,按以下顺序验证: **NAS 端(Gitea + frpc):** - [ ] Docker 容器运行:`docker ps | grep gitea` - [ ] SSH 服务启用:`docker exec gitea cat /data/gitea/conf/app.ini | grep SSH` - [ ] 本地 SSH 测试:`ssh -T git@ -p 2222` - [ ] frpc 服务运行:`systemctl status frpc` - [ ] frpc 日志正常:`journalctl -u frpc -f` 显示 `[gitea-web] start proxy success` 和 `[gitea-ssh] start proxy success` **VPS1 端(frps + Caddy):** - [ ] frps 服务运行:`systemctl status frps` - [ ] frps Dashboard 可访问:`http://192.227.222.142:7500` (admin/admin) - [ ] 端口监听:`ss -tlnp | grep -E '7000|12222|13001'` - [ ] 防火墙放行:`ufw status` 包含 7000/12222/80/443 - [ ] Caddy 运行:`systemctl status caddy` - [ ] DNS 解析正确:`dig gitea.ishenwei.online +short` → `192.227.222.142` **客户端:** - [ ] 公钥已添加:Gitea Web UI → Settings → SSH Keys - [ ] HTTPS 访问:浏览器打开 `https://gitea.ishenwei.online`(绿锁) - [ ] SSH 连接:`ssh -T git@gitea.ishenwei.online -p 12222` 返回 `Hi !` - [ ] Git Clone:`git clone ssh://git@gitea.ishenwei.online:12222//.git` --- ## 完整端到端部署流程速查 ``` ┌─────────────────────────────────────────────────────────────┐ │ 1. NAS: 启动 Gitea Docker (端口 3000, 2222:22) │ │ 2. NAS: 配置 app.ini (SSH_DOMAIN, SSH_PORT=12222) │ │ 3. NAS: 部署 frpc.toml (gitea-web:13001, gitea-ssh:12222) │ │ 4. NAS: systemctl restart frpc │ │ ↓ │ │ 5. VPS1: 部署 frps.toml + frps.service │ │ 6. VPS1: ufw allow 7000/12222/80/443 │ │ 7. VPS1: systemctl enable --now frps │ │ 8. VPS1: 编辑 /etc/caddy/Caddyfile (gitea.ishenwei.online) │ │ 9. VPS1: systemctl reload caddy │ │ ↓ │ │ 10. DNS: 添加 A 记录 gitea → 192.227.222.142 │ │ ↓ │ │ 11. 客户端: 生成 SSH key + 上传公钥到 Gitea │ │ 12. 客户端: 配置 ~/.ssh/config │ │ 13. 客户端: git clone ssh://git@gitea.ishenwei.online:12222 │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 一句话结论 **Git 的本质:** - `user.name` / `email` → 标识身份 - SSH Key → 认证身份 **推荐方案:** > Gitea + Docker + SSH + frp + Caddy = 稳定可靠的远程 Git 服务 --- **记录时间:** 2026-06-04 **最后更新:** 2026-06-04