光湖灯塔 · 国内主服务器部署模板 (lighthouse-cn)

📜 Sovereign: TCS-0002∞ · ICE-GL∞ 冰朔 · 国作登字-2026-A-00037559 守护: 铸渊 · ICE-GL-ZY001 模板版本: v0.1.0

这一份文档是给霜砚和冰朔看的部署日志——铸渊在国内灯塔服务器上做了什么、装在哪、占了哪个端口、日志在哪、出错怎么修,全部写清楚。


一、服务器现状(来自冰朔同步)

项目 信息
实例 ins-dacj5t5a · GH-CVM-MAIN-PROD-01
规格 蜂驰型 BF1.LARGE16 · 4C16G
系统 Ubuntu 22.04 LTS · 内核 5.15.0-177-generic
公网 IP 43.139.251.175 · 5Mbps
内网 IP 172.16.0.12
地域 广州六区
系统盘 50G SSD/
数据盘 disk-crtigr8 · GH-CVM-DATA-01 · 100GB ext4 已挂载 /data · fstab 自动挂载
安全组 sg-6lewq1ur · 已开 22/80/443/3000/ICMP其余拒绝
默认登录用户 ubuntu(需 sudo -i 切 root 后再跑 bootstrap

⚠️ 系统盘只有 50GGitea 仓库数据 / Docker 镜像 / Runner 缓存全部走 /data。bootstrap.sh 已强制把这些目录都挂到 /data 下。


二、bootstrap 后服务器目录结构

/data/                          # 数据盘 (100G, 持久数据全在这)
├── lighthouse/
│   ├── docker-compose.yml      # Gitea + Postgres + Redis + Runner 编排
│   ├── .env                    # 编排环境变量 (含 GITEA_DB_PASS)
│   ├── gitea/                  # Gitea 数据目录 (repo / lfs / avatars / log)
│   │   └── conf/app.ini        # Gitea 配置 (从 app.ini.template 渲染)
│   ├── postgres/               # PostgreSQL 数据目录
│   ├── redis/                  # Redis 持久化目录
│   ├── runner/                 # Gitea Actions Runner 缓存
│   └── backup/                 # 定时备份输出
├── docker/                     # Docker 镜像/容器存储 (daemon.json 指向)
├── cos-cache/                  # COS 拉取的搬家包临时缓存
├── pm2/                        # PM2 守护进程目录 (PM2_HOME)
└── logs/
    ├── gitea/
    ├── nginx/
    └── runner/

/opt/guanghu/                   # 系统盘 (代码 / 进程, 走标准插座)
├── _active/                    # 当前活跃通道
├── _archive/                   # 归档通道
├── _logs/                      # 部署回执日志 (lighthouse-bootstrap-*.json)
├── _manifest/                  # function-manifest.json
├── _secrets/                   # chmod 700, 仅 root 可读
└── lighthouse-cn/              # 本模板的当前副本 (update 阶段同步)

/etc/nginx/sites-available/lighthouse.conf   # Nginx 反代配置
/etc/docker/daemon.json                      # Docker daemon 镜像加速 + data-root
/etc/apt/sources.list                        # 阿里云 APT 镜像
/etc/apt/sources.list.d/docker.list          # 阿里云 Docker 镜像源

三、端口分配

端口 用途 监听地址 是否对公网
22 系统 SSH 0.0.0.0
80 Nginx HTTP 0.0.0.0
443 Nginx HTTPS备案后启用 0.0.0.0
2222 Gitea SSHgit 协议) 0.0.0.0 ⚠️ 安全组未开,需要时再开
3000 Gitea HTTP 127.0.0.1(内部)+ 0.0.0.0(安全组开了,备案前先用)
3100 灯塔总控台 APIPM2 进程 lighthouse-console 127.0.0.1 (仅 Nginx 反代访问)
39000 channel-switcher标准插座沿用 127.0.0.1

四、装了什么软件

软件 版本 来源 备注
APT 源 ubuntu jammy mirrors.aliyun.com get.docker.com 国内被墙,必须走阿里云
Docker CE latest stable mirrors.aliyun.com/docker-ce daemon.json 指向 /data/docker
Compose plugin v2 docker-compose-plugin apt 包 不从 GitHub release 拉
Node.js 20.x NodeSource → fallback nvm国内镜像 npm config set registry https://registry.npmmirror.com
PM2 latest npmmirror PM2_HOME=/data/pm2
Nginx apt 默认 jammy 仓库 反代见 nginx/lighthouse.conf
Gitea 1.21.11 docker hub走腾讯云/USTC 镜像加速) Actions 已启用
PostgreSQL 15-alpine docker hub Gitea 后端 DB
Redis 7-alpine docker hub Gitea 缓存
act_runner 0.2.10 docker hub Gitea Actions 自托管 runner
certbot apt 默认 jammy 仓库 备案后用于 Let's Encrypt
fail2ban apt 默认 jammy 仓库 默认规则
ufw apt 默认 jammy 仓库 22/80/443/3000/2222 已放行

五、部署 / 更新 / 回滚(手动触发)

