Zum Inhalt springen

Self-Hosting

Deploye dTax in unter 15 Minuten auf deinem eigenen Linux-Server mit Docker Compose.

Voraussetzungen

  • Linux-Server (Ubuntu 22.04+ empfohlen), 2+ GB RAM
  • Docker Engine 24+ und Docker Compose v2
  • Ein Domainname, der auf die Server-IP zeigt
  • Ports 80 und 443 in der Firewall geöffnet

Schnellstart

  1. Repository klonen

    Terminal-Fenster
    git clone https://github.com/dTaxLab/dtax.git
    cd dtax
  2. Umgebungsvariablen konfigurieren

    Terminal-Fenster
    cp .env.production.example .env

    Bearbeite .env und setze alle erforderlichen Werte:

    VariableBeschreibung
    POSTGRES_PASSWORDStarkes Datenbankpasswort
    JWT_SECRETZufallszeichenkette, mindestens 32 Zeichen
    ENCRYPTION_KEY64-stelliger Hex-String — siehe Hinweis unten
    CORS_ORIGINDeine Domain, z.B. https://tax.example.com
    APP_URLGleiche Domain (für Passwort-Reset-E-Mails)
    NEXT_PUBLIC_API_URLhttps://tax.example.com/api (Build-Zeit-Variable — muss vor docker compose build gesetzt sein)
  3. Dienste starten

    Terminal-Fenster
    docker compose up -d

    Startet PostgreSQL, Redis, API, Web und nginx. Der migrate-Dienst führt Datenbankmigrationen automatisch aus.

    Betrieb überprüfen:

    Terminal-Fenster
    docker compose ps
    curl http://localhost/api/health

Architektur

┌──────────┐
:80/:443 ────│ nginx │
└────┬─────┘
┌────┴─────┐
┌─────│ Routing │─────┐
│ └──────────┘ │
┌────┴───┐ ┌─────┴────┐
│ API │ │ Web │
│ :3001 │ │ :3000 │
└────┬───┘ └──────────┘
┌────┴───┐ ┌───────┐
│Postgres│ │ Redis │
└────────┘ └───────┘

Der Sync Worker läuft im API-Prozess und fragt PostgreSQL alle 5 Sekunden nach ausstehenden Jobs ab. Er verarbeitet zwei Job-Typen:

  • WALLET_SYNC — ruft On-Chain- oder Exchange-Transaktionen ab
  • PRICE_ENRICH — ergänzt fehlende USD-Preise, berechnet dann automatisch FIFO-Steuerberichte und sendet eine Zusammenfassungs-E-Mail

Es wird kein separater Worker-Container benötigt. Konfiguriere RESEND_API_KEY + FROM_EMAIL + APP_URL, um Steuerbereit-E-Mail-Benachrichtigungen zu aktivieren.

TLS mit Let’s Encrypt

  1. nginx-Konfiguration aktualisieren

    Bearbeite docker/nginx/nginx.conf und ersetze server_name _; mit deiner Domain:

    server_name tax.example.com;
  2. Zertifikat beziehen

    Terminal-Fenster
    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 aktivieren und nginx neu starten

    Terminal-Fenster
    docker compose restart nginx
  4. Automatische Zertifikatserneuerung

    Terminal-Fenster
    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 -

Erster Administrator

  1. Registriere dich unter https://yourdomain.com/register
  2. Erhöhe das Konto zum Admin in der Datenbank:
Terminal-Fenster
docker compose exec postgres psql -U dtax -c \
"UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"

Updates

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

Backups

Terminal-Fenster
chmod +x docker/scripts/backup.sh
./docker/scripts/backup.sh ./backups
# Täglich um 2 Uhr automatisch sichern
echo "0 2 * * * /path/to/dtax/docker/scripts/backup.sh /path/to/dtax/backups" | crontab -
# Aus Backup wiederherstellen
gunzip -c backups/dtax_20260313_020000.sql.gz | \
docker compose exec -T postgres psql -U dtax dtax

Optionale Dienste

DienstUmgebungsvariablenZweck
ResendRESEND_API_KEY, FROM_EMAILE-Mail-Verifizierung, Passwort-Reset und automatische Steuerbereit-Benachrichtigungen — ohne dies werden Passwort-Reset, E-Mail-Verifizierung und Steuerberichts-E-Mails nach der Preisanreicherung stillschweigend übersprungen
StripeSTRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRO_PRICE_ID, STRIPE_CPA_PRICE_IDAbonnementabrechnung
AnthropicANTHROPIC_API_KEYKI-Transaktionsklassifizierung & Chat
EtherscanETHERSCAN_API_KEYEVM-Blockchain-Indexierung
SolscanSOLSCAN_API_KEYSolana-Blockchain-Indexierung
PostHogNEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_POSTHOG_HOSTProduktanalyse
SentrySENTRY_DSNFehlerverfolgung

Fehlerbehebung

Dienste starten nicht

Terminal-Fenster
docker compose logs api
docker compose logs web
docker compose logs nginx

API stürzt sofort ab

Suche in den API-Logs nach FATAL: ENCRYPTION_KEY. Generiere den Schlüssel neu mit openssl rand -hex 32.

Alles zurücksetzen

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