3. intdashサーバーの設定を行う¶
intdashサーバーを作成する の手順に従ってintdashサーバーの準備ができたら、設定を行います。
3.1. ドメイン名とサーバー証明書を設定する¶
このドキュメントでは、例として以下のドメイン名と証明書ファイルを使用します。
項目 |
この説明で使用する例 |
---|---|
intdash用のドメイン名 |
intdash.example.com |
第三者認証局により発行されたSSLサーバー証明書(サーバー証明書と中間証明書が連結されたもの) |
/etc/pki/intdash/certs/intdash.pem |
SSLサーバー秘密鍵 |
/etc/pki/intdash/private/intdash.pem |
注釈
intdash用ドメイン名は、組織で所有・管理しているドメイン名に対しサブドメインとして払い出す方法が一般的です。 その場合、例えばexample.comを所有、管理している場合は、intdash用のドメイン名はintdash.example.comのようにします。
詳細については、組織のドメイン名管理者にご相談ください。
注釈
サーバー証明書は、SSL/TLS証明書とも呼ばれ、クライアントとサーバーの間の接続情報を保護し、第三者からの読み取りや変更を防ぐものです。
セキュリティ上の理由から、自己署名証明書ではなく第三者認証局により発行された証明書を使用してください。自己署名証明書を使用すると、クライアントからの接続時にサーバー証明書の検証に失敗します。サーバー証明書の検証をスキップした場合、通信相手の認証をしないことになり、中間者攻撃等による盗聴・改ざんを許すことになります。
証明書を発行する認証局の例としては、Cybertrust、DigiCert、Let's Encrypt等があります。 Let's Encrypt では、無料で証明書の発行を受けることができます。
3.1.1. ウェブサーバーの設定を行う¶
ウェブサーバーnginxの設定ファイルで、使用するドメイン名とサーバー証明書を設定します。
SSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/nginx/conf.d
デフォルトの設定ファイルをバックアップします。
# cp -p intdash.conf intdash.conf.org
テキストエディターで設定ファイルを開きます。
# vi intdash.conf
ポート80(HTTP)とポート443(HTTPS)の[server_name]にドメイン名を設定します。
... server { listen 80; listen [::]:80; server_name intdash.example.com; <-- access_log off; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name intdash.example.com; <-- root /usr/share/nginx/html; ssl_certificate /etc/pki/intdash/certs/intdash.pem; ssl_certificate_key /etc/pki/intdash/private/intdash.pem; ...
同じ設定ファイル内でポート443の[ssl_certificate]にサーバー証明書、[ssl_certificate_key]にサーバー証明書の秘密鍵を指定します。その後設定ファイルを閉じます。
... server { listen 80; listen [::]:80; server_name intdash.example.com; access_log off; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name intdash.example.com; root /usr/share/nginx/html; ssl_certificate /etc/pki/intdash/certs/intdash.pem; <-- ssl_certificate_key /etc/pki/intdash/private/intdash.pem; <-- ...
設定を反映させるため、以下のコマンドでnginxを起動します。
# systemctl start nginx
起動後、nginxが正常に起動していることを確認します。
# systemctl status nginx
正常に動作していれば
Active: active (running)
と表示されます。
3.1.2. エッジルーターTraefikの設定を行う¶
intdashのAPIサービスや、マイクロサービスへのプロキシを担うTraefikの設定を行います。
前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/intdash/traefik.d
デフォルトの設定ファイルをバックアップします。
# cp -p middleware.toml middleware.toml.org
テキストエディターで設定ファイルを開きます。
# vi middleware.toml
以下の個所にドメイン名を入力します。その後、設定ファイルを閉じます。
[http] [http.middlewares] ... [http.middlewares.cors] [http.middlewares.cors.headers] ... accessControlAllowOriginList = ["https://intdash.example.com", "http://intdash.example.com", "wss://intdash.example.com:443/api/v1/ws/measurements"] <-- ...
3.1.3. 認証処理を行うintdash-micro-authの設定を行う¶
intdashで認証処理を行うマイクロサービス(intdash-micro-auth)の設定を行います。
前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/intdash
デフォルトの設定ファイルをバックアップします。
# cp -p authd.conf authd.conf.org
テキストエディターで設定ファイルを開きます。
# vi authd.conf
以下の個所にドメイン名を入力します。その後、設定ファイルを閉じます。
[email] セクション
verification-page-uri
[email] from = "noreply@example.com" from-display-name = "VM2M" reply-to = "" limit-per-user = 1 verification-expiration-period = "3h" verification-page-uri = "https://intdash.example.com/email/activate" <-- ...
[oauth2] セクション
issuer
sign-in-page-uri
change-password-page-uri
[oauth2] issuer = "https://intdash.example.com" <-- access-token-expiration-period = "1h" refresh-token-expiration-days = 30 sign-in-page-uri = "https://intdash.example.com/signin/" <-- change-password-page-uri = "https://intdash.example.com/oauth2/authorization/api/password-change" <-- ...
[oauth2.default-client] サブセクション
password-recovery-redirect-base-url
web-redirect-base-urls
[oauth2.default-client] password-recovery-redirect-base-url = "https://intdash.example.com" <-- web-redirect-base-urls = [ "http://localhost:8080", "https://localhost:8080", "https://intdash.example.com", <-- ] ...
3.1.4. intdash-micro-auth JWT(JSON Web Token) の秘密鍵を固定化する¶
intdash-micro-authサービスの設定ファイル /etc/intdash/authd.conf
で、認証用のJWT秘密鍵やRSA秘密鍵を設定します。
注釈
ここで固定値を設定しない場合、intdash-micro-authサービスが再起動されるたびに、認証用のJWT秘密鍵やRSA秘密鍵が自動生成されます。 その場合、サービスを再起動するたびに、以下のようなことが起こります。
APIトークンが無効になる
ユーザーのログイン状態がリセットされる
メールアドレス確認用のメールに含まれるリンクが無効になる
そのため、固定の値を設定することを推奨します。
[keys.oauth2-rsa.private-key] サブセクション
key
: PEM形式のRSA秘密鍵を設定します。
[keys] [keys.oauth2-rsa] [keys.oauth2-rsa.private-key] driver = "static" [keys.oauth2-rsa.private-key.static] key = "-----BEGIN RSA PRIVATE KEY-----\nXXXXXX...XXXXXX\n-----END RSA PRIVATE KEY-----" <--
[keys.oauth2-hmac], [keys.api-token], [keys.password-recovery], [keys.email-verification] サブセクション
hash-secret
: ランダムで生成した文字列を設定します。
[keys.oauth2-hmac] hash-secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" <-- rotated-hash-secrets = [""] [keys.api-token] hash-secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" <-- rotated-hash-secrets = [""] [keys.password-recovery] hash-secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" <-- rotated-hash-secrets = [""] [keys.email-verification] hash-secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" <-- rotated-hash-secrets = [""]
この設定後は intdash-micro-auth サービスを再起動してください。また、この設定変更のデータベースへの反映は不要です。
注釈
[keys.oauth2-rsa.private-key] サブセクションでは、 driver = "file"
を指定することで、PEM形式の文字列を直接書き込む代わりにRSA秘密鍵のファイルパスを指定して読み込ませることも可能です。
秘密鍵ファイルはintdashユーザーで動作するintdash-micro-authサービスから読み込まれます。intdashユーザーからの読み込みができるように、ファイルのパーミッション、オーナー、グループを設定してください。
[keys]
[keys.oauth2-rsa]
[keys.oauth2-rsa.private-key]
driver = "file"
[keys.oauth2-rsa.private-key.file]
path = "/etc/intdash/authd.keys/privkey.pem" <--
3.1.5. intdash-web-oauth2の設定を行う¶
intdashのOauth2認証におけるウェブUIクライアントの認証を担うUIサービス(intdash-web-oauth2)の設定を行います。
前の手順に引き続きSSHでintdashサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/sysconfig
デフォルトの設定ファイルをバックアップします。
# cp -p intdash-web-oauth2 intdash-web-oauth2.org
テキストエディターで設定ファイルを開きます。
# vi intdash-web-oauth2
AUTHORIZATION_HOST
とCLIENT_HOST
にドメイン名を入力します。その後、設定ファイルを閉じます。HOST="127.0.0.1" PORT="13003" API_HTTP_URL="http://127.0.0.1:8080" AUTHORIZATION_HOST="https://intdash.example.com" <-- CLIENT_HOST="https://intdash.example.com" <-- CLIENT_ID="533bc9ea_authorization_code.aptpod.co.jp" RETURN_TO_URL="/" ALLOW_LOGGING="false"
3.2. DBサーバーに設定を反映する¶
APIサーバーに設定した情報を基にDBサーバーのマイグレーションを行います。
3.2.1. APIサーバーにDBサーバーの接続情報を設定する¶
intdashの各マイクロサービスに、作成したDBサーバーの接続情報を設定します。
前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/intdash
これまでの手順でバックアップを行っていないデフォルトの設定ファイルをバックアップします。
# cp -p brokerd.conf brokerd.conf.org # cp -p configd.conf configd.conf.org # cp -p intdashd.conf intdashd.conf.org # cp -p measurementd.conf measurementd.conf.org # cp -p media.toml media.toml.org
テキストエディターで以下の設定ファイルをそれぞれ開き、手順4.のように編集します。
# vi auth.toml # vi brokerd.conf # vi configd.conf # vi intdashd.conf # vi measurementd.conf # vi media.toml
以下の個所にDBサーバーのPostgreSQLの接続情報を入力します。その後、設定ファイルを閉じます。
[attrdb] セクション
password = "POSTGRESQL-INTDASH-USER-PASSWORD" address = "DB-SERVER-ADDRESS:5432"
- POSTGRESQL-INTDASH-USER-PASSWORD
PostgreSQLデータベース接続ユーザーのパスワード
- DB-SERVER-ADDRESS
DBサーバーのアドレス(ドメイン名またはIPアドレス)
テキストエディターで以下の設定ファイルを開きます。
# vi measurementd.conf
以下の個所にDBサーバーのInfluxDBの接続情報を入力します。その後、設定ファイルを閉じます。
[*.influx] セクション全て
address = "http://DB-SERVER-ADDRESS:8086" <-- db-name = "intdash" username = "intdash" password = "INFLUXDB-INTDASH-USER-PASSWORD" <--
- INFLUXDB-INTDASH-USER-PASSWORD
InfluxDBデータベース接続ユーザーのパスワード
- DB-SERVER-ADDRESS
DBサーバーのアドレス(ドメイン名またはIPアドレス)
dataファイルの出力先を追加ボリュームにするために、テキストエディターで以下の設定ファイルを開きます。
# vi measurementd.conf # vi mediad.toml
以下のようにそれぞれパス情報を書き換えます。
measurementd.conf
[upload] セクション
[upload] [upload.storage] driver = "file" [upload.storage.file] directory = "/data/intdash/upload" <-- remove-interval-seconds = 604800
mediad.toml
[MediaFilmed セクション
[MediaFilmed] ffmpeg = "/opt/intdash-ffmpeg/bin/ffmpeg" ffmpeg-log-level = "info" ffmpeg-threads = 0 dummy-file-path = "/usr/share/intdash-micro-media/assets/dummy.ts" [MediaFilmed.NatsStreaming] url = "nats://127.0.0.1:4222" username = "intdash" password = "intdash" client-id-prefix = "media" [MediaFilmed.Storage] type = "local" [MediaFilmed.Storage.Local] base-dir = "/data/intdash/media/hls" <--
出力先のフォルダを作成しておきます。
# mkdir -p /data/intdash/upload # chown intdash:intdash /data/intdash/upload # chmod 700 /data/intdash/upload # mkdir -p /data/intdash/media/hls # chown intdash:intdash /data/intdash/media/hls # chmod 700 /data/intdash/media/hls
3.2.2. APIサーバーからDBサーバーにデータベースのマイグレーションを行う¶
intdash の各マイクロサービス用のデータベースのマイグレーションを行います。
前の手順に引き続きSSHでAPIサーバーに接続し、データベースのマイグレーションコマンドを実行します。
# sudo -u intdash intdashd db migrate -c /etc/intdash/intdashd.conf # sudo -u intdash authd db migrate -c /etc/intdash/authd.conf -p INTDASH-USER-PASSWORD # sudo -u intdash measurementd db migrate -c /etc/intdash/measurementd.conf # sudo -u intdash configd db migrate -c /etc/intdash/configd.conf # sudo -u intdash brokerd db migrate -c /etc/intdash/brokerd.conf # sudo -u intdash mediad db migrate -c /etc/intdash/mediad.toml
- INTDASH-USER-PASSWORD
管理者ユーザー(ユーザー名「intdash」)のパスワード。 任意の値を設定してください。
SSHでDBサーバーに接続し、以下のコマンドを実行して2つのsqlファイルを用意します。
$ curl -O https://docs.intdash.jp/manual/intdash-server-setup/ed1/ja/config.sql $ curl -O https://docs.intdash.jp/manual/intdash-server-setup/ed1/ja/app-config.sql
以下のコマンドを実行して設定を追加します。
$ psql -U intdash -d intdash-api -1 -f config.sql $ psql -U intdash -d intdash-micro-config -1 -f app-config.sql
3.3. intdashサービスを起動する¶
APIサーバーで各intdashサービスを起動します。
3.3.1. 各intdashサービスの起動¶
intdashの各マイクロサービスを起動します。
SSHでAPIサーバーに接続し、各サービスを有効化するために以下のコマンドを実行します。
# systemctl enable nginx.service # systemctl enable intdash-api-auth.service # systemctl enable intdash-api-gateway.service # systemctl enable intdash-api.service # systemctl enable intdash-micro-auth.service # systemctl enable intdash-micro-broker.service # systemctl enable intdash-micro-config.service # systemctl enable intdash-micro-measurement.service # systemctl enable intdash-micro-media.service # systemctl enable intdash-web-admin.service # systemctl enable intdash-web-edges.service # systemctl enable intdash-web-me.service # systemctl enable intdash-web-measurements.service # systemctl enable intdash-web-media.service # systemctl enable intdash-web-oauth2-redirector.service # systemctl enable intdash-web-oauth2.service # systemctl enable intdash-web-signin-redirector.service # systemctl enable intdash-web-widget-app-links.service # systemctl enable vm2m-dataviz-backend.service
各サービスを起動するために以下のコマンドを実行します。
# systemctl start intdash-api-auth.service # systemctl start intdash-api-gateway.service # systemctl start intdash-api.service # systemctl start intdash-micro-auth.service # systemctl start intdash-micro-broker.service # systemctl start intdash-micro-config.service # systemctl start intdash-micro-measurement.service # systemctl start intdash-micro-media.service # systemctl start intdash-web-admin.service # systemctl start intdash-web-edges.service # systemctl start intdash-web-me.service # systemctl start intdash-web-measurements.service # systemctl start intdash-web-media.service # systemctl start intdash-web-oauth2-redirector.service # systemctl start intdash-web-oauth2.service # systemctl start intdash-web-signin-redirector.service # systemctl start intdash-web-widget-app-links.service # systemctl start vm2m-dataviz-backend.service
起動後、各サービスが正常に起動していることを確認します。
# systemctl status nginx.service # systemctl status intdash-api-auth.service # systemctl status intdash-api-gateway.service # systemctl status intdash-api.service # systemctl status intdash-micro-auth.service # systemctl status intdash-micro-broker.service # systemctl status intdash-micro-config.service # systemctl status intdash-micro-measurement.service # systemctl status intdash-micro-media.service # systemctl status intdash-web-admin.service # systemctl status intdash-web-edges.service # systemctl status intdash-web-me.service # systemctl status intdash-web-measurements.service # systemctl status intdash-web-media.service # systemctl status intdash-web-oauth2-redirector.service # systemctl status intdash-web-oauth2.service # systemctl status intdash-web-signin-redirector.service # systemctl status intdash-web-widget-app-links.service # systemctl status vm2m-dataviz-backend.service
正常に動作していれば Active: active (running) と表示されます。
3.4. 管理者ユーザーのアカウントを設定する¶
初期状態では、「intdash」という名前の管理者ユーザーアカウントが存在します。 本セクションではこのアカウントのメールアドレスを設定します。あわせて、メールサーバーの設定も行います。
3.4.1. メールサーバーと通知メール送信元を設定する¶
パスワードを忘れた場合の認証の際などに、intdashサーバーが使用者にメールを送信することがあります。その際に使用する送信元のメールアドレスとSMTPサーバーを設定します。
SSHでintdashサーバーに接続し、設定ファイルのディレクトリに移動します。
# cd /etc/intdash
テキストエディターで設定ファイルを開きます。
# vi authd.conf
[email]セクションにSMTPサーバーの情報と送信メールの情報を入力します。SMTPサーバーの情報はお使いの環境に合わせて設定してください。その後、設定ファイルを閉じます。
[email] セクション
from: 送信元として使用されるメールアドレス
reply-to: Reply-toヘッダーに使用されるメールアドレス(設定は必須ではありません)
[email.smtp] サブセクション
ご使用の環境のSMTPサーバーの情報
[email] from = "noreply@example.com" from-display-name = "VM2M" reply-to = "" ... [email.smtp] address = "127.0.0.1:25" hostname = "" enable-tls = false enable-starttls-auto = false insecure-tls = false authentication = "" username = "" password = ""
設定を反映させるため、以下のコマンドでintdash-micro-authサービスを再起動します。
# systemctl restart intdash-micro-auth
再起動後、intdash-micro-authが正常に起動していることを確認します。
# systemctl status intdash-micro-auth
正常に動作していれば
Active: active (running)
と表示されます。
3.4.2. 管理者ユーザーのメールアドレスを設定する¶
ウェブブラウザーで
https://intdash.example.com/users/me/
にアクセスします。サインイン画面が表示されたら、管理者ユーザー名
intdash
と、さきほど設定したパスワード(INTDASH-USER-PASSWORD)でサインインします。ユーザー
intdash
のマイページが表示されます。[メールアドレス]をクリックして、管理者ユーザーのメールアドレスを入力し、[変更を保存]をクリックします。
以下のメッセージが表示されます。メールアドレスが正しいことを確認し、[閉じる]をクリックします。
メールアドレス宛に確認メールが送信されます。
お使いのメールクライアントで確認メールを開きます。
メールに記載されているアクティベーション用URLにアクセスします。
再度、マイページの[メールアドレス]を開き、以下のように[認証済み]となっていれば設定は完了です。
3.5. Google MapsのAPIキーを設定する(Google Mapsを使用する場合のみ)¶
Data VisualizerでGoogle Mapsビジュアルパーツを使用するためには、Google MapsのAPIキーをintdashサーバーに設定しておく必要があります。
注釈
Data Visualizerでは、Open Street Mapを使用することもできます。Open Street Mapを使用する場合、ここでAPIキーを設定する必要はありません。
Google Mapsの詳細に関しては Google Maps公式サイト を参照してください。
Google MapsのAPIキーの設定は、intdashサーバーの設定用APIに管理者ユーザーとしてアクセスして行います。
SSHでintdashサーバーに接続します。
下記のコマンドで、管理者ユーザーintdashのパスワードをシェル変数に設定します。
# read -s PASSWORD <-- Enter the password and press <Enter>.
下記のコマンドで、intdashにサインインします。
# curl -X POST http://127.0.0.1:8080/api/auth/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username"="intdash" \ -d "password"="${PASSWORD}" \ -d "grant_type"="password" \ -d "client_id"="99dcf67c_default.aptpod.co.jp"
下記のコマンドで、前の手順でのレスポンスのJSONに含まれる
access_token
の値をシェル変数に設定します。# read -s ACCESS_TOKEN <-- Enter the access token and press <Enter>.
下記のコマンドで、Google Maps APIキーを設定します。
お持ちのGoogle Maps APIキーを、
googleMapsApiKey
の値として入力してください。以下では、
-d '{"content" ...
の行は表示の都合で折り返して表示されていますが、実際はこの行内に改行は不要です。# curl -X PUT http://127.0.0.1:8080/api/v1/configs/vm2m-2nd-variables \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${ACCESS_TOKEN}" \ -d '{"content":"{\"googleMapsApiKey\":\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\"googleMapsApiClientID\":\"\"}"}'
注釈
APIキーではなくClient IDをお持ちの場合は、下記のように
googleMapsApiClientID
の値として入力してください。-d '{"content":"{\"googleMapsApiKey\":\"\",\"googleMapsApiClientID\":\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"}"}'
以上で設定は完了です。 動作を確認する に進んでください。