Esta documentación describe cómo levantar y ejecutar el proyecto SmartPot en tu entorno local utilizando Docker Compose. Se describen los servicios involucrados, sus configuraciones y cómo ejecutar los contenedores.
Asegúrate de tener instalados los siguientes programas:
- Docker: Instrucciones de instalación
- Docker Compose: Viene integrado con Docker Desktop, pero si usas Linux o configuraciones personalizadas, asegúrate de tener Docker Compose instalado. Instrucciones de instalación
El archivo docker-compose.yml
define los servicios que componen la infraestructura del proyecto:
- MongoDB: La base de datos que maneja toda la información relacionada con los cultivos y sensores.
- API SmartPot: El backend de la aplicación que interactúa con la base de datos y expone los endpoints REST.
- Web SmartPot: La aplicación frontend que se comunica con la API para mostrar información de los cultivos y permitir la interacción con el sistema.
Este servicio ejecuta un contenedor MongoDB, con la configuración necesaria para iniciar la base de datos smartpot
.
db-smartpot:
image: sebastian190030/db-smartpot:latest
container_name: smartpot-db
ports:
- "27018:27017"
volumes:
- mongo_data:/data/db
networks:
- smartpot-network
Configuración clave:
- Imagen: Usa la imagen de Docker
sebastian190030/db-smartpot:latest
. - Puertos: Expone el puerto 27017 del contenedor a 27018 en el host para acceder a la base de datos localmente.
- Volúmenes: Se utiliza un volumen (
mongo_data
) para persistir los datos de la base de datos. - Redes: El contenedor se conecta a la red
smartpot-network
para comunicarse con otros servicios.
Este servicio ejecuta el contenedor de la API de SmartPot, configurando las variables de entorno necesarias para conectarse a la base de datos MongoDB y manejar la lógica de autenticación y operaciones de la API.
api-smartpot:
image: sebastian190030/api-smartpot:latest
container_name: smartpot-api
environment:
- APP_NAME=SmartPot-API
- PORT=8091
- TITLE=SmartPot API
- DESCRIPTION=Documentación de la API REST de SmartPot
- VERSION=1.0.0
- AUTHOR=SmartPot Developers
- DATA_CONNECTION_METHOD=mongodb
- DATA_SOURCE_USERNAME=admin
- DATA_SOURCE_PASSWORD=admin
- DATA_SOURCE_DOMAIN=db-smartpot:27017
- DATA_SOURCE_DB=smartpot
- DATA_PARAMS=directConnection=true&serverSelectionTimeoutMS=100000&socketTimeoutMS=10000&appName=mongo
- SECURITY_JWT_SECRET_KEY=c8e9b6803afbcfa6edd9569c94c75ff4b144622b0a0570a636dffd62c24a3476
- SECURITY_JWT_EXPIRATION=86400000
- SECURITY_PUBLIC_ROUTES=/auth/login,/auth/verify
- HEADER_CORS_ALLOWED_ORIGINS=http://localhost:5173
- SERVER_TOMCAT_TIMEOUT=600000
- DEBUGGER_MODE=INFO
ports:
- "8091:8091"
depends_on:
- db-smartpot
networks:
- smartpot-network
Configuración clave:
- Imagen: Usa la imagen de Docker
sebastian190030/api-smartpot:latest
. - Variables de entorno: Incluye detalles sobre el nombre de la API, configuración JWT, detalles de conexión a la base de datos MongoDB (
localhost:27018
), y CORS para la aplicación frontend. - Dependencias: El servicio depende de
db-smartpot
para asegurar que la base de datos esté lista antes de iniciar la API. - Puertos: Expone el puerto 8091 para que la API sea accesible desde el navegador.
Este servicio ejecuta el contenedor de la aplicación web, configurando la URL base de la API para que el frontend se comunique con el backend.
web-smartpot:
image: sebastian190030/web-smartpot:latest
container_name: smartpot-web
environment:
- VITE_API_BASE_URL=http://localhost:8091
ports:
- "5173:5173"
networks:
- smartpot-network
Configuración clave:
- Imagen: Usa la imagen de Docker
sebastian190030/web-smartpot:latest
. - Variables de entorno: Configura la variable
VITE_API_BASE_URL
para que el frontend se comunique con la API de SmartPot a través dehttp://localhost:8091
. - Puertos: Expone el puerto 5173 para acceder a la aplicación web.
Para garantizar la persistencia de los datos de la base de datos MongoDB, se define un volumen:
volumes:
mongo_data:
El volumen mongo_data
se utiliza para almacenar los datos de MongoDB en el sistema local.
Se define una red llamada smartpot-network
para que los contenedores puedan comunicarse entre sí.
networks:
smartpot-network:
driver: bridge
Asegúrate de tener todos los archivos necesarios en tu máquina local, incluyendo el archivo docker-compose.yml
.
docker pull sebastian190030/db-smartpot:latest
docker pull sebastian190030/api-smartpot:latest
docker pull sebastian190030/web-smartpot:latest
Desde el directorio donde se encuentra tu archivo docker-compose.yml
, ejecuta el siguiente comando para iniciar los contenedores:
docker-compose -p smartpot up -d
Este comando:
-p smartpot
: Le da el nombresmartpot
al proyecto, lo que afecta los nombres de los contenedores, redes y volúmenes.up -d
: Levanta los contenedores en segundo plano (modo "detached").
- Base de Datos (MongoDB): Accede a la base de datos usando la URI de conexión
mongodb://admin:admin@localhost:27018/smartpot/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongo
. - API SmartPot: Accede a la API en
http://localhost:8091
. - Aplicación Web: Accede a la aplicación frontend en
http://localhost:5173
.
Para detener todos los servicios, simplemente ejecuta:
docker-compose -p smartpot down
Este comando detiene y elimina todos los contenedores, redes y volúmenes definidos en el archivo docker-compose.yml
.