Portainer
Puede usar cualquier gestor de contenedores, pero se recomienda usar Portainer. La documentación de Portainer se puede encontrar en Portainer y la instalacion en [Instalar Portainer](Instalar Portainer en cada uno de los servidores).
Instalación
Manager
En el ordenador que lleva el rol de manager, deberemos ejecutar los siguientes comandos:
Crea directorios para portainer y accede a ellos:
sudo mkdir -p /opt/portainer && cd /opt/portainer
Dependiendo de que vayamos a instalar la version Portainer Community Edition (CE) o la version Portainer Business Edition (BE), usaremos uno u otro comando.
-
Portainer Community Edition (CE)
sudo curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer -
Portainer Business Edition (BE)
curl -L https://downloads.portainer.io/ee2-19/portainer-agent-stack.yml -o portainer-agent-stack.yml
docker stack deploy -c portainer-agent-stack.yml portainer
Con esto ya tendremos instalado Portainer en el servidor. Podemos acceder usando https://IP.SW.A.RM:9443 donde IP.SW.A.RM es la IP del servidor donde se ha instalado Portainer.
Workers
En cada uno de los workers, deberemos ejecutar el siguiente comando para unirlos al cluster de docker swarm:
docker network create \
--driver overlay \
portainer_agent_network
docker service create \
--name portainer_agent \
--network portainer_agent_network \
-p 9001:9001/tcp \
--mode global \
--constraint 'node.platform.os == linux' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
--mount type=bind,src=//,dst=/host \
portainer/agent:2.19.4
PreConfiguración
Para la configuración del Portainer con el servidor de Docker:
- Ir a la seccion Enviroments.
- Pulsar en crear un nuevo Entorno.
- Añadir un enviroment con el
nombre
NOMBREDELCLUSTER
a elegir y elEnvironment address
IPDELDOCKER:9001
.
Configurar el Entorno
Dentro de Registry, pulsar en el boton Add Entorno
.
Dentro de Registry, pulsar en el botón Connect
.
Configuración
Para la configuración de Portainer con ValerIA hay que seguir estos tres procesos:
- Configurar el Registry de Portainer para que apunte a mood Robotics.
- Crear el Stack de ValerIA.
- Configurar el Stack de ValerIA.
Configurar el Registry
Dentro de Registry, pulsar en el boton Add Registry
.
Dentro de Registry, pulsar en el botón Custom Registry
.
Introducir los datos del registro (La clave solicitarla a [pablo@moodrobotics.com](mailto:pablo@moodrobotics.com)
y pulsar Add Registry`.
Crear los secrets de ValerIA
Para su puesta en marcha, ValerIA necesita de 4 secretos que se deben crear en Portainer. Para ello, en el menú de la izquierda, pulsar en Secrets
y después en Create Secret
.
Introducir los siguientes secretos:
valeriaurldb
con la URL de la base de datos de mongo. Cadena de texto como: mongodb://root:VALERIADBPASSWORD@database:27017 donde VALERIADBPASSWORD es la contraseña que se ha usara en la variable de entorno MONGO_INITDB_ROOT_PASSWORD.valeriasecrettoken
con el token secreto que se quiera para la aplicación. Codigo de unos 16 letras y numeros usado para encriptar los tokens del servidor y los clientes. Vale cualquier valor y no es necesario recordarlo, ya que se puede cambiar en cualquier momento.valeriadbpassword
con la contraseña que se quiera para el usuario root de mongo. Cadena de texto como: gdfps24dflsñfkjlsor32.valeriapostgrespassword
con la contraseña que se quiera para el usuario root de postgres. Cadena de texto como: tfn34h0esrt3464765rtf.valerian8npassword
con la contraseña que se quiera para el usuario admin de n8n. Cadena de texto como: sfn34h0esrt908esghfdu7F2.valerian8njwt
con el token secreto para las conexiones de n8n. Código de unos 16 letras y numeros usado para encriptar los tokens del servidor y los clientes. Vale cualquier valor y no es necesario recordarlo, ya que se puede cambiar en cualquier momento.
Crear el Stack de ValerIA
En el menu de la izquierda, pulsar en Stacks
y después en + Add Stack
.
Como nombre ponga en minusculas y sin espacios valeria u otro nombre descriptivo de la app.
Seleccione Web editor
y en el campo Web editor
pegue el siguiente código.
version: "3.8"
services:
database:
image: mongo:latest
user: "nobody"
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
networks:
- valeria
api:
image: registry.moodrob.com/valeria-api
depends_on:
- database
environment:
DATABASEURL_FILE: /run/secrets/valeriaurldb
SECRETTOKEN_FILE: /run/secrets/valeriasecrettoken
APIHOSTNAME: https://valeria.midominiodeempresa.com
APIHOSTDESC: MIEMPRESA ValerIA server
APIPORTPUBLIC: 80
TZ: Europe/Madrid
secrets:
- valeriaurldb
- valeriasecrettoken
ports:
- 5051:5000
volumes:
- public:/app/_public
- local:/app/_local
- internal:/app/_internal
- filesync:/app/_filesync
networks:
- valeria
conductor:
container_name: conductor
image: registry.moodrob.com/valeria-conductor
depends_on:
- api
ports:
- "1880:1880"
restart: always
volumes:
- conductor:/root
- local:/local
- public:/public
- internal:/internal
environment:
TZ: Europe/Madrid
# NODE_RED_ENABLE_PROJECTS: true
# NODE_RED_ENABLE_SAFE_MODE: true
# NODE_RED_ENABLE_CONTEXT_STORAGE: true
# NODE_RED_ENABLE_MODULE_LOADING: true
# NODE_RED_ENABLE_FLOW_CLUSTER: true
# NODE_RED_ENABLE_FLOW_CONFIGURATION: true
# NODE_RED_ENABLE_VERBOSE_LOGGING: true
# NODE_RED_ENABLE_DEBUGGING: true
# NODE_RED_ENABLE_EXTERNAL_MODULES: true
# NODE_RED_ENABLE_CUSTOM_CONTEXT: true
# NODE_RED_ENABLE_SESSIONS: true
# NODE_RED_ENABLE_OPTIMIZE_MEMORY: true
# NODE_RED_ENABLE_ADMIN_ROOT: true
networks:
- valeria
frontend:
container_name: frontend
image: registry.moodrob.com/valeria-frontend
ports:
- "3051:3000"
volumes:
- public:/app/public
environment:
TZ: Europe/Madrid
WDS_SOCKER_PORT: 0
REACT_APP_API_URL: https://valeria.midominiodeempresa.com
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"
volumes:
- filesync:/config/rclone
- filesync:/logs
environment:
PHP_TZ: Europe/Madrid
PUID: 1000
PGID: 1000
secrets:
valeriadbpassword:
external: true
valeriaurldb:
external: true
valeriasecrettoken:
external: true
volumes:
datadb:
external: true
conductor:
external: true
filesync:
external: true
public:
external: true
local:
external: true
internal:
external: true
networks:
valeria:
name: valeria
*En el caso de que el microprocesador del servidor no admita comandos Vx, se recomienda cambiar image: mongo:latest por image: mongo:4.4.10
En la sección de más abajo denominada Environment variables
, se deben sustituir los valores de las variables por los valores deseados.
Pulse en + Add an environment variable
.
Añada las siguientes variables de entorno:
MONGO_INITDB_ROOT_PASSWORD
con la contraseña que se quiera para el usuario root de mongo. Reduerde que la contraseña no puede contener los caracteres @, : o /. ejsfn34h0esrt908esghfdu7F2
.MONGO_INITDB_ROOT_USERNAME
con el nombre del usuario root de mongo.ejroot
.APIHOSTNAME
con el dominio que se quiera usar para acceder a la aplicación.ejhttps://valeria.midominiodeempresa.com
.APIHOSTDESC
con la descripción que se quiera para el servidor.ejMIEMPRESA ValerIA server
.APIPORTPUBLIC
con el puerto que se quiera usar para acceder a la aplicación.ej80
.REACT_APP_API_URL
: con el puerto que se quiera usar para acceder a la aplicación.ejhttps://valeria.midominiodeempresa.com
.TZ
con la zona horaria que se quiera usar.ejEurope/Madrid
.
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 "http://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"
Y pulse en Deploy the stack
.