Proyecto de ejemplo con 3 contenedores:
- frontend: Nginx sirviendo archivos estáticos (HTML/JS/CSS) y proxy a la API.
- backend: Node.js + Express que expone una API REST para posts.
- db: PostgreSQL 15 con volumen persistente y script de inicialización.
/frontend
- index.html
- app.js
- style.css
- nginx.conf
- Dockerfile
/backend
- package.json
- index.js
- Dockerfile
/db/init
- init.sql
docker-compose.yml
README.md
- Docker
- Docker Compose
- Clonar el repositorio.
git clone https://github.com/jonatcantor/simple-blog-docker.git
- Variables de entorno. Crear un archivo .env con las siguientes variables:
# Puertos host:contenedor FRONTEND_PORT=8080 BACKEND_PORT=5000 POSTGRES_PORT=5432 # Variables base de datos POSTGRES_USER=bloguser POSTGRES_PASSWORD=blogpass POSTGRES_DB=blogdb # Configuración backend DB_HOST=db DB_PORT=5432 DB_USER=${POSTGRES_USER} DB_PASSWORD=${POSTGRES_PASSWORD} DB_NAME=${POSTGRES_DB} # Entorno (development | production) NODE_ENV=production
- Construir y levantar:
docker compose up --build
- Abrir en el navegador:
- Frontend: http://localhost:8080
- API (opcional, para pruebas): http://localhost:5000
GET /posts-> Lista todas las entradas.POST /posts-> Crea una entrada. Body JSON:{ "title": "...", "content": "..." }GET /health-> Estado del servicio.
- El frontend hace peticiones a
/api/*. Nginx en el contenedor frontend proxy_pass ahttp://backend:4000. - La base de datos se inicializa con
db/init/init.sql(tablapostsy ejemplos). - Datos persistentes en el volumen
db-data.
- Ver logs:
docker-compose logs -f - Listar contenedores:
docker ps - Acceder al shell del backend:
docker-compose exec backend sh