mcpField
L
landung

landung

github.com/dischen87其他09 次安装今天更新
代码仓库

关于 landung

这是一个将项目从 Albatros 迁移到自有服务器的技能,面向准备自行维护部署环境的项目负责人。它涵盖迁移评估、服务器配置、GitHub 部署、数据转移、域名切换和旧环境下线,并强调先验证新环境再迁出。

主要功能

  1. 01评估是否适合迁移
  2. 02制定项目、数据和秘密的迁移清单
  3. 03指导 Ubuntu 与 Docker 服务器配置
  4. 04将 Git 仓库和部署工作流迁至 GitHub
  5. 05迁移数据并切换域名
  6. 06验证新环境后再关闭旧服务

适用场景

  1. 01从托管平台迁移到自有服务器
  2. 02将部署流程改为 GitHub Actions
  3. 03迁移数据库、上传文件和环境变量
  4. 04切换域名并检查 HTTPS

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dischen87/albatros-skills --skill landung

安装后在 Claude Code 中输入/landung确认已加载。

详细介绍

登陆:搬进自己的房子

这个比喻

在 Albatros,你住在有管理员的公寓里:他会关上大门、更换门锁,还会每晚给公寓拍照。住进自己的房子后,这些事就由你自己来做。

这次搬家不是从头新建。你的项目已经装进了随处都能安放的箱子:日志簿(Git)、施工说明(Dockerfile、compose.yaml)和流水线(工作流)。你把剩下的东西也装上,搬过去,再变更地址。只有港口属于 Albatros 的房子:你的日志簿需要换一个新港口,例如 GitHub。

**如何使用这个比喻:**在你的第一条回复中,先告诉对方这个比喻,再提问或展示命令,即使对方一上来就要解决方案,也要这样做。

说话方式

  • **不只提问:**如果缺少项目或某项信息,仍要给出具体步骤,或先写出带有标记假设的文件草稿([假设:…])。在最后再询问缺少的内容。
  • 使用“你”的称呼方式。坦诚说明所需投入:自建服务器通常能省钱,但需要花时间维护。
  • 服务器由对方自行向服务商租用并付费。
  • 只有确认新家已正常运行后,才关闭旧家。

流程

1. 搬家划算吗?

按照技能 kosten,与对方简要讨论:项目是否需要 Albatros 无法提供的功能?对方是否想把一切掌握在自己手中?每个月是否有一两个小时用于维护?如果没有,留下来也是不错的选择。

使用 Light 时,搬家很简单:文件夹 seite/ 可以在任何静态网站托管服务商处运行。把日志簿迁移到 GitHub(第 4 步,第 1 和第 2 项),然后在那里启用网站,例如使用 GitHub Pages。无需迁移服务器、流水线和域名,但仍需保留搬家清单。

2. 搬家清单

在项目中创建 docs/landung.md:

# Umzug auf eigenen Server

## Kisten
- [ ] Logbuch: alles gepusht (`git status` sauber)
- [ ] Logbuch im neuen Hafen (z. B. GitHub), alle Einträge dort angekommen
- [ ] Geheimnisse: Liste der Namen aus `.env.example` (Werte nie hier!)
- [ ] Daten: Datenbank, hochgeladene Dateien (Ordner: …)
- [ ] Einstellungen: Domains, E-Mail-Einträge im DNS (nicht anfassen), Cronjobs
- [ ] Domain über Albatros gekauft? Dann mit dem Auth-Code (`domain_mitnehmen`) zu einem neuen Registrar

## Was ich selbst übernehme
- [ ] Updates (automatisch, nur Sicherheitsupdates)
- [ ] Sicherungen (nächtlich, ausser Haus, verschlüsselt, Probe jeden Monat)
- [ ] Überwachung (Seite antwortet? Platte voll?)

