Configuración de TypeBot y MinIO con Docker Compose: Una Guía Completa
En este artículo vamos a abordar cómo configurar TypeBot, una herramienta potente para crear bots conversacionales, y MinIO, un servidor de almacenamiento de objetos compatible con Amazon S3, usando Docker Compose. Además, veremos cómo integrar NGINX para actuar como un proxy inverso, protegiendo tus servicios con certificados SSL de Let's Encrypt.
Esta configuración te permitirá levantar una infraestructura sólida con almacenamiento local escalable y fácil acceso a tus bots creados en TypeBot.
Prerrequisitos
Conocimientos básicos de Docker y Docker Compose.
Un servidor Linux con Docker y Docker Compose instalados.
NGINX instalado para manejar el tráfico externo.
Un dominio configurado con DNS que apunte a tu servidor.
Certificados SSL gestionados por Certbot (Let's Encrypt) para NGINX.
Paso 1: Estructura del docker-compose.yml
Primero, revisemos el archivo docker-compose.yml
, que define los contenedores necesarios para levantar TypeBot y MinIO.
# Archivo docker-compose.yml oficial de TypeBot.
version: '3.3'
volumes:
db-data: # Volumen persistente para la base de datos PostgreSQL de TypeBot
s3-data: # Volumen persistente para los datos almacenados en MinIO
services:
# Base de datos para TypeBot
typebot-db:
image: postgres:14-alpine
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=typebot
- POSTGRES_PASSWORD=typebot
# Builder de TypeBot para crear bots
typebot-builder:
image: baptistearno/typebot-builder:2.28.2
restart: always
depends_on:
- typebot-db
ports:
- '8080:3000' # Expone el puerto 8080 en la máquina local
extra_hosts:
- 'host.docker.internal:host-gateway'
env_file: .env # Configuración adicional desde el archivo .env
# Viewer de TypeBot para visualizar los bots
typebot-viewer:
image: baptistearno/typebot-viewer:2.28.2
restart: always
ports:
- '8081:3000' # Expone el puerto 8081 en la máquina local
env_file: .env
# MinIO para almacenamiento de objetos
minio:
image: minio/minio
command: server /data --console-address ":9001"
ports:
- '9000:9000' # Puerto para la API de MinIO
- '9001:9001' # Puerto para la consola de administración de MinIO
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
MINIO_BROWSER_REDIRECT_URL: https://storage.mydomain.com
volumes:
- s3-data:/data
# Servicio para crear un bucket en MinIO
createbuckets:
image: minio/mc
depends_on:
- minio
entrypoint: >
/bin/sh -c "
sleep 10;
/usr/bin/mc config host add minio http://minio:9000 minio minio123;
/usr/bin/mc mb minio/typebot;
/usr/bin/mc anonymous set public minio/typebot/public;
exit 0;
"
Explicación:
typebot-db: Utiliza PostgreSQL como base de datos para almacenar la información de los bots creados en TypeBot.
typebot-builder y typebot-viewer: Estos servicios manejan la creación y la visualización de los bots en el puerto 8080 (builder) y 8081 (viewer).
MinIO: Proporciona un almacenamiento compatible con S3, útil para almacenar archivos estáticos de tus bots o cualquier otro tipo de recurso.
createbuckets: Este servicio crea un bucket en MinIO llamado
typebot
y lo hace público para que se pueda acceder fácilmente a los objetos que almacenes allí.
Paso 2: Archivo .env
para TypeBot
El archivo .env
contiene las variables de entorno necesarias para que TypeBot y MinIO funcionen correctamente.
S3_ACCESS_KEY=minio
S3_SECRET_KEY=minio123
S3_BUCKET=typebot
S3_ENDPOINT=minio.mydomain.com
S3_SSL=true
NODE_OPTIONS=--no-node-snapshot
Explicación:
S3_ACCESS_KEY y S3_SECRET_KEY: Credenciales de MinIO para acceder a los recursos almacenados.
S3_BUCKET: El bucket
typebot
que MinIO utiliza.S3_ENDPOINT: El dominio configurado para acceder a MinIO a través de NGINX.
S3_SSL: Habilita el acceso seguro (HTTPS).
Paso 3: Configuración de NGINX como proxy inverso
El siguiente paso es configurar NGINX para que funcione como un proxy inverso para el almacenamiento y la consola de MinIO.
Configuración de NGINX (/etc/nginx/sites-available/storage.mydomain.com.conf
):
upstream minio_s3 {
least_conn;
server localhost:9000; # API de MinIO
}
upstream minio_console {
least_conn;
server localhost:9001; # Consola de MinIO
}
# Proxy para MinIO S3 API
server {
server_name minio.mydomain.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio_s3;
}
}
# Proxy para la consola de MinIO
server {
server_name storage.mydomain.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://minio_console/;
}
}
Explicación:
upstream: Define dos bloques para manejar las conexiones hacia los servicios de MinIO (
minio_s3
para la API yminio_console
para la consola).proxy_pass: Redirige las solicitudes hacia los servicios correctos.
Paso 4: Obtener Certificados SSL con Certbot
Antes de que puedas obtener los certificados es importante que configures los subdominios minio.mydomain.com y storage.mydomain.com en tu proveedor de DNS. Estos subdominios deben apuntar a la dirección IP de tu servidor donde está configurado MinIO.
Pasos para configurar los subdominios:
1. Accede al panel de control de tu proveedor de DNS.
2. Crea dos registros A o CNAME:
• minio.mydomain.com apuntando a la IP de tu servidor.
• storage.mydomain.com apuntando a la misma IP.
3. Guarda los cambios y espera a que los DNS se propaguen (esto puede tardar entre minutos y horas, dependiendo del proveedor
Para asegurar tu servidor con HTTPS, asegúrate de haber configurado Certbot correctamente. Luego, obtén los certificados ejecutando:
sudo certbot --nginx -d minio.mydomain.com -d storage.mydomain.com
Paso 5: Arrancar el entorno
Finalmente, puedes levantar todo el entorno ejecutando:
docker-compose up -d
Este comando levantará todos los servicios de TypeBot y MinIO, y podrás acceder a ellos a través de los subdominios configurados.
Ahora deberías poder acceder a la consola de minio a través de storage.mydomain.com y ver los objetos que guardas a través del dashboard de TypeBot.
Dashboard de Typebot
Consola de Minio
Conclusión
Este tutorial te ha guiado a través de la configuración completa de TypeBot y MinIO utilizando Docker Compose, con un proxy inverso configurado mediante NGINX. Ahora puedes gestionar tus bots y su almacenamiento de manera eficiente con una infraestructura robusta y segura.