部署完全通过 GitHub Actions 手动触发,冰朔在仓库点一下按钮就能跑

  1. 打开 Actionslighthouse-cn-deploy workflow
  2. Run workflow
  3. 选参数:
    • server_target: main(主服务器)/ backup(备用机,未购则跳过)
    • stage: bootstrap(首次)/ update(同步代码)/ rollback(回滚 compose
  4. 点击 Run workflow 启动

执行流程:

  1. checkout 当前仓库
  2. 写入 SSH 私钥(来自 ZY_LIGHTHOUSE_KEY
  3. rsyncserver/setup/lighthouse-cn/ 推到 /opt/guanghu/lighthouse-cn/
  4. SSH 远程执行 bash /opt/guanghu/lighthouse-cn/bootstrap.sh STAGE=$stage
  5. 拉回 /opt/guanghu/_logs/lighthouse-bootstrap-*.json 作为 artifact

六、首次 bootstrap 后的人工步骤

bootstrap.sh 自动化做完前 8 步后,有 1 件事必须人工

  1. 拿 Gitea Actions Runner 注册 token
    • 浏览器打开 http://43.139.251.175:3000/
    • ZY_GITEA_ADMIN_USER / ZY_GITEA_ADMIN_PASS 登录
    • Site Administration → Actions → Runners → Create new Runner,复制 token
    • 把 token 配回 GitHub Secrets ZY_GITEA_RUNNER_TOKEN
  2. 在 GitHub Actions 重跑 workflowstage=update
    • 这次会带着 token 启 gitea-runner 容器(docker compose --profile runner up -d

七、故障排查(霜砚常用)

7.1 Docker / Compose

现象 原因 处置
docker compose pull 卡住 docker hub 国内被墙 检查 /etc/docker/daemon.jsonregistry-mirrors 是否生效;systemctl restart docker
pull access denied 镜像名错或镜像源未生效 `docker info
OOM killed 4C16G 资源紧张 docker stats 查内存,必要时 docker compose stop gitea-runner
容器起不来报"permission denied on /data/..." UID 不对 chown -R 1000:1000 /data/lighthouse/giteaGitea 容器 USER_UID=1000

7.2 Gitea

现象 处置
Web UI 502 docker logs lighthouse-gitea --tail 100DB 没起来:docker logs lighthouse-gitea-db
管理员密码忘了 docker exec -u git lighthouse-gitea gitea admin user change-password --username bingshuo --password 新密码
Runner 注册失败 401 token 过期/已用过;重新到 Site Admin → Runners 拿新 token
Push 大文件 OOM Gitea 容器加 LFS,并把 git config http.postBuffer 524288000

7.3 Nginx

现象 处置
nginx -t 报错 /etc/nginx/sites-enabled/lighthouse.conf,常见是 upstream 名拼错
502 后端没起:curl 127.0.0.1:3000/api/v1/version;总控台未启动是预期行为,会返回 503
访问慢 5Mbps 带宽限制;大文件请走 COS 直链

7.4 防火墙 / 安全组

现象 处置
外网访问不到 3000 腾讯云控制台安全组 sg-6lewq1ur 是否放行 3000ufw status 是否 allow
SSH 连不上 安全组 22 必须开;fail2ban-client status sshd 看是否被封 IP

7.5 数据盘

现象 处置
df -h /data 接近满 du -sh /data/* 找大目录;优先清 /data/cos-cache/
重启后 /data 不见了 mount /data 手动挂载;检查 /etc/fstab 是否丢行

八、备份

bootstrap.sh 当前未启用自动备份v0.1)。手动备份命令:

# Gitea repo + db 备份到 /data/lighthouse/backup/
docker exec -u git lighthouse-gitea gitea dump -c /data/gitea/conf/app.ini -t /tmp
docker cp lighthouse-gitea:/tmp/gitea-dump-*.zip /data/lighthouse/backup/
docker exec lighthouse-gitea-db pg_dump -U gitea gitea | gzip > /data/lighthouse/backup/db-$(date +%Y%m%d).sql.gz

后续 v0.2 会加 cron + COS 增量上传。


九、和 GitHub 仓库的对应关系

本目录文件 GitHub workflow / 脚本
bootstrap.sh .github/workflows/lighthouse-cn-deploy.yml SSH 执行
docker-compose.yml rsync 推到 /data/lighthouse/docker-compose.yml
gitea/app.ini.template bootstrap.sh sed 渲染到 /data/lighthouse/gitea/conf/app.ini
nginx/lighthouse.conf bootstrap.sh 拷到 /etc/nginx/sites-available/
gitea-secrets-template.yaml 灯塔起来后导入 Gitea Repo Settings → Secrets
migration-checklist.md 给霜砚的搬家清单

十、更多

  • 神笔马良工具合成器:见 mcp-servers/zhuyuan-pen/README.md
  • 搬家 COS 中转:见 scripts/migration/snapshot-to-cos.jsrestore-from-cos.sh
  • 工作流转换:见 scripts/migration/convert-workflows.js
  • 搬家进度看板:仓库根 DASHBOARD.md → "光湖搬家进度" 段