Communityコーディング&開発github.com

byteTuto/website

byteTutoサイト(Amazon EC2上、Docker + nginx、GitHub Actions、GHCR、Let's Encrypt)のデプロイ、確認、診断、ロールバックを行うスキル。公開、HTTPS、サーバー、CI/CDパイプラインに関するあらゆる質問に使用します。

website とは?

このスキルは、byteTutoのウェブサイトをAmazon EC2にデプロイ、確認、診断、ロールバックするための完全なソリューションを提供します。GitHub Actionsワークフローを活用し、`main`ブランチへのプッシュをトリガーとして、自動テスト、マルチアーキテクチャDockerイメージのビルドとGHCRへの公開、SSH経由でのEC2へのデプロイを実行します。デプロイ失敗時には自動で前回の正常イメージにロールバックする堅牢な仕組みを備え、Let's EncryptによるHTTPS証明書の初期設定と自動更新もサポートします。主なユースケースは、コード変更後の本番環境デプロイ、サーバー状態の確認、SSL証明書の管理、そしてデプロイ失敗時の迅速な復旧です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/byteTuto/website/tree/HEAD/.claude/skills/deploy-ec2

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

byteTutoのEC2へのデプロイ

デプロイフロー

  1. git push を main ブランチに実行 → .github/workflows/deploy.yml が起動
  2. test ジョブ: docker build、nginx -t、スモークテスト(/healthz、トップページ、404、CSPヘッダー)
  3. publish ジョブ: マルチアーキテクチャイメージ(amd64 + arm64)を ghcr.io/bytetuto/website:<sha7> と :latest にプッシュ
  4. deploy ジョブ: SSHでEC2に接続、/opt/bytetuto/.env を書き込み、docker-compose.yml + deploy/*.sh をコピー、deploy/deploy.sh を実行
  5. deploy.sh: イメージをプル、up -d で起動、/healthz を最大40秒待機。失敗 → 自動的に .last_image のイメージにロールバック

PRの場合はtestジョブのみ実行されます。

GitHubのシークレット / 変数(Settings → Secrets and variables → Actions)

  • シークレット: EC2_HOST、EC2_USER(ec2-user または ubuntu)、EC2_SSH_KEY(完全な秘密鍵)、EC2_KNOWN_HOSTS(推奨: ssh-keyscan -H <ip> の出力)
  • 変数: DOMAIN(例: bytetuto.com)、LETSENCRYPT_EMAIL
  • GitHub環境 production(手動承認が必要な場合あり)

便利なコマンド(EC2上、/opt/bytetuto ディレクトリ内)

  • 状態確認: docker compose ps · ログ: docker compose logs -f web
  • ヘルスチェック: curl -fsS http://127.0.0.1/healthz
  • 特定バージョンを再デプロイ: IMAGE=ghcr.io/bytetuto/website:<sha7> bash deploy/deploy.sh
  • 手動ロールバック: 以前のタグ(GitHubのPackagesタブで確認可能)を使って deploy.sh を再実行
  • HTTPS(DNS設定完了後、一度だけ実行): bash deploy/init-ssl.sh(最初は STAGING=1 でテスト推奨)
  • 証明書自動更新: cronジョブ /etc/cron.d/bytetuto-certbot(1日2回実行)、ログは certbot-renew.log

nginxがHTTPとHTTPSを切り替える仕組み

nginx/40-bytetuto-ssl.sh がコンテナ起動時に実行されます: $DOMAIN の証明書が存在する場合 → https.conf.template、それ以外 → http.conf.template。 init-ssl.sh 実行後は、docker compose restart web を実行するだけでHTTPSに切り替わります。

クイック診断

症状原因
Deployジョブ: Permission denied (publickey)EC2_SSH_KEY または EC2_USER が間違っている
docker: permission deniedユーザーがdockerグループに属していない → ec2-setup.sh 実行後、再接続が必要
pull access deniedGHCRパッケージがプライベートでログインに失敗、またはパッケージを公開していない
外部からのHTTPタイムアウトSecurity Groupでポート80/443が開放されていない
certbotが失敗するDNSがまだ伝播していない、またはポート80が閉じている
exec format errorアーキテクチャの問題: イメージがマルチアーキテクチャであることを確認

ルール

  • .env、SSH鍵、certbot/ ディレクトリ内のファイルを決して読んだり表示したりしない。
  • git push、ssh、scp、および deploy/ ディレクトリやワークフローファイルの変更を行う前には必ず確認を求める。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

関連スキル