Saltar al contenido principal

stack

stack.yml

El fichero stack.yml es el fichero que se usa para desplegar ValerIA en un cluster de docker swarm.

Configuración

Crear en el servidor manager los siguientes secretos:

  • secrettoken: Cadena de texto (mas de 32 caracteres) que se usará para encriptar los tokens de acceso a la API. Obligatorio.
  • valeriadbpassword: Cadena de texto (mas de 10 caracteres) que se usará para encriptar la base de datos de mongoDB. Obligatorio.
  • valeriaurldb: Cadena de texto como: mongodb://root:VALERIADBPASSWORD@database:27017 donde VALERIADBPASSWORD es la contraseña que se ha usado en el secret anterior. Obligatorio.
  • valeriapostgresuser: Cadena de texto como: mongodb://root:VALERIADBPASSWORD@database:27017 donde VALERIADBPASSWORD es la contraseña que se ha usado en el secret anterior.Obligatorio.
  • valeriapdpostgrespassword: Cadena de texto (mas de 10 caracteres) que se usará para encriptar la base de datos de mongoDB. Obligatorio.

Y de manera opcional las siguientes variables de entorno:

  • mode: Con un valor de dev o prod para indicar si se quiere que las peticiones de una determinada IP no necesiten autenticación. por defecto "prod"
  • IPDEV: Con un valor de la IP que no necesitará autenticación. por defecto ""
  • developerPolicies: Con la lista de políticas que se quieran usar para el modo desarrollador. por defecto *.
  • APIhostname: Con la url publica que se quiera usar para acceder a la aplicación. por defecto localhost
  • APIhostdesc: Con la descripción que se quiera usar para el servidor. por defecto "ValerIA"
  • APIportpublic: Con el puerto publico que se quiera usar para acceder a la aplicación. por defecto "80"
  • TZ: Con la zona horaria que se quiera usar. por defecto "Europe/Madrid"

Usaremos el siguiente Stack donde sustituiremos PUBLICHOSTNAME por la url publica que queramos usar para acceder a la aplicación y DESCRIPTION_OF_SERVER por la descripción que queramos para el servidor.

stack.yml
version: "3.7"
services:
database:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/valeriadbpassword
secrets:
- valeriadbpassword
volumes:
- valeriadb:/data/db
- valeriadb:/data/configdb
ports:
- 27010:27017
restart: unless-stopped
postgres:
image: postgres:16-alpine
ports:
- 5432:5432
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
volumes:
- postgres_storage:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 30s
timeout: 5s
retries: 10
restart: unless-stopped
api:
image: registry.moodrob.com/valeria-api
depends_on:
- database
environment:
DATABASEURL_FILE: /run/secrets/valeriaurldb
SECRETTOKEN_FILE: /run/secrets/secrettoken
APIHOSTNAME: https://PUBLICHOSTNAME
APIHOSTDESC: DESCRIPTION_OF_SERVER
APIPORTPUBLIC: 80
TZ: Europe/Madrid
secrets:
- valeriaurldb
- secrettoken
volumes:
- conductor:/data
ports:
- 5050:5000
conductor:
image: registry.moodrob.com/valeria-conductor
environment:
TZ: Europe/Madrid
restart: always
ports:
- 1880:1880
frontend:
image: registry.moodrob.com/valeria-frontend
environment:
TZ: Europe/Madrid
REACT_APP_API_URL: https://valeria.grupohereda.com
ports:
- 3050:3000
secrets:
valeriadbpassword:
external: true
valeriaurldb:
external: true
secrettoken:
external: true
volumes:
valeriadb:
external: true
conductor:
external: true
valeria_postgres:
external: true
stack.yml
version: "3.8"
services:
database:
image: mongo:4.4.10
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/valeriadbpassword
secrets:
- valeriadbpassword
volumes:
- valeriadb:/data/db
- valeriadb:/data/configdb
ports:
- 27010:27017
deploy:
placement:
constraints:
- node.hostname == maria002
restart: unless-stopped
networks:
- valeria
postgres:
image: postgres:latest
ports:
- 5432:5432
deploy:
placement:
constraints:
- node.hostname == maria001
environment:
- POSTGRES_USER=root
- POSTGRES_DB=n8n
- POSTGRES_PASSWORD_FILE=/run/secrets/valeriapostgrespassword
secrets:
- valeriapostgrespassword
volumes:
- postgres:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 30s
timeout: 5s
retries: 3
networks:
- valeria
api:
image: registry.moodrob.com/valeria-api
depends_on:
- database
environment:
DATABASEURL_FILE: /run/secrets/valeriaurldb
SECRETTOKEN_FILE: /run/secrets/secrettoken
APIHOSTNAME: https://valeria.grupohereda.com
APIHOSTDESC: Grupo Hereda ValerIA server
APIPORTPUBLIC: 80
TZ: Europe/Madrid
secrets:
- valeriaurldb
- secrettoken
volumes:
- public:/app/_public
- local:/app/_local
# - internal:/app/_internal
# - filesync:/app/_filesync
ports:
- 5050:5000
networks:
- valeria
deploy:
placement:
constraints:
- node.hostname == maria001
conductor:
image: registry.moodrob.com/valeria-conductor
environment:
TZ: Europe/Madrid
restart: always
volumes:
- conductor:/root
- filesync:/archives
- public:/public
- local:/local
- internal:/internal
ports:
- 1881:1880
depends_on:
- api
# deploy:
# placement:
# constraints:
# - node.hostname == maria002
networks:
- valeria
frontend:
image: registry.moodrob.com/valeria-frontend
environment:
TZ: Europe/Madrid
WDS_SOCKET_PORT: 0
REACT_APP_API_URL: https://valeria.grupohereda.com
volumes:
- public:/app/public
ports:
- 3050:3000
depends_on:
- api
networks:
- valeria
deploy:
placement:
constraints:
- node.hostname == maria001
filesync:
image: rclone/rclone
container_name: filesync
restart: always
command: rcd --rc-web-gui --rc-allow-origin --rc-web-gui-update --rc-addr :5572 --rc-user admin --rc-pass admin
ports:
- 5572:5572
- 53682:53682
volumes:
- filesync:/config/rclone
- filesync:/logs
environment:
PHP_TZ: Europe/Madrid
PUID: 1000
PGID: 1000
networks:
- valeria

secrets:
valeriadbpassword:
external: true
valeriaurldb:
external: true
secrettoken:
external: true
valeriapostgrespassword:
external: true

volumes:
valeriadb:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/volumes/valeria/valeriadb
postgres:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/volumes/valeria/postgres
conductor:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/volumes/valeria/conductor
public:
external: true
# driver: local
# driver_opts:
# type: none
# o: bind
# device: /mnt/volumes/valeria/public
local:
external: true
filesync:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/volumes/drive

internal:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/volumes/valeria/internal
networks:
valeria:
name: valeria

Problemas:

  • MongoDB. Las versiones modernas no son ocmpatibles con algunos procesadores de AMD antiguos. En ese caso usar la versión 4.4.10.
stack.yml
...
services:
database:
image: mongo:4.4.10
...

enviroment

Con el fichero .env o el enviroment se puede configurar el funcionamiento de ValerIA.

modo desarrollo

Permite que las peticiones de una determinada IP no necesiten autenticación.

.env
    MODE = dev
IPDEV = 127.0.0.1

base de datos

Para que acceda a la base de datos de mongoDB que deseemos o usar diferentes usuarios o claves.

.env
    DATABASEURL = mongodb://admin:PA$$W0RD@localhost:27018