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
-
Repository klonen
Terminal-Fenster git clone https://github.com/dTaxLab/dtax.gitcd dtax -
Umgebungsvariablen konfigurieren
Terminal-Fenster cp .env.production.example .envBearbeite
.envund setze alle erforderlichen Werte:Variable Beschreibung POSTGRES_PASSWORDStarkes Datenbankpasswort JWT_SECRETZufallszeichenkette, mindestens 32 Zeichen ENCRYPTION_KEY64-stelliger Hex-String — siehe Hinweis unten CORS_ORIGINDeine Domain, z.B. https://tax.example.comAPP_URLGleiche Domain (für Passwort-Reset-E-Mails) NEXT_PUBLIC_API_URLhttps://tax.example.com/api(Build-Zeit-Variable — muss vordocker compose buildgesetzt sein) -
Dienste starten
Terminal-Fenster docker compose up -dStartet PostgreSQL, Redis, API, Web und nginx. Der
migrate-Dienst führt Datenbankmigrationen automatisch aus.Betrieb überprüfen:
Terminal-Fenster docker compose pscurl 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 abPRICE_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
-
nginx-Konfiguration aktualisieren
Bearbeite
docker/nginx/nginx.confund ersetzeserver_name _;mit deiner Domain:server_name tax.example.com; -
Zertifikat beziehen
Terminal-Fenster 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 aktivieren und nginx neu starten
Terminal-Fenster docker compose restart nginx -
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
- Registriere dich unter
https://yourdomain.com/register - Erhöhe das Konto zum Admin in der Datenbank:
docker compose exec postgres psql -U dtax -c \ "UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"Updates
git pulldocker compose builddocker compose up -dBackups
chmod +x docker/scripts/backup.sh./docker/scripts/backup.sh ./backups
# Täglich um 2 Uhr automatisch sichernecho "0 2 * * * /path/to/dtax/docker/scripts/backup.sh /path/to/dtax/backups" | crontab -
# Aus Backup wiederherstellengunzip -c backups/dtax_20260313_020000.sql.gz | \ docker compose exec -T postgres psql -U dtax dtaxOptionale Dienste
| Dienst | Umgebungsvariablen | Zweck |
|---|---|---|
| Resend | RESEND_API_KEY, FROM_EMAIL | E-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 |
| Stripe | STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRO_PRICE_ID, STRIPE_CPA_PRICE_ID | Abonnementabrechnung |
| Anthropic | ANTHROPIC_API_KEY | KI-Transaktionsklassifizierung & Chat |
| Etherscan | ETHERSCAN_API_KEY | EVM-Blockchain-Indexierung |
| Solscan | SOLSCAN_API_KEY | Solana-Blockchain-Indexierung |
| PostHog | NEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_POSTHOG_HOST | Produktanalyse |
| Sentry | SENTRY_DSN | Fehlerverfolgung |
Fehlerbehebung
Dienste starten nicht
docker compose logs apidocker compose logs webdocker compose logs nginxAPI 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
docker compose down -vdocker compose up -d