Skip to content

Guia Docker

Objetivo

Este documento describe como ejecutar SEO Growth Engine con Docker y cual es el estado real de esa configuracion dentro del proyecto.

Archivos implicados

  • Dockerfile
  • .dockerignore
  • .gitattributes
  • docker-compose.yml
  • deploy/entrypoint.sh

Que hace el Dockerfile

  1. Construye el frontend con Node 20 y npm ci.
  2. Genera el build de Vue con npm run build.
  3. Regenera el CSS publico con npm run build:tailwind.
  4. Crea una imagen final basada en Python 3.12.
  5. Instala dependencias del backend.
  6. Copia el proyecto y los assets compilados.
  7. Normaliza deploy/entrypoint.sh a formato LF dentro de la imagen antes de marcarlo como ejecutable.

Que hace docker-compose

El archivo docker-compose.yml define estos servicios:

  • web: aplica migraciones, ejecuta collectstatic y levanta Gunicorn
  • worker: ejecuta python manage.py runworker
  • db: PostgreSQL
  • redis: Redis

Tambien define volumenes para:

  • salida de artefactos
  • estaticos
  • datos de Postgres
  • secretos locales montados en /app/secrets como solo lectura

Nota importante:

  • Dentro de Docker, web y worker fuerzan DJANGO_TASK_QUEUE_BACKEND=rq y REDIS_URL=redis://redis:6379/0.
  • Esto evita que un .env local con DJANGO_TASK_QUEUE_BACKEND=thread rompa el worker del stack Docker.
  • Los secretos de Google deben vivir fuera del repositorio en secrets/; esa carpeta queda ignorada por Git y no se copia dentro de la imagen.

Arranque local con Docker

Antes de levantar el stack, copia el ejemplo de variables:

cp .env.example .env

Luego ejecuta:

docker compose up --build

Si tu maquina usa la variante antigua:

docker-compose up --build

En otra terminal, crea el usuario interno inicial:

docker compose exec web python manage.py bootstrap_dashboard --username tutor --password tutor123 --email tutor@example.com

Si se quiere dejar Going International conectado a GSC y GA4 desde el arranque, copia antes el JSON privado a secrets/gsc-service-account.json y usa:

docker compose exec web python manage.py bootstrap_dashboard \
  --username tutor \
  --password tutor123 \
  --email tutor@example.com \
  --service-account-json /app/secrets/gsc-service-account.json \
  --gsc-property sc-domain:going.international \
  --ga4-property-id 417418090

Despues puedes abrir:

http://127.0.0.1:8000/

Validacion local realizada

Validado localmente el 2026-05-18 con estos resultados:

  • docker-compose up --build -d: correcto
  • docker-compose ps: web, worker, db y redis en estado Up
  • docker-compose logs --tail=60 web worker: Gunicorn y RQ worker arrancando sin errores
  • http://127.0.0.1:8000/: respuesta 200

Relacion con el despliegue final

Docker resuelve la parte de entorno reproducible en desarrollo y facilita la puesta en marcha del sistema completo. La arquitectura de publicacion que presentamos en produccion contempla NGINX en la VPS como proxy delante de la aplicacion.

Incidencias de Docker ya corregidas

  • deploy/entrypoint.sh fallaba en Windows por finales de linea CRLF
  • el worker heredaba DJANGO_TASK_QUEUE_BACKEND=thread desde .env

Ambos puntos ya quedaron corregidos en el repositorio.

Siguiente nivel de mejora

  • reforzar automatizacion del despliegue;
  • cerrar ajuste final de dominio y HTTPS segun el entorno real;
  • mantener alineadas la documentacion local y la publicacion en VPS.