mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-04 09:58:22 +08:00
7d58f56e49
- Add PostgreSQL + SQLite hybrid database support with automatic switching - Implement frontend AES-GCM + RSA-OAEP encryption for sensitive data - Add comprehensive DatabaseInterface with all required methods - Fix compilation issues with interface consistency - Update all database method signatures to use DatabaseInterface - Add missing UpdateTraderInitialBalance method to PostgreSQL implementation - Integrate RSA public key distribution via /api/config endpoint - Add frontend crypto service with proper error handling - Support graceful degradation between encrypted and plaintext transmission - Add directory creation for RSA keys and PEM parsing fixes - Test both SQLite and PostgreSQL modes successfully 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com>
473 lines
11 KiB
Markdown
473 lines
11 KiB
Markdown
# 🐳 Dockerワンクリックデプロイガイド
|
||
|
||
このガイドは、Dockerを使用してNOFX AIトレーディング競争システムを迅速にデプロイする方法を説明します。
|
||
|
||
## 📋 前提条件
|
||
|
||
開始する前に、システムに以下が必要です:
|
||
|
||
- **Docker**: バージョン20.10以上
|
||
- **Docker Compose**: バージョン2.0以上
|
||
|
||
### Dockerのインストール
|
||
|
||
#### macOS / Windows
|
||
[Docker Desktop](https://www.docker.com/products/docker-desktop/)をダウンロードしてインストール
|
||
|
||
#### Linux (Ubuntu/Debian)
|
||
|
||
> #### Docker Composeバージョンに関する注意
|
||
>
|
||
> **新規ユーザー推奨:**
|
||
> - **Docker Desktopを使用**: 最新のDocker Composeが自動的に含まれ、別途インストールは不要
|
||
> - シンプルなインストール、ワンクリックセットアップ、GUI管理を提供
|
||
> - macOS、Windows、一部のLinuxディストリビューションをサポート
|
||
>
|
||
> **既存ユーザー向け注意:**
|
||
> - **スタンドアロンdocker-composeの非推奨**: 独立したDocker Composeバイナリのダウンロードは推奨されません
|
||
> - **組み込みバージョンを使用**: Docker 20.10+には`docker compose`コマンド(スペース付き)が含まれています
|
||
> - 古い`docker-compose`をまだ使用している場合は、新しい構文にアップグレードしてください
|
||
|
||
*推奨:Docker Desktop(利用可能な場合)またはCompose組み込みのDocker CEを使用*
|
||
|
||
```bash
|
||
# Dockerをインストール(composeを含む)
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sudo sh get-docker.sh
|
||
|
||
# dockerグループにユーザーを追加
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
|
||
# インストールを確認(新しいコマンド)
|
||
docker --version
|
||
docker compose --version # Docker 24+にはこれが含まれており、別途インストール不要
|
||
```
|
||
|
||
## 🚀 クイックスタート(3ステップ)
|
||
|
||
### ステップ1:設定ファイルを準備
|
||
|
||
```bash
|
||
# 設定テンプレートをコピー
|
||
cp config.json.example config.json
|
||
|
||
# APIキーで設定ファイルを編集
|
||
nano config.json # または他のエディタを使用
|
||
```
|
||
|
||
**必須フィールド:**
|
||
```json
|
||
{
|
||
"traders": [
|
||
{
|
||
"id": "my_trader",
|
||
"name": "My AI Trader",
|
||
"ai_model": "deepseek",
|
||
"binance_api_key": "YOUR_BINANCE_API_KEY", // ← BinanceのAPIキー
|
||
"binance_secret_key": "YOUR_BINANCE_SECRET_KEY", // ← Binanceのシークレットキー
|
||
"deepseek_key": "YOUR_DEEPSEEK_API_KEY", // ← DeepSeekのAPIキー
|
||
"initial_balance": 1000.0,
|
||
"scan_interval_minutes": 3
|
||
}
|
||
],
|
||
"use_default_coins": true,
|
||
"api_server_port": 8080
|
||
}
|
||
```
|
||
|
||
### ステップ2:ワンクリック起動
|
||
|
||
```bash
|
||
# すべてのサービスをビルドして起動(初回実行)
|
||
docker compose up -d --build
|
||
|
||
# 以降の起動(リビルドなし)
|
||
docker compose up -d
|
||
```
|
||
|
||
**起動オプション:**
|
||
- `--build`: Dockerイメージをビルド(初回実行またはコード更新後に使用)
|
||
- `-d`: デタッチモードで実行(バックグラウンド)
|
||
|
||
### ステップ3:システムにアクセス
|
||
|
||
デプロイが完了したら、ブラウザを開いて以下にアクセス:
|
||
|
||
- **Webインターフェース**: http://localhost:3000
|
||
- **APIヘルスチェック**: http://localhost:8080/health
|
||
|
||
## 📊 サービス管理
|
||
|
||
### 実行状態を表示
|
||
|
||
```bash
|
||
# すべてのコンテナステータスを表示
|
||
docker compose ps
|
||
|
||
# サービスヘルスステータスを表示
|
||
docker compose ps --format json | jq
|
||
```
|
||
|
||
### ログを表示
|
||
|
||
```bash
|
||
# すべてのサービスログを表示
|
||
docker compose logs -f
|
||
|
||
# バックエンドログのみを表示
|
||
docker compose logs -f backend
|
||
|
||
# フロントエンドログのみを表示
|
||
docker compose logs -f frontend
|
||
|
||
# 最後の100行を表示
|
||
docker compose logs --tail=100
|
||
```
|
||
|
||
### サービスを停止
|
||
|
||
```bash
|
||
# すべてのサービスを停止(データを保持)
|
||
docker compose stop
|
||
|
||
# コンテナを停止して削除(データを保持)
|
||
docker compose down
|
||
|
||
# コンテナとボリュームを停止して削除(すべてのデータをクリア)
|
||
docker compose down -v
|
||
```
|
||
|
||
### サービスを再起動
|
||
|
||
```bash
|
||
# すべてのサービスを再起動
|
||
docker compose restart
|
||
|
||
# バックエンドのみを再起動
|
||
docker compose restart backend
|
||
|
||
# フロントエンドのみを再起動
|
||
docker compose restart frontend
|
||
```
|
||
|
||
### サービスを更新
|
||
|
||
```bash
|
||
# 最新のコードをプル
|
||
git pull
|
||
|
||
# リビルドして再起動
|
||
docker compose up -d --build
|
||
```
|
||
|
||
## 🔧 高度な設定
|
||
|
||
### ポートを変更
|
||
|
||
`docker-compose.yml`を編集してポートマッピングを変更:
|
||
|
||
```yaml
|
||
services:
|
||
backend:
|
||
ports:
|
||
- "8080:8080" # "your_port:8080"に変更
|
||
|
||
frontend:
|
||
ports:
|
||
- "3000:80" # "your_port:80"に変更
|
||
```
|
||
|
||
### リソース制限
|
||
|
||
`docker-compose.yml`にリソース制限を追加:
|
||
|
||
```yaml
|
||
services:
|
||
backend:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '2'
|
||
memory: 2G
|
||
reservations:
|
||
cpus: '1'
|
||
memory: 1G
|
||
```
|
||
|
||
### 環境変数
|
||
|
||
`.env`ファイルを作成して環境変数を管理:
|
||
|
||
```bash
|
||
# .env
|
||
TZ=Asia/Tokyo
|
||
BACKEND_PORT=8080
|
||
FRONTEND_PORT=3000
|
||
```
|
||
|
||
次に`docker-compose.yml`で使用:
|
||
|
||
```yaml
|
||
services:
|
||
backend:
|
||
ports:
|
||
- "${BACKEND_PORT}:8080"
|
||
```
|
||
|
||
## 📁 データの永続化
|
||
|
||
システムは自動的にデータをローカルディレクトリに永続化します:
|
||
|
||
- `./decision_logs/`: AI判断ログ
|
||
- `./coin_pool_cache/`: コインプールキャッシュ
|
||
- `./config.json`: 設定ファイル(マウント済み)
|
||
|
||
**データの場所:**
|
||
```bash
|
||
# データディレクトリを表示
|
||
ls -la decision_logs/
|
||
ls -la coin_pool_cache/
|
||
|
||
# データをバックアップ
|
||
tar -czf backup_$(date +%Y%m%d).tar.gz decision_logs/ coin_pool_cache/ config.json
|
||
|
||
# データを復元
|
||
tar -xzf backup_20241029.tar.gz
|
||
```
|
||
|
||
## 🐛 トラブルシューティング
|
||
|
||
### コンテナが起動しない
|
||
|
||
```bash
|
||
# 詳細なエラーメッセージを表示
|
||
docker compose logs backend
|
||
docker compose logs frontend
|
||
|
||
# コンテナステータスを確認
|
||
docker compose ps -a
|
||
|
||
# リビルド(キャッシュをクリア)
|
||
docker compose build --no-cache
|
||
```
|
||
|
||
### ポートが既に使用中
|
||
|
||
```bash
|
||
# ポートを使用しているプロセスを検索
|
||
lsof -i :8080 # バックエンドポート
|
||
lsof -i :3000 # フロントエンドポート
|
||
|
||
# プロセスを強制終了
|
||
kill -9 <PID>
|
||
```
|
||
|
||
### 設定ファイルが見つからない
|
||
|
||
```bash
|
||
# config.jsonが存在することを確認
|
||
ls -la config.json
|
||
|
||
# 存在しない場合、テンプレートをコピー
|
||
cp config.json.example config.json
|
||
```
|
||
|
||
### ヘルスチェックが失敗
|
||
|
||
```bash
|
||
# ヘルスステータスを確認
|
||
docker inspect nofx-backend | jq '.[0].State.Health'
|
||
docker inspect nofx-frontend | jq '.[0].State.Health'
|
||
|
||
# ヘルスエンドポイントを手動でテスト
|
||
curl http://localhost:8080/health
|
||
curl http://localhost:3000/health
|
||
```
|
||
|
||
### フロントエンドがバックエンドに接続できない
|
||
|
||
```bash
|
||
# ネットワーク接続を確認
|
||
docker compose exec frontend ping backend
|
||
|
||
# バックエンドサービスが実行中か確認
|
||
docker compose exec frontend wget -O- http://backend:8080/health
|
||
```
|
||
|
||
### Dockerリソースをクリーン
|
||
|
||
```bash
|
||
# 未使用のイメージをクリーン
|
||
docker image prune -a
|
||
|
||
# 未使用のボリュームをクリーン
|
||
docker volume prune
|
||
|
||
# すべての未使用リソースをクリーン(注意して使用)
|
||
docker system prune -a --volumes
|
||
```
|
||
|
||
## 🔐 セキュリティ推奨事項
|
||
|
||
1. **config.jsonをGitにコミットしない**
|
||
```bash
|
||
# config.jsonが.gitignoreに含まれていることを確認
|
||
echo "config.json" >> .gitignore
|
||
```
|
||
|
||
2. **機密データには環境変数を使用**
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
backend:
|
||
environment:
|
||
- BINANCE_API_KEY=${BINANCE_API_KEY}
|
||
- BINANCE_SECRET_KEY=${BINANCE_SECRET_KEY}
|
||
```
|
||
|
||
3. **APIアクセスを制限**
|
||
```yaml
|
||
# ローカルアクセスのみを許可
|
||
services:
|
||
backend:
|
||
ports:
|
||
- "127.0.0.1:8080:8080"
|
||
```
|
||
|
||
4. **イメージを定期的に更新**
|
||
```bash
|
||
docker compose pull
|
||
docker compose up -d
|
||
```
|
||
|
||
## 🌐 本番環境デプロイ
|
||
|
||
### Nginxリバースプロキシの使用
|
||
|
||
```nginx
|
||
# /etc/nginx/sites-available/nofx
|
||
server {
|
||
listen 80;
|
||
server_name your-domain.com;
|
||
|
||
location / {
|
||
proxy_pass http://localhost:3000;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
|
||
location /api/ {
|
||
proxy_pass http://localhost:8080/api/;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
}
|
||
```
|
||
|
||
### HTTPSの設定(Let's Encrypt)
|
||
|
||
```bash
|
||
# Certbotをインストール
|
||
sudo apt-get install certbot python3-certbot-nginx
|
||
|
||
# SSL証明書を取得
|
||
sudo certbot --nginx -d your-domain.com
|
||
|
||
# 自動更新
|
||
sudo certbot renew --dry-run
|
||
```
|
||
|
||
### Docker Swarmの使用(クラスタデプロイ)
|
||
|
||
```bash
|
||
# Swarmを初期化
|
||
docker swarm init
|
||
|
||
# スタックをデプロイ
|
||
docker stack deploy -c docker-compose.yml nofx
|
||
|
||
# サービスステータスを表示
|
||
docker stack services nofx
|
||
|
||
# サービスをスケール
|
||
docker service scale nofx_backend=3
|
||
```
|
||
|
||
## 📈 監視&ロギング
|
||
|
||
### ログ管理
|
||
|
||
```bash
|
||
# ログローテーションを設定(docker-compose.ymlで既に設定済み)
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
|
||
# ログ統計を表示
|
||
docker compose logs --timestamps | wc -l
|
||
```
|
||
|
||
### 監視ツール統合
|
||
|
||
Prometheus + Grafanaで監視を統合:
|
||
|
||
```yaml
|
||
# docker-compose.yml(監視サービスを追加)
|
||
services:
|
||
prometheus:
|
||
image: prom/prometheus
|
||
ports:
|
||
- "9090:9090"
|
||
volumes:
|
||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||
|
||
grafana:
|
||
image: grafana/grafana
|
||
ports:
|
||
- "3001:3000"
|
||
```
|
||
|
||
## 🆘 ヘルプを取得
|
||
|
||
- **GitHub Issues**: [Issueを提出](https://github.com/yourusername/open-nofx/issues)
|
||
- **ドキュメント**: [README.md](README.md)を確認
|
||
- **コミュニティ**: Discord/Telegramグループに参加
|
||
|
||
## 📝 コマンドチートシート
|
||
|
||
```bash
|
||
# 起動
|
||
docker compose up -d --build # ビルドして起動
|
||
docker compose up -d # 起動(リビルドなし)
|
||
|
||
# 停止
|
||
docker compose stop # サービスを停止
|
||
docker compose down # コンテナを停止して削除
|
||
docker compose down -v # コンテナとデータを停止して削除
|
||
|
||
# 表示
|
||
docker compose ps # ステータスを表示
|
||
docker compose logs -f # ログを表示
|
||
docker compose top # プロセスを表示
|
||
|
||
# 再起動
|
||
docker compose restart # すべてのサービスを再起動
|
||
docker compose restart backend # バックエンドを再起動
|
||
|
||
# 更新
|
||
git pull && docker compose up -d --build
|
||
|
||
# クリーン
|
||
docker compose down -v # すべてのデータをクリア
|
||
docker system prune -a # Dockerリソースをクリーン
|
||
```
|
||
|
||
---
|
||
|
||
🎉 おめでとうございます!NOFX AIトレーディング競争システムのデプロイに成功しました!
|
||
|
||
問題が発生した場合は、[トラブルシューティング](#-トラブルシューティング)セクションを確認するか、Issueを提出してください。
|