3c7c3593ba
Self-contained VPS deployment for 24/7 operation: app container behind Caddy with automatic HTTPS, idempotent deploy.sh, .env template, and runbook. SENTRY_TRACING defaults off to stay within the Sentry free-tier span quota. Co-authored-by: Cursor <cursoragent@cursor.com>
2.8 KiB
2.8 KiB
Deploy en VPS (Hetzner) — Arb Pulse
Despliegue con Docker Compose: el contenedor app (Node + tsx) detrás de
caddy, que emite HTTPS automáticamente (Let's Encrypt). Pensado para correr
24/7 desde la rama main.
Prerrequisitos
- VPS Ubuntu/Debian (recomendado 2 vCPU / 2 GB RAM — p. ej. Hetzner CX22).
- Un dominio con registro DNS A apuntando a la IP del VPS (necesario para el HTTPS de Caddy).
- Puertos abiertos:
sudo ufw allow 22 && sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw --force enable
Deploy (para el agente del VPS)
Todo lo hace el script idempotente deploy.sh (instala Docker si falta, clona o
actualiza el repo, y levanta los contenedores). Es seguro re-ejecutarlo.
# 1) Traer el script y ejecutarlo (primera vez: crea .env y se detiene)
curl -fsSL https://raw.githubusercontent.com/mauricioabh/arbpulse/main/deploy/deploy.sh -o /tmp/arbpulse-deploy.sh
bash /tmp/arbpulse-deploy.sh
# 2) Editar el .env con el dominio y secretos
nano /opt/arbpulse/deploy/.env # DOMAIN=... ; SENTRY_DSN=... (opcional) ; UPSTASH_* (opcional)
# 3) Volver a ejecutar para construir y arrancar
bash /tmp/arbpulse-deploy.sh
Alternativa (si ya está clonado el repo en /opt/arbpulse):
cd /opt/arbpulse/deploy
cp .env.vps.example .env && nano .env # solo la primera vez
docker compose up -d --build
Verificar
docker compose -f /opt/arbpulse/deploy/docker-compose.yml ps
curl -s http://127.0.0.1:8080/api/health # local
curl -s https://TU_DOMINIO/api/health # público (tras propagar DNS)
Dashboard: https://TU_DOMINIO → badge LIVE y los 4 exchanges en la matriz.
Variables de entorno
Ver .env.vps.example. Claves:
DOMAIN— dominio para Caddy/HTTPS (obligatorio).SENTRY_DSN— opcional; activa error monitoring.SENTRY_TRACING— dejar enfalse(default) para no consumir la cuota free-tier de spans en operación 24/7.UPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN— opcionales (rate limit- cache). Vacío = desactivado.
Nunca comitees el
.envreal. Solo.env.vps.examplevive en el repo.
Operación
cd /opt/arbpulse/deploy
docker compose logs -f app # logs de la app
docker compose restart app # reiniciar
docker compose down # detener
bash /tmp/arbpulse-deploy.sh # actualizar (git pull main + rebuild)
Notas
- Caddy usa
flush_interval -1para que el SSE (/api/stream) fluya en tiempo real; no comprimirtext/event-stream. - El puerto 8080 se publica solo en
127.0.0.1(no expuesto a Internet); el tráfico público entra por Caddy (80/443). - Región: Hetzner no tiene Asia; para menor latencia a Binance/Bybit/OKX evalúa un VPS en Singapur. Para Kraken (EU) Falkenstein/Helsinki va bien.