セルフホスティング
Docker Compose を使って Linux サーバーに dTax を 15 分以内でデプロイできます。
前提条件
- Linux サーバー(Ubuntu 22.04+ 推奨)、2 GB 以上の RAM
- Docker Engine 24+ および Docker Compose v2
- サーバーの IP に向けたドメイン名
- ファイアウォールでポート 80 と 443 を開放
クイックスタート
-
リポジトリをクローン
Terminal window git clone https://github.com/dTaxLab/dtax.gitcd dtax -
環境変数を設定
Terminal window cp .env.production.example .env.envを編集して必須項目をすべて入力してください:変数 説明 POSTGRES_PASSWORD強力なデータベースパスワード JWT_SECRETランダムな文字列(32 文字以上) ENCRYPTION_KEY64 文字の 16 進数文字列 — 下記の注意事項を参照 CORS_ORIGINドメイン名(例: https://tax.example.com)APP_URL同じドメイン(パスワードリセットメールのリンクに使用) NEXT_PUBLIC_API_URLhttps://tax.example.com/api(ビルド時変数 —docker compose build実行前に設定必須) -
サービスを起動
Terminal window docker compose up -dPostgreSQL、Redis、API、Web、nginx が起動します。
migrateサービスがデータベースマイグレーションを自動実行します。動作確認:
Terminal window docker compose pscurl http://localhost/api/health
アーキテクチャ
┌──────────┐ :80/:443 ────│ nginx │ └────┬─────┘ ┌────┴─────┐ ┌─────│ ルーティング │─────┐ │ └──────────┘ │ ┌────┴───┐ ┌─────┴────┐ │ API │ │ Web │ │ :3001 │ │ :3000 │ └────┬───┘ └──────────┘ ┌────┴───┐ ┌───────┐ │Postgres│ │ Redis │ └────────┘ └───────┘Sync Worker は API プロセス内で動作し、5 秒ごとに PostgreSQL をポーリングして保留中のジョブを処理します。2 種類のジョブタイプを処理します:
WALLET_SYNC— オンチェーンまたは取引所のトランザクションを取得PRICE_ENRICH— 不足している USD 価格を補完し、自動的に FIFO 税務レポートを計算してサマリーメールを送信
別途 Worker コンテナは不要です。RESEND_API_KEY + FROM_EMAIL + APP_URL を設定することで、納税準備完了メール通知が有効になります。
TLS 証明書(Let’s Encrypt)
-
nginx 設定を更新
docker/nginx/nginx.confを編集してserver_name _;をドメインに変更:server_name tax.example.com; -
証明書を取得
Terminal window docker compose up -d nginxdocker run --rm \-v dtax_letsencrypt:/etc/letsencrypt \-v dtax_certbot-data:/var/www/certbot \certbot/certbot certonly \--webroot -w /var/www/certbot \-d tax.example.com \--agree-tos --email you@example.com -
HTTPS を有効化
docker/nginx/nginx.confに HTTPS サーバーブロックを追加後、nginx を再起動:Terminal window docker compose restart nginx -
証明書の自動更新
Terminal window echo "0 3 * * * docker run --rm \-v dtax_letsencrypt:/etc/letsencrypt \-v dtax_certbot-data:/var/www/certbot \certbot/certbot renew --quiet \&& docker compose restart nginx" | crontab -
最初の管理者ユーザー
https://yourdomain.com/registerでアカウントを登録- データベースで管理者に昇格:
docker compose exec postgres psql -U dtax -c \ "UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"アップデート
git pulldocker compose builddocker compose up -dバックアップ
# バックアップ実行chmod +x docker/scripts/backup.sh./docker/scripts/backup.sh ./backups
# 毎日午前 2 時に自動バックアップecho "0 2 * * * /path/to/dtax/docker/scripts/backup.sh /path/to/dtax/backups" | crontab -
# バックアップから復元gunzip -c backups/dtax_20260313_020000.sql.gz | \ docker compose exec -T postgres psql -U dtax dtaxオプションサービス
| サービス | 環境変数 | 用途 |
|---|---|---|
| Resend | RESEND_API_KEY、FROM_EMAIL | メール認証、パスワードリセット、および自動納税準備完了通知 — 未設定の場合、パスワードリセット・メール認証・価格補完後の税務レポートメールがサイレントにスキップされます |
| Stripe | STRIPE_SECRET_KEY、STRIPE_WEBHOOK_SECRET、STRIPE_PRO_PRICE_ID、STRIPE_CPA_PRICE_ID | サブスクリプション課金 |
| Anthropic | ANTHROPIC_API_KEY | AI トランザクション分類・チャット |
| Etherscan | ETHERSCAN_API_KEY | EVM ブロックチェーンインデックス |
| Solscan | SOLSCAN_API_KEY | Solana ブロックチェーンインデックス |
| PostHog | NEXT_PUBLIC_POSTHOG_KEY、NEXT_PUBLIC_POSTHOG_HOST | プロダクト分析 |
| Sentry | SENTRY_DSN | エラートラッキング |
トラブルシューティング
サービスが起動しない
docker compose logs apidocker compose logs webdocker compose logs nginxAPI が即座にクラッシュする
API ログで FATAL: ENCRYPTION_KEY を確認してください。ENCRYPTION_KEY が有効な 64 文字の 16 進数文字列でないことを示しています。openssl rand -hex 32 で再生成してください。
すべてをリセット
docker compose down -vdocker compose up -d