コンテンツにスキップ

セルフホスティング

Docker Compose を使って Linux サーバーに dTax を 15 分以内でデプロイできます。

前提条件

  • Linux サーバー(Ubuntu 22.04+ 推奨)、2 GB 以上の RAM
  • Docker Engine 24+ および Docker Compose v2
  • サーバーの IP に向けたドメイン名
  • ファイアウォールでポート 80 と 443 を開放

クイックスタート

  1. リポジトリをクローン

    Terminal window
    git clone https://github.com/dTaxLab/dtax.git
    cd dtax
  2. 環境変数を設定

    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 実行前に設定必須)
  3. サービスを起動

    Terminal window
    docker compose up -d

    PostgreSQL、Redis、API、Web、nginx が起動します。migrate サービスがデータベースマイグレーションを自動実行します。

    動作確認:

    Terminal window
    docker compose ps
    curl 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)

  1. nginx 設定を更新

    docker/nginx/nginx.conf を編集して server_name _; をドメインに変更:

    server_name tax.example.com;
  2. 証明書を取得

    Terminal window
    docker compose up -d nginx
    docker 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
  3. HTTPS を有効化

    docker/nginx/nginx.conf に HTTPS サーバーブロックを追加後、nginx を再起動:

    Terminal window
    docker compose restart nginx
  4. 証明書の自動更新

    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 -

最初の管理者ユーザー

  1. https://yourdomain.com/register でアカウントを登録
  2. データベースで管理者に昇格:
Terminal window
docker compose exec postgres psql -U dtax -c \
"UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"

アップデート

Terminal window
git pull
docker compose build
docker compose up -d

バックアップ

Terminal window
# バックアップ実行
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

オプションサービス

サービス環境変数用途
ResendRESEND_API_KEYFROM_EMAILメール認証、パスワードリセット、および自動納税準備完了通知 — 未設定の場合、パスワードリセット・メール認証・価格補完後の税務レポートメールがサイレントにスキップされます
StripeSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETSTRIPE_PRO_PRICE_IDSTRIPE_CPA_PRICE_IDサブスクリプション課金
AnthropicANTHROPIC_API_KEYAI トランザクション分類・チャット
EtherscanETHERSCAN_API_KEYEVM ブロックチェーンインデックス
SolscanSOLSCAN_API_KEYSolana ブロックチェーンインデックス
PostHogNEXT_PUBLIC_POSTHOG_KEYNEXT_PUBLIC_POSTHOG_HOSTプロダクト分析
SentrySENTRY_DSNエラートラッキング

トラブルシューティング

サービスが起動しない

Terminal window
docker compose logs api
docker compose logs web
docker compose logs nginx

API が即座にクラッシュする

API ログで FATAL: ENCRYPTION_KEY を確認してください。ENCRYPTION_KEY が有効な 64 文字の 16 進数文字列でないことを示しています。openssl rand -hex 32 で再生成してください。

すべてをリセット

Terminal window
docker compose down -v
docker compose up -d