Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub ActionsとTailscaleを使用して自宅VMへCD環境を整えた話。

GitHub ActionsとTailscaleを使用して自宅VMへCD環境を整えた話。

Avatar for kemnix

kemnix

June 19, 2026

Other Decks in Technology

Transcript

  1. GitHub Actions と Tailscale を使用して 自宅 VM へ CD 環境を整えた話。

    GitHub × Tailscale けけけ, kemnix 26.06.19 KINDAI Info-Tech HUB LT
  2. 名前 所属・学年 B3 | サイバーセキュリティ コース/クラスタ やってること Web アプリ作成, 小さい自宅鯖

    けけけ (kemnix) 学びたいこと IaC(Ansible, Terraform), アーキテクチャ @kemnix_ @kemnix A B O U T 自己紹介
  3. 0 1 / や り た か っ た こ

    と push したら、自宅の機材に自動で反映したい CLOUD GitHub push → GitHub Actions ↓ …… どうやって届ける? 自宅ネットワーク(NAT) 機材 | サーバー
  4. 0 1 / や り た か っ た こ

    と 素直にやるなら、SSH を外に開ける? Internet :22 → 自宅サーバー 世界中からアクセス可能 22番を全世界に開ける=攻撃・総当たりの的
  5. 0 1 / や り た か っ た こ

    と ポートを変えれば繋がる。けど・・・ sshd を割り当て範囲内のポートに変更 + ルーター開放 → 繋がる(不可能ではない) MAP-E の制約 1つの IPv4 を複数人で共有 → 使えるのは割り当てられた範囲のポートだけ Well-known は不可 × 範囲内なら可 ◦ = 繋げられるけど、めんどくさい! 家の回線でポートあまり開けたくない!
  6. 0 2 / T a i l s c a

    l e Tailscale = 機器どうしを直接つなぐ VPN 01 WireGuard ベースのメッシュ型 VPN 02 同じアカウントの機器が、1つの仮想ネットワーク(tailnet)に入る 03 NAT 越えを自動でやる → 内向きのポート開放は不要 PC ↕ tailnet ↕ 自宅サーバー DERP servers, UDPホールパンチング, NATトラバーサル
  7. 0 2 / T a i l s c a

    l e さっきの問題が、全部消える 素直なやり方 Tailscale ポート変更+開放が必要 → ポート開放不要 MAP-E の制約に縛られる → 開放しないので無関係 世界に公開(攻撃の的) → tailnet 内に限定
  8. 0 3 / 実 装 ランナーを「使い捨てメンバー」として tailnet に入れる GitHub Actions

    runner tailscale/github-action で参加 ↓ tailnet runner (ephemeral) SSH ↓ 自宅サーバー ※ ポート開放ゼロ deploy: needs: build runs-on: ubuntu-latest steps: # ① 一時的に tailnet に参加 - uses: tailscale/github-action@v3 with: oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }} oauth-secret: ${{ secrets.TS_OAUTH_SECRET }} tags: tag:ci # ② tailnet 経由で自宅 VM に SSH - uses: appleboy/ssh-action@v1 with: host: ${{ secrets.VM_SSH_HOST }} # Tailscale IP / MagicDNS username: ${{ secrets.VM_SSH_USER }} key: ${{ secrets.VM_SSH_KEY }} script: | cd /opt/app && docker compose pull && docker compose up -d
  9. 0 3 / 実 装 やったこと 01 auth key |

    OAuth token を発行 Actions が tailnet に入る鍵を Secrets に保存 02 タグを付ける runner → tag:ci | 自宅サーバー → tag:server 03 ACL を整備 tag:ci → tag:server の通信だけ許可
  10. 0 3 / 実 装 push するだけ!快適! Before After 手で

    git pull → サービス再起動 → push → 自動デプロイ ポート開放で悩む → ポート開放ゼロ | MAP-E も無関係 公開 SSH が不安 → tailnet 内で完結