The Things StackをEC2にインストールする(2/2)
前回の記事では,The Things Stack(TTS)をインストールするためのEC2インスタンスを用意しました.今回は,EC2インスタンスにTTSをインストールする手順をまとめます.
オフィシャルのドキュメントはこちらです.TTSのインストールはdocker-composeを利用するだけなので,特に難しいところはないかもしれません(youtubeの説明動画は6分で終わっています)が,以下に手順を記述します.
手順
- docker,docker-composeをインストールする
- docker-compose.yml,TTSの設定ファイルを編集する
- dockerイメージをダウンロード,データベースを初期化,ユーザを追加
- 起動
1. docker,docker-composeをインストールする
初めに,EC2インスタンスにdockerとdocker-composeをインストールします.前回記事のようにubuntuのインスタンスを利用している場合,dockerのインストール手順はこちらの手順に従います.
// 必要なパッケージをインストール
$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates curl gnupg lsb-release
// GPG鍵を追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
// リポジトリを追加
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
// dockerインストール
$ sudo apt-get update
$ sudo apt-get -y install docker-ce docker-ce-cli containerd.io
docker-composeのインストールは,こちらの手順に従います.
// docker-composeをダウンロード
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// 実行権限を追加
$ sudo chmod +x /usr/local/bin/docker-compose
なお,dockerは特に設定しない場合,rootユーザでしか操作できないようですが,非rootユーザがdockerを操作したい場合はこのドキュメントの手順を参考にします.
// dockerグループを作成(既に存在するかも)
$ sudo groupadd docker
// dockerコマンドを実行したいユーザを,dockerグループに追加
$ sudo usermod -aG docker $USER
// グループを変更
$ newgrp docker
2. docker-compose.yml,TTSの設定ファイルを編集する
TTSはデータストアとしてSQLデータベース(CockroachDBかPostgreSQL)とRedisを利用します.これらの設定が記述されているdocker-composeファイルが用意されていますので,そちらをダウンロードします.
// 以下,ホームディレクトリで作業する
$ cd ~
// docker-compose.ymlをダウンロード
$ curl https://www.thethingsindustries.com/docs/getting-started/installation/configuration/docker-compose-open-source.yml > docker-compose.yml
ダウンロードしたdocker-composeファイル中では,SQLデータベースはCockroachDBを利用するように記述されています.また,https接続のための証明書は,TTSに最初にアクセスした際に自動的にリクエスト(バックグラウンドでLet’s Encryptから取得)するような設定になっています.
今回は,特に編集せず元のdocker-composeファイルをそのまま利用しますが,オフィシャルドキュメントに記載されているように,プロダクション環境ではそれぞれのdocker imageのタグを固定した方が良いかもしれません.
次に,TTSの設定ファイルをダウンロードします.docker-compose.yml中でファイルを配置する場所を定めているので,以下のようにディレクトリを作成し,その中にダウンロードします.
// ディレクトリを作成
$ mkdir -p config/stack
// TTSの設定ファイルをダウンロード
$ curl https://www.thethingsindustries.com/docs/getting-started/installation/configuration/ttn-lw-stack-docker-open-source.yml > config/stack/ttn-lw-stack-docker.yml
ttn-lw-stack-docker.ymlでは,元々記述されているサンプルのホスト名「thethings.example.com」を,自分のホスト名に書き換えます.
続いて証明書を保存するディレクトリを作成し,権限を与えます.
$ mkdir acme
// ユーザ886(dockerでTTSを実行するユーザ)に所有者を変更
$ sudo chown 886:886 acme
設定は以上です.
3. dockerイメージをダウンロード,データベースを初期化,ユーザを追加
初めに,dockerイメージをダウンロードします.
$ docker-compose pull
次に,アカウント情報を管理するサーバ(Identity Server)のデータベースを初期化します.この手順は,Enterprise版のTTSを利用する場合は別のコマンドになるようですので,ご注意ください.
$ docker-compose run --rm stack is-db init
続いて,webコンソールにログインする際のユーザを作成します.以下のコマンドを実行するとpasswordの設定を求められますが,このid(admin)/passwordでログインできるようになります.
// ユーザ作成(emailは適切に設定)
$ docker-compose run --rm stack is-db create-admin-user --id admin --email your@email.com
コマンドラインインタフェースを利用する場合は,以下の手順でOAuthクライアントを作成します.
$ docker-compose run --rm stack is-db create-oauth-client --id cli --name "Command Line Interface" --owner admin --no-secret --redirect-uri "local-callback" --redirect-uri "code"
最後に,コンソールのclientを作成します.ここで「CONSOLE_SECRET」には,ttn-lw-stack-docker.ymlのconsole.oath.client-secretと同じ値(デフォルトの設定ファイルでは"console")を設定し,SERVER_ADDRESSには同じくttn-lw-stack-docker.ymlで,「thethings.example.com」から置き換えたホスト名を設定します.
$ CONSOLE_SECRET="console"
$ SERVER_ADDRESS="https://(置き換えたホスト名)"
$ docker-compose run --rm stack is-db create-oauth-client --id console --name "Console" --owner admin --secret "${CONSOLE_SECRET}" --redirect-uri "${SERVER_ADDRESS}/console/oauth/callback" --redirect-uri "/console/oauth/callback" --logout-redirect-uri "${SERVER_ADDRESS}/console" --logout-redirect-uri "/console"
以上で設定は終了です.
4. 起動
ここまでの設定が成功していれば,以下のコマンドでコンテナが起動します.
$ docker-compose up
起動後,https://(置き換えたホスト名) にアクセスすると,設定したid/passwordでログインできるようになります.初回アクセス時は証明書を取得するために少し時間がかかるかもしれません.
設定に失敗している場合,ログに何か表示されるかもしれません.その場合は,トラブルシューティング等が参考になるかもしれません.
手順は以上です.