Stack moderno para PyMEs chilenas 2026 (Docker + Traefik + GitHub Actions)
Cómo armar un stack técnico moderno para una PyME chilena en 2026 sin sobreingeniería: Docker Compose + Traefik + GitHub Actions + VPS Hetzner/Hostinger. El que usa aGo.
Una PyME chilena que desarrolla software no tiene que elegir entre “shared hosting con cPanel” o “AWS con un sysadmin dedicado”. Hay un sweet spot moderno, controlable, barato y robusto que aGo usa para todos sus productos y casos. Este post lo describe.
Los principios
- Local-first: lo que corre en producción debe correr igual en tu laptop.
- Reproducible: cualquiera con
git cloneydocker compose uplevanta el proyecto. - Versionado: infraestructura como código.
- Automatizado: el deploy a producción es un
git push. - Barato: cuesta entre USD 5 y USD 50 al mes mantener varios proyectos.
El stack
Local (tu máquina)
- Docker Compose: define los servicios (app, BD, cache, etc.) en un
docker-compose.yml. - Traefik local con subdominios
.localhost: cada proyecto en su URL (proyecto.localhost) sin tocar /etc/hosts. .envpor proyecto: secrets y configuración fuera del repo.
Repositorio (GitHub)
- Repo privado por proyecto.
.github/workflows/deploy.yml: pipeline de deploy.- Secrets gestionados con
gh secret set.
Producción (VPS Hetzner o Hostinger)
- VPS con Ubuntu 22.04 o 24.04.
- Docker + Traefik que enruta por subdominio.
- Let’s Encrypt para SSL automático.
- Cada proyecto en su
docker-compose.ymlcon red Docker compartida con Traefik. - Backups automatizados a S3-compatible (Cloudflare R2, Hetzner Object Storage).
El flujo de trabajo
Día 1 — Setup local
mkdir mi-proyecto && cd mi-proyecto
git init
# crea docker-compose.yml, Dockerfile, .env.example, .gitignore
docker compose up
# abre http://mi-proyecto.localhost
Día 2 — Push y deploy
git add . && git commit -m "feat: inicial"
gh repo create mi-proyecto --private --source=. --push
# configura GH Actions con secret del VPS
gh secret set VPS_SSH_KEY < ~/.ssh/id_rsa
git push origin main # Actions hace el deploy
Día 3 — Iteración
# trabajas local
git push origin main # cada push despliega
Por qué Traefik y no nginx
- Configuración por labels en
docker-compose.yml, no por archivos sueltos. - Routing dinámico: levantas un servicio nuevo y aparece online sin reiniciar Traefik.
- Let’s Encrypt automático.
- Middleware útil (rate limiting, basic auth, redirect HTTPS) declarativo.
Por qué Hetzner Cloud / Hostinger VPS y no AWS/GCP
- Costo: CX31 de Hetzner cuesta USD ~10/mes para un VPS que aguanta varios proyectos chicos.
- Simplicidad: no necesitas IAM, VPC, security groups complejos. Una IP pública, un firewall.
- Soporte LATAM: facturas en USD/EUR sin complicaciones, latencia razonable desde Chile.
AWS/GCP tienen sentido cuando tu producto necesita escalado horizontal serio (>1M req/día) o servicios managed específicos (RDS Multi-AZ, BigQuery, etc.). Antes de eso, agregan complejidad innecesaria.
El .env base
aGo mantiene un .env raíz con credenciales reutilizables: R2 storage, Acumbamail SMTP, Flow Chile (pagos), Browserless (rendering), múltiples LLM providers. Cada proyecto nuevo arranca tomando lo que necesita en vez de configurar todo desde cero.
Errores comunes
1. Editar código en el VPS
Tentación: “es un fix chico, lo arreglo en el server”. Resultado: el VPS y el repo divergen. La próxima vez que se despliegue, se pisa el fix. Regla aGo: NUNCA arreglar código en el VPS. Solo .env, infraestructura, backups. Código se arregla en local, push, GitHub Actions despliega.
2. Secrets en el repo
Aunque sea repo privado, los secrets viven en .env (local) o en GitHub Secrets / Doppler / Vault (producción). Nunca en archivos versionados.
3. Sin backups
Backup automático diario a R2 o S3 compatible. Sin esto, una restauración accidental + un bug = pérdida total.
4. Sobreingeniería desde el día 1
Kubernetes para un sitio que sirve 100 req/min es exceso. Empieza con Docker Compose simple, escala cuando duela.
Stack concreto recomendado para 90% de los casos
# docker-compose.yml
services:
app:
image: tu-imagen:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`tuproyecto.cl`)"
- "traefik.http.routers.app.tls.certresolver=letsencrypt"
networks:
- traefik-net
- internal
db:
image: postgres:16
volumes:
- db_data:/var/lib/postgresql/data
networks:
- internal
redis:
image: redis:7
networks:
- internal
volumes:
db_data:
networks:
traefik-net:
external: true
internal:
GitHub Actions despliega con un workflow simple que hace ssh al VPS, git pull, docker compose up -d.
Casos reales
aGo usa este stack para:
- hub.nubiq.ai (SaaS multi-tenant chatbot)
- sign.datanubi.com (firma electrónica)
- finanzas.datanubi.com (análisis IPSA con ML)
- quelicitar.cl (B2B licitaciones)
- linki.cl (acortador + eventos QR)
Todos corren bajo el mismo patrón con variaciones por stack interno (Django, Next.js, Go).
Preguntas frecuentes
¿Es válido para una PyME no técnica?
Una PyME no técnica probablemente contrata a alguien que sí lo es. La gracia del stack es que cualquier dev/operador entiende qué pasa, no es una caja negra.
¿Funciona para alta disponibilidad?
Con un único VPS, no. Para HA real necesitas múltiples nodos, load balancer y BD replicada. Cuando llegues a ese nivel de tráfico, este stack se queda corto pero la migración es gradual.
¿Cloudflare Pages / Vercel no es más simple?
Para sitios estáticos puros, sí. Para apps con backend, BD y procesos en cola, este stack te da más control y menos lock-in.
¿Quién soporta esto si yo no quiero meterme?
Servicios aGo cubren setup completo de este stack para tu proyecto, mantenimiento y monitoreo.
Conclusión
Docker Compose + Traefik + GitHub Actions + VPS de USD 10/mes cubre el 90% de las necesidades técnicas de una PyME chilena que desarrolla software. Sin lock-in, controlable, barato, productivo desde el día 1. Es el stack que aGo usa internamente y para clientes.
¿Quieres que armemos tu setup? Conversemos.