diff --git a/docker-compose.yml b/docker-compose.yml index caf74f0..aabcf4f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,13 +4,93 @@ services: container_name: toir-light-postgres restart: unless-stopped environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: toir + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me} + POSTGRES_DB: ${POSTGRES_DB:-toir} + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-toir}", + ] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s ports: - - '5432:5432' + - "${POSTGRES_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql/data + networks: + - toir-light + + server: + build: + context: ./server + dockerfile: Dockerfile + container_name: toir-light-server + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + PORT: 3000 + DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-change-me}@postgres:5432/${POSTGRES_DB:-toir} + CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:8080,https://toir.greact.ru} + KEYCLOAK_ISSUER_URL: ${KEYCLOAK_ISSUER_URL:-https://sso.greact.ru/realms/toir} + KEYCLOAK_AUDIENCE: ${KEYCLOAK_AUDIENCE:-toir-backend} + KEYCLOAK_JWKS_URL: ${KEYCLOAK_JWKS_URL:-} + healthcheck: + test: + [ + "CMD", + "node", + "-e", + "fetch('http://127.0.0.1:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))", + ] + interval: 15s + timeout: 5s + retries: 5 + start_period: 20s + expose: + - "3000" + networks: + - toir-light + - proxy + + client: + build: + context: ./client + dockerfile: Dockerfile + args: + VITE_API_URL: ${VITE_API_URL:-/api} + VITE_KEYCLOAK_URL: ${VITE_KEYCLOAK_URL:-https://sso.greact.ru} + VITE_KEYCLOAK_REALM: ${VITE_KEYCLOAK_REALM:-toir} + VITE_KEYCLOAK_CLIENT_ID: ${VITE_KEYCLOAK_CLIENT_ID:-toir-frontend} + container_name: toir-light-client + restart: unless-stopped + depends_on: + server: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/healthz >/dev/null 2>&1 || exit 1"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 10s + ports: + - "${CLIENT_PORT:-8080}:80" + expose: + - "80" + networks: + - toir-light + - proxy volumes: postgres-data: + +networks: + toir-light: + driver: bridge + proxy: + external: true