9.5 KiB
9.5 KiB
光湖灯塔 · 国内主服务器部署模板 (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) |
⚠️ 系统盘只有 50G,Gitea 仓库数据 / 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 SSH(git 协议) | 0.0.0.0 |
⚠️ 安全组未开,需要时再开 |
| 3000 | Gitea HTTP | 127.0.0.1(内部)+ 0.0.0.0(安全组开了,备案前先用) |
✅ |
| 3100 | 灯塔总控台 API(PM2 进程 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 手动触发,冰朔在仓库点一下按钮就能跑:
- 打开
Actions→lighthouse-cn-deployworkflow - 点
Run workflow - 选参数:
server_target:main(主服务器)/backup(备用机,未购则跳过)stage:bootstrap(首次)/update(同步代码)/rollback(回滚 compose)
- 点击 Run workflow 启动
执行流程:
- checkout 当前仓库
- 写入 SSH 私钥(来自
ZY_LIGHTHOUSE_KEY) rsync把server/setup/lighthouse-cn/推到/opt/guanghu/lighthouse-cn/- SSH 远程执行
bash /opt/guanghu/lighthouse-cn/bootstrap.sh STAGE=$stage - 拉回
/opt/guanghu/_logs/lighthouse-bootstrap-*.json作为 artifact
六、首次 bootstrap 后的人工步骤
bootstrap.sh 自动化做完前 8 步后,有 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
- 浏览器打开
- 在 GitHub Actions 重跑 workflow,选
stage=update- 这次会带着 token 启
gitea-runner容器(docker compose --profile runner up -d)
- 这次会带着 token 启
七、故障排查(霜砚常用)
7.1 Docker / Compose
| 现象 | 原因 | 处置 |
|---|---|---|
docker compose pull 卡住 |
docker hub 国内被墙 | 检查 /etc/docker/daemon.json 的 registry-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/gitea(Gitea 容器 USER_UID=1000) |
7.2 Gitea
| 现象 | 处置 |
|---|---|
| Web UI 502 | docker logs lighthouse-gitea --tail 100;DB 没起来: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 是否放行 3000;ufw 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.js与restore-from-cos.sh - 工作流转换:见
scripts/migration/convert-workflows.js - 搬家进度看板:仓库根
DASHBOARD.md→ "光湖搬家进度" 段