2.2. Docker(Docker Compose)

ここでは、Docker Compose を使用したインストール方法について記述します。

重要

Docker Composeは本番環境での利用には向きません。本番環境ではKubernetes、RPM、またはAMIによるインストールを推奨します。 Docker Composeによるインストールは、ローカル環境で簡単に動作を確認したい場合や、intdash APIを使用したアプリケーションの開発環境として使用したい場合を想定しています。

2.2.1. 構成の全体

本章の手順で構築されるコンテナ内のサービス関連図を次に示します。

../_images/docker-compose.svg

図 2 intdashルーティング全体図

2.2.2. 必須要件

  • 動作に必要なツール

    • Git

    • Docker Engine 23.0.1 以降

  • 最小ハードウェア要件

    • 10GB以上のディスク空き容量

    • 4GB以上のRAM

2.2.3. APIの起動手順

ここではAPIサーバーの起動手順を示します。

  1. コンテナはAWS Marketplaceにて提供されます。AWSアカウントからintdashのコンテナ製品をサブスクライブします。

  2. 次のコマンド使用し、Docker Registry へログインします。

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${DOCKER_REGISTRY}
    

    注釈

    awsへ認証していない場合は、 aws configure を実行し、認証情報を設定してください。

  3. 構成ファイルなどが格納された deployment.zip をダウンロードし、展開します。

# あらかじめ `deployment.zip` ダウンロードをしておく
cd <deployment.zipをダウンロードしたディレクトリ>
unzip ./deployment.zip
cd deployment
  1. 環境変数ファイルのサンプルをコピーし、環境変数ファイルを作成します。

    cp ./.env.sample ./.env
    

    注釈

    .env ファイルは 環境変数を定義したファイルです。 docker compose コマンドは自動的に .env ファイルを読み取り、 docker-compose.yml 内で展開します。 詳しくは https://docs.docker.com/compose/environment-variables/set-environment-variables/ を参照してください。

  2. コンテナイメージのレジストリを設定します。AWS Marketplaceでサブスクライブ後に表示されるリポジトリURLを設定します。

    export IMAGE_REPOSITORY_BASE=<イメージのベースURL。通常 <リポジトリID>.dkr.ecr.us-east-1.amazonaws.com/aptpod/<リリース名:2023Q3など> といった形式>
    
  3. パスワードの設定を行います。任意の方法でランダムな文字列を生成します。ここでは pwgen というツールを使用します。pwgen の実行は構築中のサーバー上で行う必要はありません。

    pwgen -s -n 10
    
  4. 標準出力に出力された文字列から任意の文字列を選び、環境変数ファイル内にそれぞれパスワードとして書き込みます。

    # InfluxDBに関連するシークレット
    DOCKER_INFLUXDB_INIT_PASSWORD=passw0rd                    <---- 生成したパスワードを設定します。
    DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=supersecret012345678     <---- 生成したパスワードを設定します。
    # Natsのシークレット
    NATS_PASSWORD=passw0rd         <---- 生成したパスワードを設定します。
    # JetStreamのパスワード
    JET_STREAM_PASSWORD=passw0rd   <---- 生成したパスワードを設定します。
    # Postgresのパスワード
    POSTGRES_PASSWORD=passw0rd     <---- 生成したパスワードを設定します。
    # Minioのパスワード
    MINIO_ROOT_PASSWORD=passw0rd         <---- 生成したパスワードを設定します。
    # intdashの初期ユーザーパスワード
    BOOTSTRAP_USER_PASSWORD=passw0rd     <---- 生成したパスワードを設定します。
    
  5. Authentication Serviceで使用するシークレットを設定をします。 pwgen を使用してシークレットを生成します。

    pwgen -s -n 32
    
  6. 標準出力に出力された文字列から任意の文字列を選び、環境変数ファイル内にそれぞれシークレットとして書き込みます。

    AUTH_KEYS_OAUTH2_HMAC_HASH_SECRET=supersecret012345678901234567890123456789        <---- 生成したシークレットを設定します。
    AUTH_KEYS_API_TOKEN_HASH_SECRET=supersecret012345678901234567890123456789          <---- 生成したシークレットを設定します。
    AUTH_KEYS_PASSWORD_RECOVERY_HASH_SECRET=supersecret012345678901234567890123456789  <---- 生成したシークレットを設定します。
    AUTH_KEYS_EMAIL_VERIFICATION_HASH_SECRET=supersecret012345678901234567890123456789 <---- 生成したシークレットを設定します。
    
  7. Authentication Serviceで使用するRSA鍵の設定をします。次のコマンドで鍵を生成します。

# 秘密鍵の作成
openssl genrsa -out private.key 4096
chmod 644 ./private.key
  1. 秘密鍵を環境変数ファイルに書き込みます。

    # Authentication Serviceの秘密鍵のパス
    AUTH_KEYS_OAUTH2_RSA_PRIVATE_KEY_FILE_PATH=./private.key
    

警告

Authentication Serviceで使用するシークレットは設定されていなくてもサーバーは動作します。 ただし設定されていない場合、アプリケーションを起動するたびにシークレットがランダムで生成されるため、アプリケーション再起動のタイミングで、それまで使用していたAPIトークンが使えなくなるなどの影響がある可能性があります。 ローカル開発用途であれば問題になることはないですが、そうではない場合は注意が必要です。

  1. 以下のコマンドを実行します。

docker compose up -d
  1. 次のコマンドを実行し起動完了を確認します。バージョン番号が正常に出力されればAPIサーバーの構築は完了です。

curl http://127.0.0.1:8080/api/v1/version

# 実行結果
{"version":"2.4.0-next"}
  1. 一度APIサーバーを停止します。

docker compose down -v

2.2.4. フロントエンドアプリケーションの起動手順

ここではフロントエンドアプリケーションの起動手順を示します。 前節の APIの起動手順 に従い、APIが実行されている状態を前提として解説します。

  1. サーバーのFQDNを指定します。.env を開き、ここでは以下のように設定します。

    FQDN=intdash.internal
    
  2. 次のコマンドで証明書を作成します。

    mkcert intdash.internal
    
  3. (ローカル環境でアクセスする場合) /etc/hosts ファイルを編集し、次の行を追記します。

    127.0.0.1       intdash.internal
    
  4. 次のコマンドでフロントエンドアプリケーションを起動します。

    docker compose up -d
    

    注釈

    本番運用やそれに相当する環境で運用する場合、信頼できる認証局によって証明された証明書を使用してください。

    docker-compose.nginx.yml の内容は、TLS終端と、各サービスへのルーティングをするのみとなっています。別のソフトウェアを使用してTLS終端をする場合(例えばAWS ALBを使用)は、同ファイルの内容を参照しつつ適宜読み替えて設定してください。

  5. Webブラウザで https://intdash.internal/ にアクセスします。

  6. 次の内容でサインインします。

    • ユーザー名:intdash

    • パスワード:<.envファイルのBOOTSTRAP_USER_PASSWORDで指定した値>

  7. サインインが完了し、アプリケーショントップが表示されれば構築完了です。