2.2. Docker(Docker Compose)
ここでは、Docker Compose を使用したインストール方法について記述します。
重要
Docker Composeは本番環境での利用には向きません。本番環境ではKubernetes、RPM、またはAMIによるインストールを推奨します。 Docker Composeによるインストールは、ローカル環境で簡単に動作を確認したい場合や、intdash APIを使用したアプリケーションの開発環境として使用したい場合を想定しています。
2.2.1. 構成の全体
本章の手順で構築されるコンテナ内のサービス関連図を次に示します。
2.2.2. 必須要件
動作に必要なツール
Git
Docker Engine 23.0.1 以降
最小ハードウェア要件
10GB以上のディスク空き容量
4GB以上のRAM
2.2.3. APIの起動手順
ここではAPIサーバーの起動手順を示します。
コンテナはAWS Marketplaceにて提供されます。AWSアカウントからintdashのコンテナ製品をサブスクライブします。
次のコマンド使用し、Docker Registry へログインします。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${DOCKER_REGISTRY}
注釈
awsへ認証していない場合は、 aws configure を実行し、認証情報を設定してください。
構成ファイルなどが格納された deployment.zip をダウンロードし、展開します。
# あらかじめ `deployment.zip` ダウンロードをしておく cd <deployment.zipをダウンロードしたディレクトリ> unzip ./deployment.zip cd deployment
環境変数ファイルのサンプルをコピーし、環境変数ファイルを作成します。
cp ./.env.sample ./.env
注釈
.env
ファイルは 環境変数を定義したファイルです。docker compose
コマンドは自動的に.env
ファイルを読み取り、docker-compose.yml
内で展開します。 詳しくは https://docs.docker.com/compose/environment-variables/set-environment-variables/ を参照してください。コンテナイメージのレジストリを設定します。AWS Marketplaceでサブスクライブ後に表示されるリポジトリURLを設定します。
export IMAGE_REPOSITORY_BASE=<イメージのベースURL。通常 <リポジトリID>.dkr.ecr.us-east-1.amazonaws.com/aptpod/<リリース名:2023Q3など> といった形式>
パスワードの設定を行います。任意の方法でランダムな文字列を生成します。ここでは
pwgen
というツールを使用します。pwgen
の実行は構築中のサーバー上で行う必要はありません。pwgen -s -n 10
標準出力に出力された文字列から任意の文字列を選び、環境変数ファイル内にそれぞれパスワードとして書き込みます。
# 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 <---- 生成したパスワードを設定します。
Authentication Serviceで使用するシークレットを設定をします。
pwgen
を使用してシークレットを生成します。pwgen -s -n 32
標準出力に出力された文字列から任意の文字列を選び、環境変数ファイル内にそれぞれシークレットとして書き込みます。
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 <---- 生成したシークレットを設定します。
Authentication Serviceで使用するRSA鍵の設定をします。次のコマンドで鍵を生成します。
# 秘密鍵の作成 openssl genrsa -out private.key 4096 chmod 644 ./private.key
秘密鍵を環境変数ファイルに書き込みます。
# Authentication Serviceの秘密鍵のパス AUTH_KEYS_OAUTH2_RSA_PRIVATE_KEY_FILE_PATH=./private.key
警告
Authentication Serviceで使用するシークレットは設定されていなくてもサーバーは動作します。 ただし設定されていない場合、アプリケーションを起動するたびにシークレットがランダムで生成されるため、アプリケーション再起動のタイミングで、それまで使用していたAPIトークンが使えなくなるなどの影響がある可能性があります。 ローカル開発用途であれば問題になることはないですが、そうではない場合は注意が必要です。
以下のコマンドを実行します。
docker compose up -d
次のコマンドを実行し起動完了を確認します。バージョン番号が正常に出力されればAPIサーバーの構築は完了です。
curl http://127.0.0.1:8080/api/v1/version # 実行結果 {"version":"2.4.0-next"}
一度APIサーバーを停止します。
docker compose down -v
2.2.4. フロントエンドアプリケーションの起動手順
ここではフロントエンドアプリケーションの起動手順を示します。 前節の APIの起動手順 に従い、APIが実行されている状態を前提として解説します。
サーバーのFQDNを指定します。
.env
を開き、ここでは以下のように設定します。FQDN=intdash.internal
次のコマンドで証明書を作成します。
mkcert intdash.internal
(ローカル環境でアクセスする場合)
/etc/hosts
ファイルを編集し、次の行を追記します。127.0.0.1 intdash.internal
次のコマンドでフロントエンドアプリケーションを起動します。
docker compose up -d
注釈
本番運用やそれに相当する環境で運用する場合、信頼できる認証局によって証明された証明書を使用してください。
docker-compose.nginx.yml の内容は、TLS終端と、各サービスへのルーティングをするのみとなっています。別のソフトウェアを使用してTLS終端をする場合(例えばAWS ALBを使用)は、同ファイルの内容を参照しつつ適宜読み替えて設定してください。
Webブラウザで https://intdash.internal/ にアクセスします。
次の内容でサインインします。
ユーザー名:intdash
パスワード:<.envファイルのBOOTSTRAP_USER_PASSWORDで指定した値>
サインインが完了し、アプリケーショントップが表示されれば構築完了です。