1
環境構築手順
みてるぞ が 2026-09-06 20:29:18 +09:00 にこのページを編集

サーバー環境構築

概要

nizika_ai はニジカ AI 関連の共通 code を提供する repository である。

この repository 自体を独立した systemd service として起動するものではない。

主に以下から利用される。

  • nizika_ai_service
  • nizika_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

共通データやニコニコ関連処理として併用される。