環境構築手順 を追加
@@ -0,0 +1,231 @@
|
||||
# サーバー環境構築
|
||||
|
||||
## 概要
|
||||
|
||||
`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:
|
||||
|
||||
```text
|
||||
NIZIKA_AI_MYSQL_USER
|
||||
NIZIKA_AI_MYSQL_PASS
|
||||
```
|
||||
|
||||
例:
|
||||
|
||||
```sql
|
||||
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:
|
||||
|
||||
```text
|
||||
OPENAI_API_KEY
|
||||
OPENAI_ORGANISATION
|
||||
```
|
||||
|
||||
例:
|
||||
|
||||
```python
|
||||
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 を使用する。
|
||||
|
||||
今回の環境:
|
||||
|
||||
```text
|
||||
Ubuntu 26.04 LTS
|
||||
Python 3.14
|
||||
```
|
||||
|
||||
主要 package:
|
||||
|
||||
```text
|
||||
openai==1.43.0
|
||||
httpx==0.27.2
|
||||
eloquent==0.5
|
||||
mysqlclient==2.2.8
|
||||
requests==2.32.5
|
||||
simplejson
|
||||
```
|
||||
|
||||
install 前:
|
||||
|
||||
```bash
|
||||
umask 022
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 5. HTTPX の version
|
||||
|
||||
OpenAI Python library 1.43.0 と組み合わせる場合:
|
||||
|
||||
```text
|
||||
httpx==0.27.2
|
||||
```
|
||||
|
||||
を使用する。
|
||||
|
||||
HTTPX 0.28 系では OpenAI 1.43.0 と互換性問題が発生する。
|
||||
|
||||
---
|
||||
|
||||
# 6. Python package permission
|
||||
|
||||
system-wide pip を使う場合、`umask 077` のまま install しない。
|
||||
|
||||
誤って root のみ読み取り可能になった場合:
|
||||
|
||||
```bash
|
||||
chmod -R a+rX \
|
||||
/usr/local/lib/python3.14/dist-packages
|
||||
```
|
||||
|
||||
確認:
|
||||
|
||||
```bash
|
||||
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` から利用する場合:
|
||||
|
||||
```text
|
||||
/etc/nizika-ai-service.env
|
||||
```
|
||||
|
||||
例:
|
||||
|
||||
```dotenv
|
||||
NIZIKA_AI_MYSQL_USER=...
|
||||
NIZIKA_AI_MYSQL_PASS=...
|
||||
|
||||
OPENAI_API_KEY=...
|
||||
OPENAI_ORGANISATION=...
|
||||
```
|
||||
|
||||
`nizika_broadcast` から利用する場合:
|
||||
|
||||
```text
|
||||
/etc/nizika-broadcast.env
|
||||
```
|
||||
|
||||
例:
|
||||
|
||||
```dotenv
|
||||
NIZIKA_AI_MYSQL_USER=...
|
||||
NIZIKA_AI_MYSQL_PASS=...
|
||||
```
|
||||
|
||||
秘密値は Git に commit しない。
|
||||
|
||||
---
|
||||
|
||||
# 8. 動作確認
|
||||
|
||||
利用する service user から import と DB 接続を確認する。
|
||||
|
||||
秘密値そのものは標準出力へ表示しない。
|
||||
|
||||
例:
|
||||
|
||||
```bash
|
||||
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 を作成しない。
|
||||
|
||||
常駐処理は:
|
||||
|
||||
```text
|
||||
nizika-ai-service.service
|
||||
```
|
||||
|
||||
が担当する。
|
||||
|
||||
放送処理側では:
|
||||
|
||||
```text
|
||||
nizika_broadcast.service
|
||||
```
|
||||
|
||||
から利用される。
|
||||
|
||||
---
|
||||
|
||||
# 10. 関連リポジトリ
|
||||
|
||||
## nizika_ai_service
|
||||
|
||||
`nizika_ai` を利用して AI 常駐処理を行う。
|
||||
|
||||
## nizika_broadcast
|
||||
|
||||
放送処理から `nizika_ai` の DB や共通 code を利用する場合がある。
|
||||
|
||||
## nizika_nico
|
||||
|
||||
共通データやニコニコ関連処理として併用される。
|
||||
新しいイシューから参照
ユーザーをブロックする