mcpField
L
landung

landung

github.com/dischen87その他09 回インストール今日更新
リポジトリ

landung について

Albatros から自主管理サーバーへプロジェクトを移すためのスキルです。デプロイ運用を担うプロジェクト担当者向けに、計画、サーバー設定、GitHub への移行、データとドメインの移転を案内し、新環境の確認後に旧環境を停止する手順を示します。

主な機能

  1. 01移行が適切かを評価
  2. 02プロジェクト、データ、秘密情報の移行を計画
  3. 03Ubuntu と Docker のサーバー設定を案内
  4. 04Git リポジトリとデプロイワークフローを 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 の提供内容以上のものが必要ですか?すべてを自分で管理したいですか?毎月、保守に1〜2時間かけられますか?そうでなければ、現状のままにするのも良い選択です。

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 接続を1つ開いたままにします。
    • 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. データとシークレットを持っていく
  • .env はサーバー間で直接、またはご自身のコンピューターを経由して scp で転送します。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)を開始します。通常、更新料金として1年分を支払います。.com と .net は、購入後60日間は移転できないことがよくあります。
  4. 移転が完了したら、新しいレジストラーでレコードを設定します。A と AAAA は新しいサーバーを指すようにし、該当する場合は www とメール用レコード(MX)も設定します。

別の場所で契約した場合:

  1. 前日に、レコードの有効期間(TTL)を300秒に下げます。そうすれば、切り替えが早くなります。
  2. A レコードと AAAA レコードを新しいサーバーに向けます。Albatros では解約の手続きは必要ありません。

その後、https://<domain> が応答すること、www がリダイレクトすること、鍵のアイコンが表示されることを確認します。

7. それから引っ越す

1週間、状況を確認します。すべて順調なら、Albatros のサブスクリプションを変更するか、解約します(Cockpit)。ご本人が Albatros で購入したドメインは、その前に移転してください(手順6)。移転しないと、サブスクリプションの終了とともに使えなくなります。その後は写真(スナップショット)が利用できなくなります。これからは、ご自身のバックアップが頼りです。

8. ミッションを確認する

docs/landung.md をログブックに追加し、ファイルバンド(スキル git-logbuch、pipeline)経由で反映してから、flugschule-10-landung を指定して mission_pruefen を実行します。検証では、移転リスト docs/landung.md がプロジェクトにあるかどうかを確認します(Albatros サーバーに Pilot がいる場合も、港に Light がいる場合も同様です)。ご本人がまだ Albatros を利用している間にリストを作成するのがおすすめです。

注意点

  • 証明書がない:アドレスがまだ新しいサーバーを指していないか、ポート 80 が閉じています。
  • Docker のポートがファイアウォールを迂回する:内部サービスは 127.0.0.1 のみにバインドしてください。
  • バックアップを設定しただけで、復元したことがない:復元テストに成功して初めて、バックアップに意味があります。
  • 更新後に自動で再起動する:その後、すべてが自動で再び起動する場合に限ります。

最後のメッセージ

このステップでの最後のメッセージは、「自分の家への引っ越し」というイメージを使った一文で始め、要点を改めて伝えます。その後、達成したこと、成果物の場所、未完了のこと、次に行うことを伝えます。

コメント