Docker

Actualiza un contenedor independiente, sin docker-compose

  1. Antes de actualizar
  2. De la 7.2 a la 7.3
  3. 1. Descarga las nuevas imágenes
  4. 2. Sustituye los contenedores
  5. 3. Comprueba la actualización
  6. Volver atrás

Una instalación independiente se actualiza sustituyendo sus contenedores: descarga las nuevas imágenes, elimina los contenedores antiguos y arranca otros nuevos con los mismos comandos run. Desde la versión 7 hay dos: AnsibleForms y el RTE que ejecuta los playbooks, siempre en la misma release. Tus archivos se guardan en la carpeta montada /app/dist/persistent y tus datos en MySQL, así que ambos se conservan.


Antes de actualizar

Prepara la actualización para poder volver atrás si algo sale mal:

  • Haz una copia de seguridad en Configuración → Copias de seguridad. La nueva release actualiza el esquema de la base de datos en su primer arranque.
  • Lee el registro de cambios de las releases entre tu versión y la nueva.
  • ¿Pasas a una nueva versión mayor? Sigue primero Actualizar a la v7.
  • ¿Vienes de la 6.5? Las imágenes de la 7 se ejecutan con el uid 1000 en lugar de root: dale a ese usuario las carpetas que montas, una vez, por ejemplo sudo chown -R 1000:1000 /srv/apps/ansibleforms/persistent /srv/apps/ansibleforms/ssh.
  • ¿Vienes de la 7.2? El RTE recibe un archivo propio y la aplicación lo llama: consulta primero De la 7.2 a la 7.3.

De la 7.2 a la 7.3

Hasta la 7.2.0, el RTE leía el archivo de entorno de la aplicación, con los ajustes de la base de datos, y se añadía a sí mismo como runner a partir de RTE_URL. Eso es el modo database, obsoleto en la 7.3.0 y eliminado en la 8.0.0. Desde la 7.3.0, la aplicación llama al RTE y mantiene abierto un WebSocket (RTE_MODE=inbound, consulta Modos), y el RTE no tiene ajustes de base de datos. Una vez, antes del paso 2:

  1. Crea /srv/apps/ansibleforms/rte.env como hace la instalación, con RTE_MODE=inbound, el mismo RTE_TOKEN, RTE_FILES=local, PORT=8000 y HTTPS=0. Sin DB_*, sin ENCRYPTION_SECRET, sin RTE_URL
  2. Declara el runner en ese modo. O bien añade la semilla de configuración de la instalación, persistent/seed.yaml con la credencial de RTE (url: http://rte:8000, password: ${RTE_TOKEN}) y el runner rte (rte_mode: inbound), y añade CONFIG_SEED_PATH=/app/dist/persistent/seed.yaml al archivo de entorno de la aplicación. O bien, sin semilla, abre el runner en Conexiones → Runners, pon su Modo en Entrante y elige una credencial de RTE que contenga http://rte:8000 y el token

Con la semilla, el archivo de entorno de la aplicación también contiene RTE_TOKEN, el mismo token, ya que la semilla lo lee de ahí.


1. Descarga las nuevas imágenes

Descarga las imágenes más recientes de AnsibleForms y del RTE de la etiqueta que ejecutas:

docker pull ghcr.io/ansibleforms/ansibleforms:7
docker pull ghcr.io/ansibleforms/ansibleforms-rte-full:7

2. Sustituye los contenedores

Elimina los contenedores antiguos y arranca otros nuevos con los comandos run de la instalación. La aplicación lee la conexión a la base de datos de su archivo de entorno, con el usuario de base de datos de AnsibleForms (no root). El RTE lee su propio rte.env, sin los ajustes de la base de datos, y la aplicación lo llama a través de una red que comparten ambos contenedores:

docker stop ansibleforms rte
docker rm ansibleforms rte

docker run -d --name ansibleforms --network ansibleforms -p 8000:8000 --restart unless-stopped \
  --env-file /srv/apps/ansibleforms/ansibleforms.env \
  -v /srv/apps/ansibleforms/persistent:/app/dist/persistent \
  -v /srv/apps/ansibleforms/ssh:/home/node/.ssh \
  ghcr.io/ansibleforms/ansibleforms:7

docker run -d --name rte --network ansibleforms --restart unless-stopped --stop-timeout 30 \
  --env-file /srv/apps/ansibleforms/rte.env \
  -v /srv/apps/ansibleforms/persistent:/app/dist/persistent \
  -v /srv/apps/ansibleforms/ssh:/home/node/.ssh \
  ghcr.io/ansibleforms/ansibleforms-rte-full:7

Si vienes de la 6.5, todavía no hay contenedor del RTE: los comandos stop y rm solo encuentran la aplicación. Crea la red compartida una vez con docker network create ansibleforms (o podman network create ansibleforms). Como hace la instalación, pon la conexión a la base de datos, ENCRYPTION_SECRET, un RTE_TOKEN de al menos 16 caracteres y CONFIG_SEED_PATH en el archivo de entorno de la aplicación, y crea rte.env y la semilla de configuración. Usa tus propias carpetas donde tu instalación 6.5 montaba otras. La semilla añade el RTE en Conexiones → Runners como el runner predeterminado rte; consulta Actualizar a la v7.


3. Comprueba la actualización

Sigue el log de AnsibleForms mientras arranca. El primer arranque de una nueva release actualiza el esquema de la base de datos:

docker logs -f ansibleforms

El RTE escribe su propio log, que muestra docker logs rte. En AnsibleForms, Ayuda → Acerca de muestra la versión que se está ejecutando, y Configuración → Estado muestra el estado de la base de datos, del esquema y de los demás sistemas de los que depende AnsibleForms.


Volver atrás

Para volver a la release que ejecutabas antes, la versión que mostraba Ayuda → Acerca de antes de la actualización, vuelve a ejecutar el paso 2 con su etiqueta exacta en lugar de 7, tanto en la imagen de AnsibleForms como en la del RTE. Si esa release no arranca sobre la base de datos actualizada, restaura la copia de seguridad que hiciste en Configuración → Copias de seguridad.