7. Senju/QA アプリケーションサーバーの導入

Senju Quick Assistantを構成するアプリケーションサーバーのインストール手順について説明します。

7.1. Senju/QA データベースの初期化

7.1.1. Senju/QAデータベースの作成

  1. インストールするサーバーに管理者権限を持つユーザーでログインします。

  2. リストアなどによってSenju/QAのデータベースを再作成する場合は、既存のデータベースを削除します。

    Windows

    PS C:\> psql -U postgres -c 'DROP DATABASE "senjuqa";'
    

    Linux

    # psql -U postgres -c 'DROP DATABASE "senjuqa";'
    

    注釈

    新規インストールの場合はこの手順は不要です。

    注釈

    例として、DATABASEsenjuqa に指定していますが、実際はSenju/QAの設定ファイルに合わせてデータベース名を指定してください。
    Senju/QAの設定ファイルはアプリケーションサーバーの以下のパスに格納されます。
    Windows
    C:\senjuqa\.env
    Linux
    /opt/senjuqa/.env
  3. Senju/QA用のデータベースユーザーを作成します。

    ここで例として、ユーザー名を senjuqa に、パスワードを qapass に指定してユーザーを作成します。

    Windows

    PS C:\> psql -U postgres -c "CREATE USER `"senjuqa`" WITH PASSWORD 'qapass';"
    

    Linux

    # psql -U postgres -c "CREATE USER \"senjuqa\" WITH PASSWORD 'qapass';"
    

    注釈

    パスワードは必要に応じて変更してください。

    注釈

    リストアの場合はこの手順は不要です。

  4. Senju/QA用のデータベース senjuqa を作成し、データベースのオーナーを senjuqa ユーザーに指定します。

    Windows

    PS C:\> psql -U postgres -c 'CREATE DATABASE "senjuqa" OWNER "senjuqa";'
    

    Linux

    # psql -U postgres -c 'CREATE DATABASE "senjuqa" OWNER "senjuqa";'
    

    注釈

    リストア時はSenju/QAの設定ファイルに合わせて DATABASE および OWNER を指定してください。
    Senju/QAの設定ファイルはアプリケーションサーバーの以下のパスに格納されます。
    Windows
    C:\senjuqa\.env
    Linux
    /opt/senjuqa/.env
  5. Senju/QA用のデータベースのpublicスキーマのオーナーを senjuqa ユーザーに変更します。

    Windows

    PS C:\> psql -U postgres -d senjuqa -c 'ALTER SCHEMA public OWNER TO senjuqa;'
    

    Linux

    # psql -U postgres -d senjuqa -c 'ALTER SCHEMA public OWNER TO senjuqa;'
    

7.2. Senju/QA WEBアプリケーションのインストール

注釈

事前に Pythonの導入 を完了している必要があります。

7.2.1. 前提パッケージのインストール

  1. インストールするサーバーに管理者権限のアカウントでログインします。

  2. 仮想環境を有効化します。

    Windows

    PS C:\> C:\senjuqa\venv\Scripts\activate.ps1
    

    Linux

    # source /opt/senjuqa/venv/bin/activate
    
  3. 以下のコマンドを実行し、Pythonパッケージをインストールします。

    Windows

    (venv) PS C:\> pip install --no-index --find-links C:\Temp\Senju_Quick_Assistant\libs\windows -r C:\Temp\Senju_Quick_Assistant\requirements_windows.txt
    

    Linux

    (venv) # pip3.9 install --no-index --find-links /tmp/Senju_Quick_Assistant/libs/linux -r /tmp/Senju_Quick_Assistant/requirements_linux.txt
    

7.2.2. Senju/QA WEBアプリケーションのインストール

Senju/QA WEBアプリケーションはPythonパッケージとして提供されています。
Pythonのパッケージングコマンドを利用しインストールします。
  1. 以下のコマンドを実行し、Pythonパッケージをインストールします。

    Windows

    (venv) PS C:\> pip install C:\Temp\Senju_Quick_Assistant\django_senjuqa_backend-1.0.0+2022.0.0-py3-none-any.whl
    (venv) PS C:\> pip install C:\Temp\Senju_Quick_Assistant\django_senjuqa_builder-1.0.0+2022.0.0-py3-none-any.whl
    (venv) PS C:\> pip install C:\Temp\Senju_Quick_Assistant\django_senjuqa_navigator-1.0.0+2022.0.0-py3-none-any.whl
    

    Linux

    (venv) # pip3.9 install /tmp/Senju_Quick_Assistant/django_senjuqa_backend-1.0.0+2022.0.0-py3-none-any.whl
    (venv) # pip3.9 install /tmp/Senju_Quick_Assistant/django_senjuqa_builder-1.0.0+2022.0.0-py3-none-any.whl
    (venv) # pip3.9 install /tmp/Senju_Quick_Assistant/django_senjuqa_navigator-1.0.0+2022.0.0-py3-none-any.whl
    

7.3. プロジェクトの作成

Senju/QA WEBサーバーでは、WEBアプリケーションをプロジェクトという単位で管理します。

7.3.1. プロジェクト作成の流れ

注釈

事前に PostgreSQLの導入 を完了している必要があります。
事前に Apache, Nginxの導入 を完了している必要があります。
事前に Senju/QA WEBアプリケーションのインストール を完了している必要があります。

7.3.1.1. プロジェクトの作成

  1. プロジェクトを作成します。

    Windows

    (venv) PS C:\> cd C:\senjuqa
    (venv) PS C:\senjuqa> django-admin startproject config .
    

    Linux

    (venv) # cd /opt/senjuqa
    (venv) # django-admin startproject config .
    

    注釈

    config フォルダ、manage.py が生成されます。

  2. プロジェクトの設定ファイルをデプロイします。

    Windows

    (venv) PS C:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\conf\senjuqa\settings.py -Destination C:\senjuqa\config\
    (venv) PS C:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\conf\senjuqa\urls.py -Destination C:\senjuqa\config\
    

    Linux

    (venv) # \cp -f /tmp/Senju_Quick_Assistant/conf/senjuqa/settings.py /opt/senjuqa/config/
    (venv) # \cp -f /tmp/Senju_Quick_Assistant/conf/senjuqa/urls.py /opt/senjuqa/config/
    

7.3.1.2. プロジェクトの設定

  1. テンプレートファイルをコピーしWEBアプリケーション設定ファイルを作成します。

    Windows

    (venv) PS C:\> Copy-Item -Path C:\Temp\Senju_Quick_Assistant\.env.template -Destination C:\senjuqa\.env
    

    Linux

    (venv) # \cp -f /tmp/Senju_Quick_Assistant/.env.template /opt/senjuqa/.env
    
  2. WEBアプリケーションで使用する秘密鍵を生成します。

    1. 秘密鍵を生成します。

      Windows

      (venv) PS C:\senjuqa> python .\manage.py shell
      Type "help", "copyright", "credits" or "license" for more information.
      (InteractiveConsole)
      >>> from django.core.management.utils import get_random_secret_key
      >>> get_random_secret_key()
      '3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a'
      

      Linux

      (venv) # python3.9 manage.py shell
      Type "help", "copyright", "credits" or "license" for more information.
      (InteractiveConsole)
      >>> from django.core.management.utils import get_random_secret_key
      >>> get_random_secret_key()
      '3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a'
      
    2. 設定ファイルに秘密鍵を記載します。
      対象ファイル:
      • Windows

        • C:\senjuqa\.env

      • Linux

        • /opt/senjuqa/.env

      1. DJANGO_SECRET_KEY に秘密鍵を記載します。
        DJANGO_SECRET_KEY=3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a
        
        表 7.1 秘密鍵
        項目
        説明
        DJANGO_SECRET_KEY
        秘密鍵
        3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a
  3. Senju/QA アプリケーションサーバーからSenju/QA DBサーバーへの接続設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. DATABASE_URL に接続情報を記載します。
      DATABASE_URL=postgres://[USER]:[PASSWORD]@[HOST]:[PORT]/[NAME]
      
      表 7.2 DBサーバーへの接続設定
      項目
      説明
      USER
      DBユーザー名
      senjuqauser
      PASSWORD
      DBユーザーパスワード
      senjuqapwd
      HOST
      DBサーバーのホスト名
      senjuqadbhost
      PORT
      DBサーバーのポート番号
      5432
      NAME
      データベース名
      senjuqadb
  4. Senju/QA アプリケーションサーバーのネットワーク設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. Senju/QA アプリケーションサーバーのホスト名を記載します。

      ALLOWED_HOSTS=localhost,senjuqa01
      
      表 7.3 アプリケーションサーバーのホスト名
      項目
      説明
      ALLOWED_HOSTS
      アプリケーションサーバーのホスト名
      複数のエイリアスが存在する場合、 , で区切って記載します。
      localhost,senjuqa01

      警告

      HTTPのホスト・ヘッダー攻撃を防ぐための設定です。
      * は指定しないでください。
    2. Senju/QA アプリケーションサーバーのオリジンを記載します。

      CORS_ALLOWED_ORIGINS=http://localhost,http://senjuqa01
      
      表 7.4 アプリケーションサーバーのオリジン
      項目
      説明
      CORS_ALLOWED_ORIGINS
      アプリケーションサーバーのオリジン
      複数のオリジンが存在する場合、 , で区切って記載します。
      http://localhost,http://senjuqa01

      注釈

      クライアントからの通信を許可するIPとポートを指定します。

  5. Senju/QA ビルダ・Senju/QA 管理ポータルの認証で利用するJWT(JSON Web Token)の設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. 以下の項目にJWTの設定を記載します。
      ACCESS_TOKEN_LIFETIME=hours=1
      REFRESH_TOKEN_LIFETIME=hours=8
      FLUSH_EXPIRED_TOKEN_INTERVAL=hours=1
      
      表 7.5 JWTの設定
      項目
      説明
      ACCESS_TOKEN_LIFETIME
      アクセストークンの有効期限
      hours=1
      REFRESH_TOKEN_LIFETIME
      リフレッシュトークンの有効期限
      hours=8
      FLUSH_EXPIRED_TOKEN_INTERVAL
      有効期限切れのリフレッシュトークンをデータベースから物理削除する間隔
      hours=1
  6. Senju/QA ビルダ・Senju/QA ナビゲーターの1画面に表示する件数の設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. API_PAGE_SIZE に1画面に表示する件数を記載します。
      API_PAGE_SIZE=10
      
      表 7.6 1画面に表示する件数
      項目
      説明
      API_PAGE_SIZE
      Senju/QA ビルダ・Senju/QA ナビゲーターの1画面に表示する件数
      10
  7. Senju/QA ナビゲーターの画面上部に表示されるカスタムメニューの設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. USE_CUSTOM_MENU にカスタムメニューの利用有無を記載します。
      USE_CUSTOM_MENU=True
      
      表 7.7 カスタムメニューの利用有無
      項目
      説明
      USE_CUSTOM_MENU
      カスタムメニューの利用有無 (True: 利用する / False: 利用しない)
      True
    2. 以下の項目にカスタムメニューの設定を記載します。
      CUSTOM_MENU_NAME=Requet
      CUSTOM_MENU_ITEMS=Google=https://google.co.jp,Yahoo=https://yahoo.co.jp
      
      表 7.8 カスタムメニューの設定
      項目
      説明
      CUSTOM_MENU_NAME
      カスタムメニュー名:ボタン中に表示される名称です
      Requet
      CUSTOM_MENU_ITEMS
      カスタムメニューボタンクリック時に展開されるアイテム一覧
      (表示名=URL)を , で区切って記載します
      Google=https://google.co.jp,Yahoo=https://yahoo.co.jp
  8. Senju/QA アプリケーションサーバーからSenju/QA 全文検索サーバーへの接続設定を変更します。
    対象ファイル:
    • Windows

      • C:\senjuqa\.env

    • Linux

      • /opt/senjuqa/.env

    1. USE_ELASTICSEARCH にElasticsearchの利用有無を記載します。
      USE_ELASTICSEARCH=True
      
      表 7.9 Elasticsearchの利用有無
      項目
      説明
      USE_ELASTICSEARCH
      Elasticsearchの利用有無 (True: 利用する / False: 利用しない)
      True

      警告

      True (利用する) に設定した場合、Elasticsearchの導入 を必ず実施してください。
      実施しない場合、Senju/QA ナビゲーターで検索を行うとエラーが発生するようになります。
    2. 以下の項目にElasticsearchの設定を記載します。
      ELASTICSEARCH_INDEX=senjuqa_pages
      ELASTICSEARCH_HOSTS=localhost:9200
      ELASTICSEARCH_HIGHLIGHT_FRAGMENT_SIZE=100
      ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS=3
      
      表 7.10 Elasticsearchの設定
      項目
      説明
      ELASTICSEARCH_INDEX
      Elasticsearchのインデックス名
      senjuqa_pages
      ELASTICSEARCH_HOSTS
      Elasticsearchのホスト名・ポート番号
      localhost:9200
      ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS
      検索結果をハイライト表示する際のフラグメントの文字数
      100
      ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS
      検索結果をハイライト表示する際のフラグメントの最大数
      3

7.3.1.3. データベースのマイグレーション

  1. データベースのマイグレーションを行います。

    Windows

    (venv) PS C:\> cd C:\senjuqa>
    (venv) PS C:\senjuqa> python .\manage.py makemigrations
    (venv) PS C:\senjuqa> python .\manage.py migrate
    

    Linux

    (venv) # cd /opt/senjuqa
    (venv) # python3.9 manage.py makemigrations
    (venv) # python3.9 manage.py migrate
    

    注釈

    アプリケーションが使用するデータベースの定義を自動的に作成する操作です。

7.3.1.4. 管理者ユーザーの作成

  1. 管理者ユーザーを作成します。

    Windows

    (venv) PS C:\senjuqa> python .\manage.py createsuperuser
    ユーザー名: admin
    メールアドレス:
    Password:
    Password (again):
    Superuser created successfully.
    

    Linux

    (venv) # python3.9 manage.py createsuperuser
    ユーザー名: admin
    メールアドレス:
    Password:
    Password (again):
    Superuser created successfully.
    

    注釈

    Senju/QA ビルダ、Senju/QA 管理ポータルにサインイン可能な管理者ユーザーを作成します。

    注釈

    Senju/QA ビルダにログインする際、8文字以上のパスワードが求められます。
    8文字以上のパスワードを設定してください。
    例) 12345678

    警告

    この手順を実施しないとSenju/QA ビルダ、Senju/QA 管理ポータルにサインインすることができません。

7.3.1.5. 静的ファイルの収集

  1. 静的ファイルを収集します。

    Windows

    (venv) PS C:\senjuqa> python .\manage.py collectstatic
    

    Linux

    (venv) # python3.9 manage.py collectstatic
    

    注釈

    静的ファイルを1か所に収集しWEBサーバー側で管理させるために行います。

    注釈

    manage.py と同じ階層に static というフォルダが生成され、static フォルダ配下に静的ファイルが収集されます。

    警告

    この手順を実施しないとSenju/QAサイトのレイアウトが崩れたり、一部の機能が利用できなくなる可能性があります。

7.4. Senju/QA WEBアプリケーションのデプロイ

注釈

事前に Apache, Nginxの導入 を完了している必要があります。

注釈

事前に Senju/QA WEBアプリケーションのインストール を完了している必要があります。

7.4.1. WEBサーバーとWEBアプリケーションの接続設定

7.4.1.1. WEBサーバーのWSGI対応

WEBサーバーとPythonで作成されたWEBアプリケーションを接続するため、WEBサーバーのWSGI(Web Server Gateway Interface)対応を実施します。

Windows

  1. mod_wsgi-express コマンドを実行します。
    (venv) PS C:\> mod_wsgi-express module-config
    LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python39/python39.dll"
    LoadModule wsgi_module "c:/senjuqa/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
    WSGIPythonHome "c:/senjuqa/venv"
    
  2. Apacheの設定ファイルにコマンドの実行結果を貼り付けます。
    対象ファイル:
    • C:\Apache24\conf\httpd.conf

    LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python39/python39.dll"
    LoadModule wsgi_module "c:/senjuqa/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
    WSGIPythonHome "c:/senjuqa/venv"
    

    注釈

    SSL通信を行う場合は、ApacheのSSL設定ファイルにコマンドの実行結果を貼り付けてください。
    C:\Apache24\conf\extra\httpd-ssl.conf

Linux

  1. uWSGIの起動オプションの定義ファイル /opt/senjuqa/senjuqa-uwsgi.ini を以下のように作成します。
    [uwsgi]
    chdir           = /opt/senjuqa/
    home            = /opt/senjuqa/venv
    module          = config.wsgi:application
    master          = true
    processes       = 10
    socket          = /opt/senjuqa/senjuqa.sock
    chmod-socket    = 666
    vacuum          = true
    enable-threads  = true
    logto           = /var/log/senjuqa/senjuqa.log
    
  2. uWSGIをシステムレベルでインストールします。
    (venv) # deactivate
    # pip3.9 install /tmp/Senju_Quick_Assistant/libs/linux/uWSGI-*.tar.gz
    
  3. uWSGIを起動用のユーザー senjuqa を作成します。
    # adduser senjuqa
    
  4. uWSGIのログを格納用のディレクトリを作成し、ユーザー・グループを senjuqa に指定します。
    # mkdir -p /var/log/senjuqa
    
  5. uWSGIのログファイルの自動ローテーションのためのlogrotate定義ファイルを新規に作成します。
    # echo '/var/log/senjuqa/senjuqa.log {
    daily
    rotate 60
    missingok
    dateext
    compress
    notifempty
    copytruncate
    }
    ' >/etc/logrotate.d/senjuqa
    
  6. 各種関連ディレクトリのオーナー・グループを senjuqa ユーザーに変更します。
    # chown senjuqa:senjuqa -R /opt/senjuqa
    # chown senjuqa:senjuqa -R /var/log/senjuqa
    
  7. Nginxのwsgi機能が動作するように、SELinuxの設定を変更します。
    # semanage fcontext -a -t httpd_var_run_t /opt/senjuqa
    # restorecon -RF /opt/senjuqa
    

7.4.1.2. WEBアプリケーションの起動スクリプト登録

WEBサーバー起動時に実行されるWEBアプリケーションの起動スクリプトを登録します。

Windows

  1. Apacheの設定ファイルに以下の内容を追記します。
    対象ファイル:
    • C:\Apache24\conf\httpd.conf

    WSGIScriptAlias / C:/senjuqa/config/wsgi.py application-group=%{GLOBAL}
    WSGIPythonPath C:/senjuqa
    
    <Directory C:/senjuqa/config>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    <Directory C:/senjuqa/static>
        Require all granted
    </Directory>
    
    Alias /static/ C:/senjuqa/static/
    
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    

    注釈

    SSL通信を行う場合は、ApacheのSSL設定ファイルに内容を追記してください。
    C:\Apache24\conf\extra\httpd-ssl.conf

Linux

  1. uWSGIのサービス定義ファイル /etc/systemd/system/senjuqa-uwsgi.service を以下のように作成します。
    [Unit]
    Description=Senju Quick Assistant
    After=syslog.target
    
    [Service]
    User=senjuqa
    Group=senjuqa
    RuntimeDirectory=senjuqa
    Restart=always
    KillSignal=SIGQUIT
    Type=notify
    StandardError=syslog
    NotifyAccess=all
    ExecStart=uwsgi --ini /opt/senjuqa/senjuqa-uwsgi.ini
    
    [Install]
    WantedBy=multi-user.target
    
  1. ファイルに実行権限を与えます。
    # chmod 644 /etc/systemd/system/senjuqa-uwsgi.service
    
  2. uWSGIサービスを有効化します。
    # systemctl daemon-reload
    # systemctl enable senjuqa-uwsgi
    

7.4.2. システムの起動

全ての設定が終わったらシステムを起動してください。

Windows

  1. Apacheサービスを開始します。
    PS C:\> Start-Service -Name 'Apache2.4'
    

    注釈

    Windows管理ツール[サービス]から開始することもできます。
    Apache2.4 を右クリックし、コンテキストメニューの[開始]をクリックします。

Linux

  1. uWSGIサービスを開始します。
    # systemctl start senjuqa-uwsgi
    

注釈

Senju/QA アプリケーションサーバーの起動は接続するSenju/QA DBサーバーが起動しており接続に成功する状態である必要があります。
起動前にSenju/QA DBサーバーの導入が完了しており、PostgreSQLのサービスが起動していることを確認して下さい。

7.5. サインイン確認

WEBブラウザにてSenju/QAにサインインできることを確認します。

7.5.1. Senju/QA ビルダ

  1. サインインページの表示

    HTTPを利用する場合は http://<ホスト名>:<ポート番号>/qabuilder/login/ に、HTTPSを利用する場合は https://<ホスト名>:<ポート番号>/qabuilder/login/ にWEBブラウザでアクセスし、
    Senju/QA ビルダのサインインページが参照できることを確認してください。
    _images/builder_loginpage.jpg
  2. Usernameに admin 、Passwordに 12345678 を入力して サインイン ボタンをクリックすると、サインインに成功しページ一覧画面が表示されることを確認してください。
    _images/builder_toppage.jpg

    注釈

    初期アカウントの admin は、パスワードを変更するか、適切な管理ユーザーを作成した後に無効としてください。

    注釈

    WEBサーバー(Apache, Nginx)を起動してから、Senju/QA ビルダのサインイン画面にアクセスできるまで時間がかかる場合があります。
    サインイン画面にアクセスできない場合はしばらく時間が経ってから再度試してください。

7.5.2. Senju/QA 管理ポータル

  1. ログインページの表示

    HTTPを利用する場合は http://<ホスト名>:<ポート番号>/admin/login/ に、HTTPSを利用する場合は https://<ホスト名>:<ポート番号>/admin/login/ にWEBブラウザでアクセスし、
    Senju/QA 管理ポータルのログインページが参照できることを確認してください。
    _images/portal_loginpage.jpg
  2. ユーザー名に admin 、パスワードに 12345678 を入力して ログイン ボタンをクリックすると、ログインに成功しホーム画面が表示されることを確認してください。
    _images/portal_toppage.jpg

    注釈

    初期アカウントの admin は、パスワードを変更するか、適切な管理ユーザーを作成した後に無効としてください。

    注釈

    WEBサーバー(Apache, Nginx)を起動してから、Senju/QA 管理ポータルのログイン画面にアクセスできるまで時間がかかる場合があります。
    ログイン画面にアクセスできない場合はしばらく時間が経ってから再度試してください。