ドキュメントに戻る
デプロイメント
専用サーバーセットアップ
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がグレースフルシャットダウンで再起動
- ロードバランサーが切り替え中に接続をドレイン
- 前のバイナリシンボリックリンク経由でロールバック可能
クイックスタート
- インフラストラクチャリポジトリをクローン
- inventory.exampleをinventoryにコピーしてホストを設定
- .vault_passにVaultパスワードを設定
- 実行:ansible-playbook -i inventory site-base.yml
- 実行:ansible-playbook -i inventory site-app.yml
シークレット管理
機密設定はAnsible Vaultを使用します:
- データベース認証情報
- LLMプロバイダー用APIキー
- SSL証明書と秘密鍵
- Auth0クライアントシークレット
- Stripe Webhookシークレット
一般的な操作
ansible-playbook -i inventory site-app.yml --tags deployansible-playbook -i inventory site-base.yml --tags backupansible-playbook -i inventory site-app.yml --tags rollbackansible-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
- セキュリティ侵害:すべての認証情報をローテーション、ログを監査