7. Senju/QA アプリケーションサーバーの導入¶
Senju Quick Assistantを構成するアプリケーションサーバーのインストール手順について説明します。
7.1. Senju/QA データベースの初期化¶
7.1.1. Senju/QAデータベースの作成¶
インストールするサーバーに管理者権限を持つユーザーでログインします。
リストアなどによってSenju/QAのデータベースを再作成する場合は、既存のデータベースを削除します。
Windows
PS C:\> psql -U postgres -c 'DROP DATABASE "senjuqa";'
Linux
# psql -U postgres -c 'DROP DATABASE "senjuqa";'
注釈
新規インストールの場合はこの手順は不要です。
注釈
- 例として、
DATABASE
をsenjuqa
に指定していますが、実際はSenju/QAの設定ファイルに合わせてデータベース名を指定してください。 - Senju/QAの設定ファイルはアプリケーションサーバーの以下のパスに格納されます。Windows
C:\senjuqa\.env
Linux/opt/senjuqa/.env
- 例として、
- 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';"
注釈
パスワードは必要に応じて変更してください。
注釈
リストアの場合はこの手順は不要です。
- 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
- リストア時はSenju/QAの設定ファイルに合わせて
- Senju/QA用のデータベース
- 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;'
- Senju/QA用のデータベースのpublicスキーマのオーナーを
7.2. Senju/QA WEBアプリケーションのインストール¶
注釈
事前に Pythonの導入 を完了している必要があります。
7.2.1. 前提パッケージのインストール¶
インストールするサーバーに管理者権限のアカウントでログインします。
- 仮想環境を有効化します。
Windows
PS C:\> C:\senjuqa\venv\Scripts\activate.ps1
Linux
# source /opt/senjuqa/venv/bin/activate
以下のコマンドを実行し、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アプリケーションのインストール¶
以下のコマンドを実行し、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. プロジェクト作成の流れ¶
注釈
7.3.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 が生成されます。
プロジェクトの設定ファイルをデプロイします。
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. プロジェクトの設定¶
テンプレートファイルをコピーし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
WEBアプリケーションで使用する秘密鍵を生成します。
秘密鍵を生成します。
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'
- 設定ファイルに秘密鍵を記載します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
DJANGO_SECRET_KEY
に秘密鍵を記載します。DJANGO_SECRET_KEY=3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a
¶ 項目説明例DJANGO_SECRET_KEY秘密鍵3wk%s4b7^_(gr_(79a2g$1gue$abb$kn*!xn6+a1b_4omj2g6a
- Senju/QA アプリケーションサーバーからSenju/QA DBサーバーへの接続設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
DATABASE_URL
に接続情報を記載します。DATABASE_URL=postgres://[USER]:[PASSWORD]@[HOST]:[PORT]/[NAME]
¶ 項目説明例USERDBユーザー名senjuqauserPASSWORDDBユーザーパスワードsenjuqapwdHOSTDBサーバーのホスト名senjuqadbhostPORTDBサーバーのポート番号5432NAMEデータベース名senjuqadb
- Senju/QA アプリケーションサーバーのネットワーク設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
Senju/QA アプリケーションサーバーのホスト名を記載します。
ALLOWED_HOSTS=localhost,senjuqa01
¶ 項目説明例ALLOWED_HOSTSアプリケーションサーバーのホスト名複数のエイリアスが存在する場合、 , で区切って記載します。localhost,senjuqa01警告
HTTPのホスト・ヘッダー攻撃を防ぐための設定です。* は指定しないでください。Senju/QA アプリケーションサーバーのオリジンを記載します。
CORS_ALLOWED_ORIGINS=http://localhost,http://senjuqa01
¶ 項目説明例CORS_ALLOWED_ORIGINSアプリケーションサーバーのオリジン複数のオリジンが存在する場合、 , で区切って記載します。http://localhost,http://senjuqa01注釈
クライアントからの通信を許可するIPとポートを指定します。
- Senju/QA ビルダ・Senju/QA 管理ポータルの認証で利用するJWT(JSON Web Token)の設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
- 以下の項目にJWTの設定を記載します。
ACCESS_TOKEN_LIFETIME=hours=1 REFRESH_TOKEN_LIFETIME=hours=8 FLUSH_EXPIRED_TOKEN_INTERVAL=hours=1
¶ 項目説明例ACCESS_TOKEN_LIFETIMEアクセストークンの有効期限hours=1REFRESH_TOKEN_LIFETIMEリフレッシュトークンの有効期限hours=8FLUSH_EXPIRED_TOKEN_INTERVAL有効期限切れのリフレッシュトークンをデータベースから物理削除する間隔hours=1
- Senju/QA ビルダ・Senju/QA ナビゲーターの1画面に表示する件数の設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
API_PAGE_SIZE
に1画面に表示する件数を記載します。API_PAGE_SIZE=10
¶ 項目説明例API_PAGE_SIZESenju/QA ビルダ・Senju/QA ナビゲーターの1画面に表示する件数10
- Senju/QA ナビゲーターの画面上部に表示されるカスタムメニューの設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
USE_CUSTOM_MENU
にカスタムメニューの利用有無を記載します。USE_CUSTOM_MENU=True
¶ 項目説明例USE_CUSTOM_MENUカスタムメニューの利用有無 (True: 利用する / False: 利用しない)True
- 以下の項目にカスタムメニューの設定を記載します。
CUSTOM_MENU_NAME=Requet CUSTOM_MENU_ITEMS=Google=https://google.co.jp,Yahoo=https://yahoo.co.jp
¶ 項目説明例CUSTOM_MENU_NAMEカスタムメニュー名:ボタン中に表示される名称ですRequetCUSTOM_MENU_ITEMSカスタムメニューボタンクリック時に展開されるアイテム一覧(表示名=URL)を , で区切って記載しますGoogle=https://google.co.jp,Yahoo=https://yahoo.co.jp
- Senju/QA アプリケーションサーバーからSenju/QA 全文検索サーバーへの接続設定を変更します。
- 対象ファイル:
Windows
C:\senjuqa\.env
Linux
/opt/senjuqa/.env
USE_ELASTICSEARCH
にElasticsearchの利用有無を記載します。USE_ELASTICSEARCH=True
¶ 項目説明例USE_ELASTICSEARCHElasticsearchの利用有無 (True: 利用する / False: 利用しない)True警告
True (利用する) に設定した場合、Elasticsearchの導入 を必ず実施してください。実施しない場合、Senju/QA ナビゲーターで検索を行うとエラーが発生するようになります。
- 以下の項目にElasticsearchの設定を記載します。
ELASTICSEARCH_INDEX=senjuqa_pages ELASTICSEARCH_HOSTS=localhost:9200 ELASTICSEARCH_HIGHLIGHT_FRAGMENT_SIZE=100 ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS=3
¶ 項目説明例ELASTICSEARCH_INDEXElasticsearchのインデックス名senjuqa_pagesELASTICSEARCH_HOSTSElasticsearchのホスト名・ポート番号localhost:9200ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS検索結果をハイライト表示する際のフラグメントの文字数100ELASTICSEARCH_HIGHLIGHT_NUMBER_OF_FRAGMENTS検索結果をハイライト表示する際のフラグメントの最大数3
7.3.1.3. データベースのマイグレーション¶
データベースのマイグレーションを行います。
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. 管理者ユーザーの作成¶
- 管理者ユーザーを作成します。
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. 静的ファイルの収集¶
- 静的ファイルを収集します。
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対応¶
Windows
- 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"
- 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
- 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
- uWSGIの起動オプションの定義ファイル
- uWSGIをシステムレベルでインストールします。
(venv) # deactivate # pip3.9 install /tmp/Senju_Quick_Assistant/libs/linux/uWSGI-*.tar.gz
- uWSGIを起動用のユーザー
senjuqa
を作成します。 # adduser senjuqa
- uWSGIを起動用のユーザー
- uWSGIのログを格納用のディレクトリを作成し、ユーザー・グループを
senjuqa
に指定します。 # mkdir -p /var/log/senjuqa
- uWSGIのログを格納用のディレクトリを作成し、ユーザー・グループを
- uWSGIのログファイルの自動ローテーションのためのlogrotate定義ファイルを新規に作成します。
# echo '/var/log/senjuqa/senjuqa.log { daily rotate 60 missingok dateext compress notifempty copytruncate } ' >/etc/logrotate.d/senjuqa
- 各種関連ディレクトリのオーナー・グループを
senjuqa
ユーザーに変更します。 # chown senjuqa:senjuqa -R /opt/senjuqa # chown senjuqa:senjuqa -R /var/log/senjuqa
- 各種関連ディレクトリのオーナー・グループを
- 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
- 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
- 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
- uWSGIのサービス定義ファイル
- ファイルに実行権限を与えます。
# chmod 644 /etc/systemd/system/senjuqa-uwsgi.service
- uWSGIサービスを有効化します。
# systemctl daemon-reload # systemctl enable senjuqa-uwsgi
7.4.2. システムの起動¶
全ての設定が終わったらシステムを起動してください。
Windows
- Apacheサービスを開始します。
PS C:\> Start-Service -Name 'Apache2.4'
注釈
Windows管理ツール[サービス]から開始することもできます。Apache2.4
を右クリックし、コンテキストメニューの[開始]をクリックします。
Linux
- uWSGIサービスを開始します。
# systemctl start senjuqa-uwsgi
注釈
7.5. サインイン確認¶
WEBブラウザにてSenju/QAにサインインできることを確認します。
7.5.1. Senju/QA ビルダ¶
サインインページの表示
HTTPを利用する場合はhttp://<ホスト名>:<ポート番号>/qabuilder/login/
に、HTTPSを利用する場合はhttps://<ホスト名>:<ポート番号>/qabuilder/login/
にWEBブラウザでアクセスし、Senju/QA ビルダのサインインページが参照できることを確認してください。- Usernameに
admin
、Passwordに12345678
を入力して サインイン ボタンをクリックすると、サインインに成功しページ一覧画面が表示されることを確認してください。 -
注釈
初期アカウントの
admin
は、パスワードを変更するか、適切な管理ユーザーを作成した後に無効としてください。注釈
- WEBサーバー(Apache, Nginx)を起動してから、Senju/QA ビルダのサインイン画面にアクセスできるまで時間がかかる場合があります。
- サインイン画面にアクセスできない場合はしばらく時間が経ってから再度試してください。
- Usernameに
7.5.2. Senju/QA 管理ポータル¶
ログインページの表示
HTTPを利用する場合はhttp://<ホスト名>:<ポート番号>/admin/login/
に、HTTPSを利用する場合はhttps://<ホスト名>:<ポート番号>/admin/login/
にWEBブラウザでアクセスし、Senju/QA 管理ポータルのログインページが参照できることを確認してください。- ユーザー名に
admin
、パスワードに12345678
を入力して ログイン ボタンをクリックすると、ログインに成功しホーム画面が表示されることを確認してください。 -
注釈
初期アカウントの
admin
は、パスワードを変更するか、適切な管理ユーザーを作成した後に無効としてください。注釈
- WEBサーバー(Apache, Nginx)を起動してから、Senju/QA 管理ポータルのログイン画面にアクセスできるまで時間がかかる場合があります。
- ログイン画面にアクセスできない場合はしばらく時間が経ってから再度試してください。
- ユーザー名に