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の設定ファイルで、使用するドメイン名とサーバー証明書を設定します。

  1. SSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/nginx/conf.d
    
  2. デフォルトの設定ファイルをバックアップします。

    # cp -p intdash.conf intdash.conf.org
    
  3. テキストエディターで設定ファイルを開きます。

    # vi intdash.conf
    
  4. ポート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;
    
    ...
    
  5. 同じ設定ファイル内でポート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;      <--
    
    ...
    
  6. 設定を反映させるため、以下のコマンドでnginxを起動します。

    # systemctl start nginx
    
  7. 起動後、nginxが正常に起動していることを確認します。

    # systemctl status nginx
    

    正常に動作していれば Active: active (running) と表示されます。

3.1.2. エッジルーターTraefikの設定を行う

intdashのAPIサービスや、マイクロサービスへのプロキシを担うTraefikの設定を行います。

  1. 前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/intdash/traefik.d
    
  2. デフォルトの設定ファイルをバックアップします。

    # cp -p middleware.toml middleware.toml.org
    
  3. テキストエディターで設定ファイルを開きます。

    # vi middleware.toml
    
  4. 以下の個所にドメイン名を入力します。その後、設定ファイルを閉じます。

    [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)の設定を行います。

  1. 前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/intdash
    
  2. デフォルトの設定ファイルをバックアップします。

    # cp -p authd.conf authd.conf.org
    
  3. テキストエディターで設定ファイルを開きます。

    # vi authd.conf
    
  4. 以下の個所にドメイン名を入力します。その後、設定ファイルを閉じます。

    • [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)の設定を行います。

  1. 前の手順に引き続きSSHでintdashサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/sysconfig
    
  2. デフォルトの設定ファイルをバックアップします。

    # cp -p intdash-web-oauth2 intdash-web-oauth2.org
    
  3. テキストエディターで設定ファイルを開きます。

    # vi intdash-web-oauth2
    
  4. AUTHORIZATION_HOSTCLIENT_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サーバーの接続情報を設定します。

  1. 前の手順に引き続きSSHでAPIサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/intdash
    
  2. これまでの手順でバックアップを行っていないデフォルトの設定ファイルをバックアップします。

    # 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
    
  3. テキストエディターで以下の設定ファイルをそれぞれ開き、手順4.のように編集します。

    # vi auth.toml
    # vi brokerd.conf
    # vi configd.conf
    # vi intdashd.conf
    # vi measurementd.conf
    # vi media.toml
    
  4. 以下の個所にDBサーバーのPostgreSQLの接続情報を入力します。その後、設定ファイルを閉じます。

    • [attrdb] セクション

    password = "POSTGRESQL-INTDASH-USER-PASSWORD"
    address = "DB-SERVER-ADDRESS:5432"
    
    POSTGRESQL-INTDASH-USER-PASSWORD

    PostgreSQLデータベース接続ユーザーのパスワード

    DB-SERVER-ADDRESS

    DBサーバーのアドレス(ドメイン名またはIPアドレス)

  5. テキストエディターで以下の設定ファイルを開きます。

    # vi measurementd.conf
    
  6. 以下の個所に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アドレス)

  7. dataファイルの出力先を追加ボリュームにするために、テキストエディターで以下の設定ファイルを開きます。

    # vi measurementd.conf
    # vi mediad.toml
    
  8. 以下のようにそれぞれパス情報を書き換えます。

    • 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"   <--
    
  9. 出力先のフォルダを作成しておきます。

    # 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 の各マイクロサービス用のデータベースのマイグレーションを行います。

  1. 前の手順に引き続き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」)のパスワード。 任意の値を設定してください。

  2. 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
    
  3. 以下のコマンドを実行して設定を追加します。

    $ 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の各マイクロサービスを起動します。

  1. 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
    
  2. 各サービスを起動するために以下のコマンドを実行します。

    # 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
    
  3. 起動後、各サービスが正常に起動していることを確認します。

    # 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サーバーを設定します。

  1. SSHでintdashサーバーに接続し、設定ファイルのディレクトリに移動します。

    # cd /etc/intdash
    
  2. テキストエディターで設定ファイルを開きます。

    # vi authd.conf
    
  1. [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 = ""
    
  2. 設定を反映させるため、以下のコマンドでintdash-micro-authサービスを再起動します。

    # systemctl restart intdash-micro-auth
    
  3. 再起動後、intdash-micro-authが正常に起動していることを確認します。

    # systemctl status intdash-micro-auth
    

    正常に動作していれば Active: active (running) と表示されます。

3.4.2. 管理者ユーザーのメールアドレスを設定する

  1. ウェブブラウザーで https://intdash.example.com/users/me/ にアクセスします。

  2. サインイン画面が表示されたら、管理者ユーザー名 intdash と、さきほど設定したパスワード(INTDASH-USER-PASSWORD)でサインインします。

    ユーザー intdash のマイページが表示されます。

    ../_images/image36.ja.png

    図 2 マイページ

  3. [メールアドレス]をクリックして、管理者ユーザーのメールアドレスを入力し、[変更を保存]をクリックします。

    ../_images/image37.ja.png

    図 3 メールアドレスを設定

  1. 以下のメッセージが表示されます。メールアドレスが正しいことを確認し、[閉じる]をクリックします。

    ../_images/image44.ja.png

    図 4 メールアドレスを確認

    メールアドレス宛に確認メールが送信されます。

  2. お使いのメールクライアントで確認メールを開きます。

    メールに記載されているアクティベーション用URLにアクセスします。

    ../_images/image54.ja.png
  3. 再度、マイページの[メールアドレス]を開き、以下のように[認証済み]となっていれば設定は完了です。

    ../_images/image80.ja.png

    図 5 メールアドレス認証済み

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公式サイト を参照してください。

../_images/image71.png

図 6 Google Mapsビジュアルパーツ

Google MapsのAPIキーの設定は、intdashサーバーの設定用APIに管理者ユーザーとしてアクセスして行います。

  1. SSHでintdashサーバーに接続します。

  2. 下記のコマンドで、管理者ユーザーintdashのパスワードをシェル変数に設定します。

    # read -s PASSWORD
    <-- Enter the password and press <Enter>.
    
  3. 下記のコマンドで、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"
    
  4. 下記のコマンドで、前の手順でのレスポンスのJSONに含まれる access_token の値をシェル変数に設定します。

    # read -s ACCESS_TOKEN
    <-- Enter the access token and press <Enter>.
    
  5. 下記のコマンドで、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\"}"}'
    

以上で設定は完了です。 動作を確認する に進んでください。