## Ablauf und Datum
…
3. 新家
  1. 租用服务器,使用 Ubuntu 24.04,内存至少与当前相同。下单时,提交对方的公钥。
  2. 使用可以安全重复运行的脚本进行设置(以 root 身份运行;先阅读,再执行):
    • 更新系统,从官方来源安装 Docker
    • 创建用户 deploy,配置你的密钥,并创建文件夹 ~/projekt
    • SSH 仅允许使用密钥登录:在 /etc/ssh/sshd_config.d/10-haerten.conf 中设置 PasswordAuthentication no,并提前使用 sshd -t 检查
    • 防火墙:先执行 ufw allow 22/tcp、80/tcp、443,然后再执行 ufw enable(否则你会把自己锁在外面)。保留一个已打开的 SSH 会话以备救援。
    • 安装 fail2ban,启用自动安全更新(unattended-upgrades)
    • 为日志设置限制,避免磁盘空间耗尽
  3. 在网站前配置 Caddy 作为门卫:地址指向服务器后,它会自动获取 HTTPS 证书。将它作为独立服务加入 compose.yaml,网站本身之后只绑定到 127.0.0.1。Caddyfile 出错会让一切停摆:每次重新加载前都要执行 caddy validate,然后从外部检查。
4. 带走日志和流水线

在 Albatros 上,流水线的工人住在房子里。在自己的房子里,由 GitHub 的工人接手:它不会亲自构建,而是用自己的钥匙敲响新服务器的门,让服务器交付。

  1. 新港口: 由用户自行在 github.com 上创建账户。然后安装 gh(Mac:brew install gh),并运行 gh auth login,登录会在浏览器中进行。
  2. 迁移日志:
    git remote rename origin albatros
    gh repo create <projektname> --private --source . --remote origin --push
    
    搬走之前,旧港口仍可通过 albatros 访问。
  3. 新服务器的读取密钥: 它会自行获取日志,只读访问。它的房屋钥匙留在服务器上,发给 GitHub 的只有锁:
    ssh deploy@<neue-adresse> 'ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C eigener-server'
    ssh deploy@<neue-adresse> 'cat ~/.ssh/id_ed25519.pub' > server-schloss.pub
    gh repo deploy-key add server-schloss.pub --title "eigener-server"   # nur lesen, das ist der Standard
    rm server-schloss.pub
    ssh deploy@<neue-adresse> 'ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts && git clone [email protected]:<benutzer>/<projektname>.git ~/projekt'
    
    将 github.com 的指纹与 docs.github.com 上的指纹进行比较。
  4. 流水线专用密钥,绝不使用用户的房屋钥匙。这样可以单独禁用它:
    ssh-keygen -t ed25519 -f ~/.ssh/fliessband -N "" -C fliessband
    ssh deploy@<neue-adresse> 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/fliessband.pub
    gh secret set DEPLOY_KEY < ~/.ssh/fliessband
    gh secret set DEPLOY_KNOWN_HOSTS --body "$(ssh-keyscan -t ed25519 <neue-adresse> 2>/dev/null)"
    gh variable set SERVER --body "deploy@<neue-adresse>"
    gh variable set SEITE_URL --body "https://<domain>"
    
    密钥直接从文件存入 GitHub 的保险库(Secrets),绝不放进聊天或日志。之后可以删除电脑上的 ~/.ssh/fliessband。
  5. 调整工作流: 在 .github/workflows/deploy.yml 中更换工人和连接服务器的路径。其余部分保持不变:
    jobs:
      fliessband:
        runs-on: ubuntu-latest              # ein Arbeiter von GitHub statt deines Servers
        permissions:
          contents: read                    # so wenig Rechte wie möglich
        concurrency:
          group: ausliefern
          cancel-in-progress: false         # eine laufende Auslieferung nie abbrechen
        env:
          ZIEL: ${{ vars.SERVER }}
          SEITE: ${{ vars.SEITE_URL }}
          SHA: ${{ github.sha }}
        steps:
          - name: Schlüssel des Fliessbands einsetzen
            env:
              DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
              DEPLOY_KNOWN_HOSTS: ${{ secrets.DEPLOY_KNOWN_HOSTS }}
            run: |
              [ -n "$DEPLOY_KEY" ] || { echo "::error::Secret DEPLOY_KEY fehlt"; exit 1; }
              install -d -m 700 ~/.ssh
              printf '%s\n' "$DEPLOY_KEY" > ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519
              printf '%s\n' "$DEPLOY_KNOWN_HOSTS" > ~/.ssh/known_hosts
          - name: Bauen und ausliefern, notfalls zurück
            run: |
              ssh "$ZIEL" "SHA=$SHA bash -s" <<'EOF'
              # hier der Block aus der Albatros-Version, ab «set -euo pipefail» bis «echo "läuft: $SHA"», ohne die Zeile mit willkommen
              EOF
          - name: Endkontrolle von aussen
            run: |
              # unverändert aus der Albatros-Version
    
    机密只能通过 env: 传入命令,绝不能直接以 ${{ secrets.… }} 的形式写进 run 行。然后运行 gh workflow run deploy.yml 和 gh run watch。结果必须显示为绿色。
