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:7.0para mantener la misma serie que esta documentación. Evitelatesten producción: puede cambiar de serie durante una descarga futura. - Las etiquetas
7.0-officeincluyen capacidad para convertir documentos OpenDocument a formatos como PDF. - Registre también el digest desplegado si necesita reconstrucciones completamente reproducibles.
- No mezcle servidor 7.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:7.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:7.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:7.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:7.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
| Componente | Responsabilidad | Debe persistir |
|---|---|---|
postgres | Datos transaccionales y esquema | Sí, volumen PostgreSQL y copias externas |
tryton | API, cliente web y procesos interactivos | Filestore en /var/lib/trytond/db |
cron | Tareas planificadas de Tryton | Comparte filestore y configuración con el servidor |
| Proxy TLS | HTTPS, certificados, límites y cabeceras | Configuració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:7.0
USER root
RUN pip install --no-cache-dir \
unpaismejor-account-do==7.0.* \
unpaismejor-dgii-reports==7.0.*
# Restaure aquí el usuario no privilegiado definido por la imagen base.
Inspeccione el usuario de la etiqueta con docker image inspect tryton/tryton:7.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
- Registre etiquetas, digests, módulos y configuración desplegados.
- Genere una copia lógica de PostgreSQL con
pg_dumpdesde una versión compatible. - Copie el volumen
tryton-datade forma consistente con la base. - Cifre y conserve una copia fuera del host.
- Restaure periódicamente en otro proyecto Compose y valide acceso, adjuntos, balances e informes.
Actualización segura
- Lea cambios de cada serie intermedia y actualice primero un clon de producción.
- Construya y pruebe la imagen con todos los módulos adicionales.
- Detenga escrituras, genere una copia restaurable y registre el digest anterior.
- Descargue la nueva imagen y ejecute
trytond-admin -d <base> --allcomo tarea controlada. - Levante servidor y cron, revise logs y concilie datos funcionales.
- 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:7.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/dby 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.