diff --git a/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86.md b/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86.md new file mode 100644 index 0000000..6f9c113 --- /dev/null +++ b/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86.md @@ -0,0 +1,233 @@ +# サーバー環境構築 + +## 概要 + +`nizika_nico` はニコニコ関連の共通処理や共通データを提供する repository である。 + +今回の本番環境では: + +```text +/opt/nizika-nico +``` + +へ配置する。 + +この repository 自体を独立した常駐 systemd daemon として起動する構成ではない。 + +主に以下から利用される。 + +- `nizika_ai_service` +- `nizika_broadcast` + +--- + +# 1. repository + +信頼できる Gitea の最新 `main` を取得する。 + +配置: + +```text +/opt/nizika-nico +``` + +旧サーバーの working tree、Python cache、秘密情報入り設定ファイルをそのままコピーしない。 + +--- + +# 2. database + +database: + +```text +nizika_nico +``` + +専用 MySQL user を作成する。 + +例: + +```sql +CREATE USER 'nizika_nico_app'@'localhost' +IDENTIFIED BY 'NEW_RANDOM_PASSWORD'; + +GRANT ALL PRIVILEGES +ON nizika_nico.* +TO 'nizika_nico_app'@'localhost'; +``` + +アプリから MySQL `root` は使用しない。 + +DB は信頼できる dump から復元する。 + +確認: + +```bash +mysql \ + -u nizika_nico_app \ + -p \ + -e 'USE nizika_nico; SHOW TABLES;' +``` + +--- + +# 3. environment variable + +利用する variable: + +```text +NIZIKA_NICO_MYSQL_USER +NIZIKA_NICO_MYSQL_PASS +NIZIKA_NICO_DIR +``` + +本番: + +```text +NIZIKA_NICO_DIR=/opt/nizika-nico +``` + +例: + +```dotenv +NIZIKA_NICO_MYSQL_USER=... +NIZIKA_NICO_MYSQL_PASS=... +NIZIKA_NICO_DIR=/opt/nizika-nico +``` + +--- + +# 4. 利用側 env + +`nizika_ai_service`: + +```text +/etc/nizika-ai-service.env +``` + +`nizika_broadcast`: + +```text +/etc/nizika-broadcast.env +``` + +それぞれに: + +```dotenv +NIZIKA_NICO_MYSQL_USER=... +NIZIKA_NICO_MYSQL_PASS=... +NIZIKA_NICO_DIR=/opt/nizika-nico +``` + +を設定する。 + +--- + +# 5. Python dependency + +この環境では主に以下を使用する。 + +```text +eloquent==0.5 +mysqlclient==2.2.8 +requests==2.32.5 +simplejson +``` + +system Python を使用する場合: + +```bash +umask 022 +``` + +を確認してから pip install する。 + +--- + +# 6. package permission + +service user から Python package が読めない場合: + +```bash +find /usr/local/lib/python3.14/dist-packages \ + -type d ! -perm -005 -o -type f ! -perm -004 \ + -print \ + | head +``` + +必要なら: + +```bash +chmod -R a+rX \ + /usr/local/lib/python3.14/dist-packages +``` + +--- + +# 7. repository permission + +利用する service user から repository 内を読み取れることを確認する。 + +例: + +```bash +namei -l \ + /opt/nizika-nico/get_kiriban_list.py +``` + +repository 自体を service user から不要に writable にしない。 + +--- + +# 8. 動作確認 + +`nizika_ai_service` から利用する場合: + +```bash +cd /opt/nizika-ai-service + +set -a +. /etc/nizika-ai-service.env +set +a +``` + +その状態で `nizika_nico` 内 script が正常に実行できることを確認する。 + +`nizika-ai-service.service` から: + +```text +/opt/nizika-nico/get_kiriban_list.py +``` + +等が子プロセスとして起動される場合がある。 + +--- + +# 9. systemd + +`nizika_nico` 自体の独立した systemd unit は作成しない。 + +実行主体は利用側 service。 + +例: + +```text +nizika-ai-service.service +nizika_broadcast.service +``` + +--- + +# 10. 関連リポジトリ + +## nizika_ai_service + +`nizika_nico` の共通処理や DB を利用する。 + +## nizika_broadcast + +放送処理から `nizika_nico` のデータや script を利用する。 + +## nizika_ai + +AI 関連処理と合わせて利用される。 \ No newline at end of file