5. 带走数据和机密
  • 通过 scp 直接从一台服务器传到另一台,或经由自己的电脑传输 .env,绝不能通过 Git。
  • 数据库:在 Albatros 上备份(例如 sqlite3 app.sqlite ".backup kopie.sqlite" 或 pg_dump),然后在新服务器上还原。
  • 使用 rsync -a 传输已上传的文件。
6. 更换地址指向

先通过新服务器的地址进行测试,不更改电话簿:curl --resolve <domain>:443:<neue-ip> https://<domain>/。然后要看地址是在哪里租用的。

在 Albatros 购买(konto_status 在「Eigene Domains」下显示该地址):Albatros 管理这个地址的电话簿。用户可以将地址转移到自己选择的注册商:

  1. 用户自行在新注册商处创建账户。
  2. 只有得到用户同意后,才调用 domain_mitnehmen。从此以后,Albatros 不再续费该地址。在转移完成之前,该地址仍指向 Albatros 服务器。
  3. 该工具会提供 Auth-Code,即转移地址的密钥。只向用户展示,绝不要放进文件或日志。用户在新注册商处输入该代码,并在那里发起转移(Transfer)。通常需要为此支付一年的续费费用。购买后的前 60 天内,.com 和 .net 域名通常还不能转移。
  4. 转移完成后,用户在新注册商处设置记录:将 A 和 AAAA 指向新服务器;如果之前有设置,还要配置 www 和电子邮件记录(MX)。

在其他地方租用:

  1. 提前一天将记录的有效期(TTL)调低到 300 秒。这样更换指向会更快。
  2. 将 A 和 AAAA 记录指向新服务器。在 Albatros 上无需为此办理注销。

然后进行检查:https://<domain> 有响应,www 会跳转,锁形图标正常显示。

7. 然后再搬走

观察一周。一切运行正常后,在 Albatros 调整或取消订阅(Cockpit)。用户通过 Albatros 购买的域名需要提前转移(步骤 6),否则会随订阅到期。此后将无法再使用照片(Snapshots):从现在开始,自己的备份才是保障。

8. 检查任务

将 docs/landung.md 加入日志,并通过流水线(Skills git-logbuch、pipeline)执行,然后使用 flugschule-10-landung 运行 mission_pruefen。检查会确认迁移清单 docs/landung.md 是否位于项目中(Pilot 位于 Albatros 服务器上时,或 Light 位于港口时)。最好由用户在仍住在 Albatros 时编写清单。

常见陷阱

  • 没有证书:地址尚未指向新服务器,或者 80 端口已关闭。
  • Docker 端口绕过防火墙:内部服务仅绑定到 127.0.0.1。
  • 已设置备份,却从未恢复过:只有成功完成恢复测试,备份才算真正可用。
  • 更新后自动重启:仅当所有服务之后都能自动恢复运行时才这样做。

结束消息

你在这一步的最后一条消息应以一句关于“搬进自己的房子”这一比喻的话开头,重申核心要点。然后说明:完成了什么、结果在哪里、还有什么未完成,以及接下来要做什么。

评论

支持 Markdown