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