Ir al contenido

Instalación

La edición Community de GoodWorkshop funciona como una imagen de contenedor más Postgres, arrancada con Docker Compose. Por planificar y llevar a cabo tus talleres no pagas ninguna licencia, tampoco con uso comercial. Si no quieres mantener un servidor: la GoodWorkshop Cloud es el mismo producto, alojado.

Esta página resume la instalación. La referencia es la sección Installation (on-premise) del README.

Qué Requisito
Docker Docker con Compose v2 (docker compose version), amd64 o arm64
Nombre de host Un nombre que resuelva públicamente a este servidor
Puertos 80 y 443 libres: Let’s Encrypt necesita ambos para el certificado
Base de datos Nada que hacer: Postgres funciona dentro del stack y no es accesible desde fuera
Contraseñas Nada que hacer: el stack genera él mismo las contraseñas de la base de datos en el primer arranque

Necesitas compose.yaml, Caddyfile y un .env:

Ventana de terminal
git clone https://github.com/roleALPHA/good-workshop.git
cd good-workshop
cp .env.example .env

Las versiones están en GitHub Container Registry. compose.yaml descarga la imagen que indica GW_VERSION. latest apunta siempre a la versión estable más reciente. Cada versión está además disponible con su propio número: así te quedas en una versión hasta que actualices tú mismo. No tienes que compilar nada.

Tres valores son obligatorios. Si falta uno, el stack no arranca e indica el valor que falta:

Ventana de terminal
GW_APP_URL=https://workshop.example.com # the address the app is reachable at
GW_HOSTNAME=workshop.example.com # the name in the certificate (profile `tls`)
GW_VERSION=latest # the newest stable release, or e.g. 0.8.22 to pin one

El correo puede esperar. Para el primer arranque no necesitas envío de correo: la página de configuración muestra ella misma tu enlace de acceso. Después configuras el envío en la interfaz, en Envío de correo; consulta Envío de correo. Todas las demás variables están en Configuración.

Ventana de terminal
docker compose --profile tls up -d

Ocurre lo siguiente, por orden:

  1. secrets genera las contraseñas de la base de datos, una por rol.
  2. db arranca.
  3. migrate crea los roles, comprueba los datos existentes, aplica las migraciones y configura los tipos de bloque.
  4. app solo arranca cuando migrate ha terminado sin errores.
  5. caddy se encarga de los puertos 80 y 443 y obtiene el certificado.

Si todo funciona, responde el healthcheck:

Ventana de terminal
curl -fsS https://workshop.example.com/api/health
# {"status":"ok","checks":[{"name":"database","ok":true},{"name":"migrations","ok":true}]}

Un 503 no es un fallo, sino la respuesta honesta «este contenedor no puede servir». checks indica si se debe a la base de datos o al estado de las migraciones.

5. Tomar posesión de la instalación en el navegador

Sección titulada «5. Tomar posesión de la instalación en el navegador»

Una instalación nueva se anuncia en el log en cada arranque, hasta que alguien toma posesión de ella:

Ventana de terminal
docker compose logs app
This installation has no administrator yet.
https://workshop.example.com/setup
Setup key: 7Qb3…
The key is valid until this process restarts.
  1. Abre la dirección /setup que aparece.
  2. Introduce Nombre, Apellido y Tu dirección de correo.
  3. Pega la Clave de instalación del log.
  4. Haz clic en Configurar esta instalación.

Si todavía no hay envío de correo configurado, el enlace de acceso aparece directamente en la página. Vale una sola vez y caduca. Todo lo demás (envío de correo, más personas, branding) lo haces después en la interfaz.

Desde la línea de comandos, con una shell en el servidor:

Ventana de terminal
docker compose exec app node scripts/cli.mjs admin create \
--email you@example.com --first-name Anna --last-name Berger

En el primerísimo arranque: pon GW_BOOTSTRAP_ADMIN_EMAIL=you@example.com en el .env antes de que el stack arranque por primera vez. El enlace aparece entonces en docker compose logs migrate, vale una hora y se imprime exactamente una vez. Está pensado para instalaciones que monta un script en lugar de una persona.

Si no encuentras la clave o el enlace, te ayudará Inicio de sesión y enlace de acceso.