# 🐳 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 ``` ### 設定ファイルが見つからない ```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を提出してください。