Auto-alojamiento
Despliega dTax en tu servidor Linux en menos de 15 minutos con Docker Compose.
Requisitos previos
- Servidor Linux (Ubuntu 22.04+ recomendado), 2+ GB de RAM
- Docker Engine 24+ y Docker Compose v2
- Un nombre de dominio apuntando a la IP del servidor
- Puertos 80 y 443 abiertos en el firewall
Inicio rápido
-
Clonar el repositorio
Ventana de terminal git clone https://github.com/dTaxLab/dtax.gitcd dtax -
Configurar variables de entorno
Ventana de terminal cp .env.production.example .envEdita
.envy establece todos los valores requeridos:Variable Descripción POSTGRES_PASSWORDContraseña robusta para la base de datos JWT_SECRETCadena aleatoria, mínimo 32 caracteres ENCRYPTION_KEYCadena hexadecimal de 64 caracteres — ver nota abajo CORS_ORIGINTu dominio, ej. https://tax.example.comAPP_URLMismo dominio (usado en emails de restablecimiento) NEXT_PUBLIC_API_URLhttps://tax.example.com/api(variable de compilación — debe configurarse antes dedocker compose build) -
Iniciar servicios
Ventana de terminal docker compose up -dInicia PostgreSQL, Redis, API, Web y nginx. El servicio
migrateejecuta las migraciones de base de datos automáticamente.Verificar funcionamiento:
Ventana de terminal docker compose pscurl http://localhost/api/health
Arquitectura
┌──────────┐ :80/:443 ────│ nginx │ └────┬─────┘ ┌────┴─────┐ ┌─────│ Rutas │─────┐ │ └──────────┘ │ ┌────┴───┐ ┌─────┴────┐ │ API │ │ Web │ │ :3001 │ │ :3000 │ └────┬───┘ └──────────┘ ┌────┴───┐ ┌───────┐ │Postgres│ │ Redis │ └────────┘ └───────┘El Sync Worker se ejecuta dentro del proceso de la API y consulta PostgreSQL cada 5 segundos en busca de trabajos pendientes. Gestiona dos tipos de trabajos:
WALLET_SYNC— obtiene transacciones on-chain o de exchangesPRICE_ENRICH— rellena los precios USD faltantes, luego calcula automáticamente los informes fiscales FIFO y envía un email de resumen
No se necesita un contenedor worker independiente. Configura RESEND_API_KEY + FROM_EMAIL + APP_URL para activar las notificaciones de informe fiscal listo por email.
TLS con Let’s Encrypt
-
Actualizar configuración nginx
Edita
docker/nginx/nginx.confy reemplazaserver_name _;con tu dominio:server_name tax.example.com; -
Obtener certificado
Ventana de terminal 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 -
Habilitar HTTPS y reiniciar nginx
Ventana de terminal docker compose restart nginx -
Renovación automática de certificados
Ventana de terminal 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 -
Primer administrador
- Regístrate en
https://yourdomain.com/register - Promueve la cuenta a administrador en la base de datos:
docker compose exec postgres psql -U dtax -c \ "UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"Actualizaciones
git pulldocker compose builddocker compose up -dCopias de seguridad
chmod +x docker/scripts/backup.sh./docker/scripts/backup.sh ./backups
# Copia de seguridad diaria a las 2amecho "0 2 * * * /path/to/dtax/docker/scripts/backup.sh /path/to/dtax/backups" | crontab -
# Restaurar desde copia de seguridadgunzip -c backups/dtax_20260313_020000.sql.gz | \ docker compose exec -T postgres psql -U dtax dtaxServicios opcionales
| Servicio | Variables de entorno | Propósito |
|---|---|---|
| Resend | RESEND_API_KEY, FROM_EMAIL | Verificación de email, restablecimiento de contraseña y notificaciones automáticas de informe fiscal listo — sin esto, el restablecimiento de contraseña, la verificación de email y los emails de informe fiscal tras el enriquecimiento se omiten silenciosamente |
| Stripe | STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRO_PRICE_ID, STRIPE_CPA_PRICE_ID | Facturación de suscripciones |
| Anthropic | ANTHROPIC_API_KEY | Clasificación de transacciones con IA y chat |
| Etherscan | ETHERSCAN_API_KEY | Indexación blockchain EVM |
| Solscan | SOLSCAN_API_KEY | Indexación blockchain Solana |
| PostHog | NEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_POSTHOG_HOST | Analítica de producto |
| Sentry | SENTRY_DSN | Seguimiento de errores |
Solución de problemas
Los servicios no arrancan
docker compose logs apidocker compose logs webdocker compose logs nginxLa API falla inmediatamente
Busca FATAL: ENCRYPTION_KEY en los logs de la API. Regenera la clave con openssl rand -hex 32.
Restablecer todo
docker compose down -vdocker compose up -d