Skip to content

[Step 7] デプロイ・インフラ #28

@takaokouji

Description

@takaokouji

概要

Issue smalruby/smalruby3-gui#417 の Step 7: デプロイ・インフラを実装します。

AWS EC2環境でのプロダクション運用に必要なインフラストラクチャとCI/CDパイプラインを構築します。

実装内容

1. AWS EC2環境構築

  • EC2インスタンス設定・起動
  • セキュリティグループ設定(HTTP/HTTPS, SSH)
  • Elastic IP設定
  • Route 53 DNS設定(koshien.smalruby.app)
  • 基本的なLinux環境セットアップ

2. Docker本番環境設定

  • 本番用Dockerfile最適化
  • Multi-stage build対応
  • docker-compose.prod.yml作成
  • イメージサイズ最適化
  • セキュリティスキャン設定

3. Thruster設定・SSL証明書

  • config/thruster.yml本番設定
  • Let's Encrypt SSL証明書取得・設定
  • SSL証明書自動更新設定
  • HTTPS リダイレクト設定
  • セキュリティヘッダー設定

4. 本番環境設定

  • Rails本番環境設定(secrets, credentials)
  • 環境変数管理
  • ログ設定・ローテーション
  • バックアップ設定(SQLite3)
  • 監視・ヘルスチェック設定

5. CI/CD設定

  • GitHub Actions ワークフロー作成
  • 自動テスト実行
  • 自動デプロイ設定
  • ロールバック機能
  • デプロイ通知設定

6. 運用・監視

  • アプリケーション監視設定
  • パフォーマンス監視
  • エラー監視・アラート
  • ログ監視・分析
  • バックアップ・リストア手順

7. セキュリティ強化

  • ファイアウォール設定
  • 不要サービス停止
  • SSH設定強化
  • アプリケーションレベルセキュリティ
  • 定期的なセキュリティアップデート

インフラ構成

AWS リソース

  • EC2: t3.micro または t3.small
  • Storage: EBS gp3 (20GB〜)
  • Network: VPC, Security Groups
  • DNS: Route 53

Docker構成

# docker-compose.prod.yml
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.prod
    ports:
      - "80:3000"
      - "443:3000"
    environment:
      - RAILS_ENV=production
      - RAILS_MASTER_KEY=${RAILS_MASTER_KEY}
    volumes:
      - ./storage:/rails/storage
      - ./log:/rails/log
      - ./ssl:/rails/ssl
    restart: unless-stopped

SSL証明書設定

  • Let's Encrypt使用
  • 自動更新設定(certbot)
  • Thrusterでの証明書読み込み

完了条件

  • AWS EC2でアプリケーションが正常動作
  • HTTPS接続が正常に動作(koshien.smalruby.app)
  • CI/CDパイプラインが正常動作
  • 監視・ログ収集が動作
  • セキュリティ設定が適切に実装
  • デプロイ・運用ドキュメント作成完了

関連Issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Icebox

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions