Saltar al contenido principal
Versión: Tryton 8.0 (LTS)

Desplegar Tryton con la imagen oficial de Docker

La imagen tryton/tryton es publicada por Tryton Private Foundation. Tryton utiliza PostgreSQL y la imagen incluye el servidor web; para tareas programadas se ejecuta otro contenedor con trytond-cron.

Elegir la etiqueta correcta

  • Use tryton/tryton:8.0 para mantener la misma serie que esta documentación. Evite latest en producción: puede cambiar de serie durante una descarga futura.
  • Las etiquetas 8.0-office incluyen capacidad para convertir documentos OpenDocument a formatos como PDF.
  • Registre también el digest desplegado si necesita reconstrucciones completamente reproducibles.
  • No mezcle servidor 8.0 con módulos de otra serie.

Prueba rápida, no destinada a producción

La secuencia oficial inicia PostgreSQL, prepara la base con trytond-admin y expone Tryton en el puerto 8000. La opción moderna es usar una red de Compose en lugar de --link, que se conserva en ejemplos históricos:

docker network create tryton-net
docker run --name tryton-postgres --network tryton-net \
-e POSTGRES_DB=tryton -e POSTGRES_USER=tryton \
-e POSTGRES_PASSWORD='cambie-esta-clave' -d postgres:<version-soportada>

docker run --rm --network tryton-net \
-e DB_HOSTNAME=tryton-postgres -e DB_PASSWORD='cambie-esta-clave' \
tryton/tryton:8.0 trytond-admin -d tryton --all

docker run --name tryton --network tryton-net -p 127.0.0.1:8000:8000 \
-e DB_HOSTNAME=tryton-postgres -e DB_PASSWORD='cambie-esta-clave' \
-d tryton/tryton:8.0

Abra http://localhost:8000/. Esta prueba no resuelve TLS, secretos, copias, reinicio, observabilidad ni actualización.

Despliegue recomendado con Compose

El ejemplo siguiente fija la serie de Tryton, separa servidor, cron y PostgreSQL, persiste base y filestore, usa comprobación de salud y no publica Tryton fuera de la interfaz local:

services:
postgres:
image: postgres:${PG_VERSION}
restart: unless-stopped
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: tryton
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U tryton -d ${DB_NAME}"]
interval: 10s
timeout: 5s
retries: 10

tryton:
image: tryton/tryton:8.0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
DB_HOSTNAME: postgres
DB_NAME: ${DB_NAME}
DB_USER: tryton
DB_PASSWORD: ${DB_PASSWORD}
ports:
- "127.0.0.1:8000:8000"
volumes:
- tryton-data:/var/lib/trytond/db

cron:
image: tryton/tryton:8.0
restart: unless-stopped
depends_on:
- tryton
environment:
DB_HOSTNAME: postgres
DB_NAME: ${DB_NAME}
DB_USER: tryton
DB_PASSWORD: ${DB_PASSWORD}
volumes:
- tryton-data:/var/lib/trytond/db
command: ["trytond-cron", "-d", "${DB_NAME}"]

volumes:
postgres-data:
tryton-data:

Cree un archivo .env protegido y excluido de Git:

DB_NAME=tryton
PG_VERSION=<supported-postgresql-major>
DB_PASSWORD=<generate-a-long-random-password>

Use permisos restrictivos sobre .env y no lo confirme en Git. En plataformas con gestor de secretos, inyecte DB_PASSWORD durante el despliegue en lugar de guardarla en el archivo.

Inicializar la base

Arranque primero PostgreSQL y ejecute la administración como una tarea desechable:

docker compose up -d postgres
docker compose run --rm tryton trytond-admin -d "$DB_NAME" --all
docker compose up -d tryton cron
docker compose ps
docker compose logs --tail=200 tryton cron postgres

trytond-admin --all crea o actualiza las estructuras de todos los módulos activados. Antes de ejecutarlo sobre una base existente, haga una copia, pruebe la restauración y confirme que el código contiene exactamente las versiones esperadas.

Componentes y persistencia

ComponenteResponsabilidadDebe persistir
postgresDatos transaccionales y esquemaSí, volumen PostgreSQL y copias externas
trytonAPI, cliente web y procesos interactivosFilestore en /var/lib/trytond/db
cronTareas planificadas de TrytonComparte filestore y configuración con el servidor
Proxy TLSHTTPS, certificados, límites y cabecerasConfiguración y certificados

No considere el volumen una copia de seguridad. Respalde PostgreSQL de forma consistente y el filestore correspondiente al mismo punto lógico.

Proxy inverso y TLS

Mantenga el puerto 8000 enlazado a 127.0.0.1 o en una red privada. Publique un proxy como Nginx, Traefik o Caddy con HTTPS, límites de carga acordes con sus adjuntos, tiempos de espera y cabeceras de proxy correctas. No exponga PostgreSQL a Internet.

Módulos adicionales

Para módulos propios, construya una imagen derivada reproducible. Fije versiones y use el mismo prefijo de serie:

FROM tryton/tryton:8.0

USER root
RUN pip install --no-cache-dir \
unpaismejor-account-do==8.0.* \
unpaismejor-dgii-reports==8.0.*
# Restaure aquí el usuario no privilegiado definido por la imagen base.

Inspeccione el usuario de la etiqueta con docker image inspect tryton/tryton:8.0 antes de escribir el Dockerfile derivado. No instale paquetes manualmente dentro de un contenedor en ejecución: el cambio desaparecerá al recrearlo.

Copia y restauración

  1. Registre etiquetas, digests, módulos y configuración desplegados.
  2. Genere una copia lógica de PostgreSQL con pg_dump desde una versión compatible.
  3. Copie el volumen tryton-data de forma consistente con la base.
  4. Cifre y conserve una copia fuera del host.
  5. Restaure periódicamente en otro proyecto Compose y valide acceso, adjuntos, balances e informes.

Actualización segura

  1. Lea cambios de cada serie intermedia y actualice primero un clon de producción.
  2. Construya y pruebe la imagen con todos los módulos adicionales.
  3. Detenga escrituras, genere una copia restaurable y registre el digest anterior.
  4. Descargue la nueva imagen y ejecute trytond-admin -d <base> --all como tarea controlada.
  5. Levante servidor y cron, revise logs y concilie datos funcionales.
  6. No intente volver a una imagen anterior sobre una base ya migrada; restaure la copia previa.

Diagnóstico

docker compose ps
docker compose logs --since=15m tryton
docker compose logs --since=15m cron
docker compose exec postgres pg_isready -U tryton -d "$DB_NAME"
docker compose run --rm tryton trytond-admin --help
docker image inspect tryton/tryton:8.0
  • No conecta a PostgreSQL: revise nombre de servicio, usuario, base, contraseña, DNS de la red y pg_isready.
  • La base no aparece: confirme que fue inicializada y que el filtro/listado de bases del servidor lo permite.
  • Faltan menús: actualice la lista de módulos, active dependencias, ejecute la actualización y vuelva a iniciar sesión.
  • Cron no ejecuta tareas: confirme que el contenedor está activo, usa la misma base y no existe otro cron duplicando trabajos.
  • Archivos perdidos: compruebe el montaje de /var/lib/trytond/db y la correspondencia entre base y filestore.

Lista de control de producción

  • Etiquetas y versiones están fijadas.
  • PostgreSQL y Tryton no publican puertos innecesarios.
  • TLS funciona y las contraseñas no están en Git ni en la imagen.
  • Servidor y cron usan la misma configuración, base y filestore.
  • Existen límites de recursos, reinicio, salud, logs y alertas.
  • Las copias de PostgreSQL y filestore se restauran correctamente.
  • La actualización fue ensayada y tiene plan de reversión por restauración.

Fuentes