ドキュメントに戻る
デプロイメント

専用サーバーセットアップ

Ansibleベースのインフラストラクチャ:基本ハードニング、アプリデプロイメント、Vault管理シークレット。

12分 で読めます

PlanToCodeはAnsible Playbookで管理される専用サーバーで稼働します。このドキュメントはインフラストラクチャセットアップ、セキュリティハードニング、デプロイメントプロセスをカバーします。

インフラストラクチャレイヤー

インフラストラクチャはレイヤーに整理され、それぞれ専用のPlaybookで管理されます:

  • ベースレイヤー:OSハードニング、SSH設定、ファイアウォールルール
  • データベースレイヤー:レプリケーションとバックアップ付きのPostgreSQL 17
  • キャッシュレイヤー:セッション状態とジョブキュー用のRedis 7+
  • アプリケーションレイヤー:systemdサービス付きのRustサーバーバイナリ
  • プロキシレイヤー:SSL終端付きのNginxリバースプロキシ

サーバーリージョン

PlanToCodeは地理的冗長性のために2つのリージョンで稼働しています:

  • EUリージョン:Hetzner専用サーバー(api-eu.plantocode.com)
  • USリージョン:InterServer専用サーバー(api-us.plantocode.com)

サーバー要件

  • Debian 12またはUbuntu 22.04 LTS
  • 4+CPUコア、16GB以上RAM、200GB以上SSD
  • ポート22、80、443へのファイアウォールアクセス付きパブリックIPv4
  • Ansibleデプロイメント用のSSHキーアクセス

基本ハードニング

site-base.ymlがセキュリティハードニングを適用します:

  • rootSSHログインを無効化、キー認証を必須に
  • 最小限のオープンポートでUFWファイアウォールを設定
  • ブルートフォース保護用にfail2banをインストール
  • 自動セキュリティ更新を有効化
  • 監査ログを設定

PostgreSQLセットアップ

PostgreSQL 17は本番環境用に設定されています:

  • PgBouncerによる接続プーリング
  • pg_dumpによる自動日次バックアップ
  • ポイントインタイムリカバリ用のWALアーカイブ
  • すべての接続にSSL必須
  • マルチテナントデータ用の行レベルセキュリティ

Redisセットアップ

Redis 7+がキャッシングとセッション状態を処理します:

  • パスワード認証必須
  • 耐久性用のAOF永続化
  • エビクションポリシー付きメモリ制限
  • 接続用のTLS暗号化

ゼロダウンタイムデプロイメント

デプロイメントはローリングアップデート戦略を使用します:

  • 新しいバイナリを実行中バージョンと並行でアップロード
  • ヘルスチェックで新バージョンの準備完了を確認
  • systemdがグレースフルシャットダウンで再起動
  • ロードバランサーが切り替え中に接続をドレイン
  • 前のバイナリシンボリックリンク経由でロールバック可能

クイックスタート

  1. インフラストラクチャリポジトリをクローン
  2. inventory.exampleをinventoryにコピーしてホストを設定
  3. .vault_passにVaultパスワードを設定
  4. 実行:ansible-playbook -i inventory site-base.yml
  5. 実行:ansible-playbook -i inventory site-app.yml

シークレット管理

機密設定はAnsible Vaultを使用します:

  • データベース認証情報
  • LLMプロバイダー用APIキー
  • SSL証明書と秘密鍵
  • Auth0クライアントシークレット
  • Stripe Webhookシークレット

一般的な操作

  • ansible-playbook -i inventory site-app.yml --tags deploy
  • ansible-playbook -i inventory site-base.yml --tags backup
  • ansible-playbook -i inventory site-app.yml --tags rollback
  • ansible-playbook -i inventory site-base.yml --tags logs

SSL/TLS設定

Let's Encryptが無料のSSL証明書を提供します:

  • Nginxプラグイン付きでCertbotを設定
  • cronジョブによる自動更新
  • HSTSヘッダーを有効化
  • TLS 1.2以上のみ、モダン暗号スイート

セキュリティチェックリスト

  • すべてのデフォルトパスワードを変更
  • SSHキーローテーションをスケジュール
  • ファイアウォールルールを監査
  • セキュリティ更新を自動化
  • バックアップリストアをテスト

災害復旧

一般的な障害シナリオの復旧手順:

  • データベース破損:最新のpg_dumpバックアップから復元
  • サーバー障害:新しいサーバーをプロビジョニングしてPlaybookを実行
  • SSL有効期限切れ:手動でcertbot renew --force-renewal
  • セキュリティ侵害:すべての認証情報をローテーション、ログを監査