Saltearse al contenido

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

  1. Clonar el repositorio

    Ventana de terminal
    git clone https://github.com/dTaxLab/dtax.git
    cd dtax
  2. Configurar variables de entorno

    Ventana de terminal
    cp .env.production.example .env

    Edita .env y establece todos los valores requeridos:

    VariableDescripció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.com
    APP_URLMismo dominio (usado en emails de restablecimiento)
    NEXT_PUBLIC_API_URLhttps://tax.example.com/api (variable de compilación — debe configurarse antes de docker compose build)
  3. Iniciar servicios

    Ventana de terminal
    docker compose up -d

    Inicia PostgreSQL, Redis, API, Web y nginx. El servicio migrate ejecuta las migraciones de base de datos automáticamente.

    Verificar funcionamiento:

    Ventana de terminal
    docker compose ps
    curl 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 exchanges
  • PRICE_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

  1. Actualizar configuración nginx

    Edita docker/nginx/nginx.conf y reemplaza server_name _; con tu dominio:

    server_name tax.example.com;
  2. Obtener certificado

    Ventana de terminal
    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. Habilitar HTTPS y reiniciar nginx

    Ventana de terminal
    docker compose restart nginx
  4. 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

  1. Regístrate en https://yourdomain.com/register
  2. Promueve la cuenta a administrador en la base de datos:
Ventana de terminal
docker compose exec postgres psql -U dtax -c \
"UPDATE \"User\" SET role='ADMIN' WHERE email='your@email.com';"

Actualizaciones

Ventana de terminal
git pull
docker compose build
docker compose up -d

Copias de seguridad

Ventana de terminal
chmod +x docker/scripts/backup.sh
./docker/scripts/backup.sh ./backups
# Copia de seguridad diaria a las 2am
echo "0 2 * * * /path/to/dtax/docker/scripts/backup.sh /path/to/dtax/backups" | crontab -
# Restaurar desde copia de seguridad
gunzip -c backups/dtax_20260313_020000.sql.gz | \
docker compose exec -T postgres psql -U dtax dtax

Servicios opcionales

ServicioVariables de entornoPropósito
ResendRESEND_API_KEY, FROM_EMAILVerificació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
StripeSTRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRO_PRICE_ID, STRIPE_CPA_PRICE_IDFacturación de suscripciones
AnthropicANTHROPIC_API_KEYClasificación de transacciones con IA y chat
EtherscanETHERSCAN_API_KEYIndexación blockchain EVM
SolscanSOLSCAN_API_KEYIndexación blockchain Solana
PostHogNEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_POSTHOG_HOSTAnalítica de producto
SentrySENTRY_DSNSeguimiento de errores

Solución de problemas

Los servicios no arrancan

Ventana de terminal
docker compose logs api
docker compose logs web
docker compose logs nginx

La API falla inmediatamente

Busca FATAL: ENCRYPTION_KEY en los logs de la API. Regenera la clave con openssl rand -hex 32.

Restablecer todo

Ventana de terminal
docker compose down -v
docker compose up -d