サーバー環境構築
概要
nizika_ai はニジカ AI 関連の共通 code を提供する repository である。
この repository 自体を独立した systemd service として起動するものではない。
主に以下から利用される。
nizika_ai_servicenizika_broadcast
1. セキュリティ方針
DB password、OpenAI API key 等の秘密情報を repository 内へ保存しない。
旧サーバーから秘密情報入り設定ファイルをそのままコピーしない。
アプリケーションから MySQL の root user は使用しない。
2. database
nizika_ai DB への接続には専用 MySQL user を使用する。
environment variable:
NIZIKA_AI_MYSQL_USER
NIZIKA_AI_MYSQL_PASS
例:
CREATE USER 'nizika_ai_app'@'localhost'
IDENTIFIED BY 'NEW_RANDOM_PASSWORD';
GRANT ALL PRIVILEGES
ON nizika_ai.*
TO 'nizika_ai_app'@'localhost';
3. OpenAI credential
OpenAI credential は environment variable から取得する。
使用する variable:
OPENAI_API_KEY
OPENAI_ORGANISATION
例:
import os
OPENAI_ORGANISATION: str = os.environ['OPENAI_ORGANISATION']
OPENAI_API_KEY: str = os.environ['OPENAI_API_KEY']
4. Python environment
本番では nizika_ai_service と同じ system Python を使用する。
今回の環境:
Ubuntu 26.04 LTS
Python 3.14
主要 package:
openai==1.43.0
httpx==0.27.2
eloquent==0.5
mysqlclient==2.2.8
requests==2.32.5
simplejson
install 前:
umask 022
5. HTTPX の version
OpenAI Python library 1.43.0 と組み合わせる場合:
httpx==0.27.2
を使用する。
HTTPX 0.28 系では OpenAI 1.43.0 と互換性問題が発生する。
6. Python package permission
system-wide pip を使う場合、umask 077 のまま install しない。
誤って root のみ読み取り可能になった場合:
chmod -R a+rX \
/usr/local/lib/python3.14/dist-packages
確認:
find /usr/local/lib/python3.14/dist-packages \
-type d ! -perm -005 -o -type f ! -perm -004 \
-print \
| head
7. 利用側の environment file
nizika_ai_service から利用する場合:
/etc/nizika-ai-service.env
例:
NIZIKA_AI_MYSQL_USER=...
NIZIKA_AI_MYSQL_PASS=...
OPENAI_API_KEY=...
OPENAI_ORGANISATION=...
nizika_broadcast から利用する場合:
/etc/nizika-broadcast.env
例:
NIZIKA_AI_MYSQL_USER=...
NIZIKA_AI_MYSQL_PASS=...
秘密値は Git に commit しない。
8. 動作確認
利用する service user から import と DB 接続を確認する。
秘密値そのものは標準出力へ表示しない。
例:
python3 - <<'PY'
import openai
import httpx
import eloquent
import MySQLdb
print("openai:", openai.__file__)
print("httpx:", httpx.__file__)
print("eloquent:", eloquent.__file__)
print("MySQLdb:", MySQLdb.__file__)
PY
9. systemd
nizika_ai 自体には独立した systemd unit を作成しない。
常駐処理は:
nizika-ai-service.service
が担当する。
放送処理側では:
nizika_broadcast.service
から利用される。
10. 関連リポジトリ
nizika_ai_service
nizika_ai を利用して AI 常駐処理を行う。
nizika_broadcast
放送処理から nizika_ai の DB や共通 code を利用する場合がある。
nizika_nico
共通データやニコニコ関連処理として併用される。