Files
ScommettiApp/docker-compose.yml
T
2026-04-01 23:49:19 +02:00

157 lines
3.9 KiB
YAML

version: '3.8'
services:
# PostgreSQL Database
postgres:
image: postgres:15-alpine
container_name: scommetti-postgres
environment:
POSTGRES_DB: amici_scommesse
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backend-node/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- scommetti-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d amici_scommesse"]
interval: 10s
timeout: 5s
retries: 5
# MongoDB Database
mongodb:
image: mongo:7
container_name: scommetti-mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root@servovio
MONGO_INITDB_DATABASE: amici-scommesse
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
networks:
- scommetti-network
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
# Keycloak Database
keycloak-db:
image: postgres:15-alpine
container_name: scommetti-keycloak-db
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: keycloak
volumes:
- keycloak_db_data:/var/lib/postgresql/data
networks:
- scommetti-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U keycloak -d keycloak"]
interval: 10s
timeout: 5s
retries: 5
# Keycloak Auth Server
keycloak:
image: quay.io/keycloak/keycloak:23.0.0
container_name: scommetti-keycloak
command: start-dev --import-realm
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://keycloak-db:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_HEALTH_ENABLED: "true"
KC_METRICS_ENABLED: "true"
KC_HOSTNAME_STRICT: "false"
KC_HTTP_ENABLED: "true"
ports:
- "8080:8080"
volumes:
- ./keycloak/realm-export.json:/opt/keycloak/data/import/realm.json:ro
- ./keycloak/themes/scommettiapp:/opt/keycloak/themes/scommettiapp:ro
depends_on:
keycloak-db:
condition: service_healthy
networks:
- scommetti-network
healthcheck:
test: ["CMD-SHELL", "exec 3<>/dev/tcp/localhost/8080 && printf 'GET /health/ready HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && timeout 5 cat <&3 | grep -q 'UP'"]
interval: 15s
timeout: 15s
retries: 10
start_period: 90s
# Backend Node.js
backend:
build:
context: ./backend-node
dockerfile: Dockerfile
container_name: scommetti-backend
environment:
NODE_ENV: development
PORT: 3000
POSTGRES_URI: postgres://admin:admin@postgres:5432/amici_scommesse
MONGO_URI: mongodb://mongodb:27017/amici-scommesse
KEYCLOAK_JWKS_URI: http://keycloak:8080/realms/scommettiapp/protocol/openid-connect/certs
ports:
- "3000:3000"
volumes:
- ./backend-node:/app
- /app/node_modules
depends_on:
postgres:
condition: service_healthy
mongodb:
condition: service_healthy
keycloak:
condition: service_healthy
networks:
- scommetti-network
command: npm start
restart: unless-stopped
# Frontend Angular
frontend:
build:
context: ./frontend-angular
dockerfile: Dockerfile
container_name: scommetti-frontend
environment:
NODE_ENV: development
ports:
- "4200:4200"
volumes:
- ./frontend-angular:/app
- /app/node_modules
- /app/.angular
depends_on:
- backend
- keycloak
networks:
- scommetti-network
restart: unless-stopped
volumes:
postgres_data:
driver: local
mongodb_data:
driver: local
keycloak_db_data:
driver: local
networks:
scommetti-network:
driver: bridge