diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ec0492e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,95 @@ +services: + # ================= INFRA ================= + mongodb: + image: mongo:${IMAGEM_LATEST} + profiles: ["infra"] + ports: + - "${MONGO_PORT}:27017" + volumes: + - mongodb_data:/data/db + networks: + - app-network + healthcheck: + test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet + interval: 10s + timeout: 5s + retries: 5 + + # ================= BACKEND ================= + + suite-api: + image: ${DOCKER_REPO}/suite-api:${IMAGEM_UNSTABLE_LATEST} + profiles: ["app"] + ports: + - "${BACKEND_SUITE_API_INTERNAL_PORT}:${BACKEND_SUITE_API_INTERNAL_PORT}" + environment: + - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT} + - MONGODB_CONNECTION_STRING=${MONGODB_CONNECTION_STRING} + - MONGODB_DATABASE=${MONGODB_DATABASE} + - SYSTEM_BASE_CONN=${SYSTEM_BASE_CONN} + - FRONTEND_CONN=${INTERNAL_HOST}:${FRONTEND_SUITE_APP_INTERNAL_PORT} + - KEEPALIVE_ATTENDANCE_SYSTEM_BACKEND_HOST=${KEEPALIVE_ATTENDANCE_SYSTEM_BACKEND_HOST} + - KEEPALIVE_ATTENDANCE_SYSTEM_FRONTEND_HOST=${KEEPALIVE_ATTENDANCE_SYSTEM_FRONTEND_HOST} + networks: + - app-network + + attendancesystem-api: + image: ${DOCKER_REPO}/backend-attendance-system-api:${IMAGEM_UNSTABLE_LATEST} + profiles: ["app"] + ports: + - "${BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT}:${BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT}" + environment: + - SYSBASE_URL=${SYSTEM_BASE_CONN} + - SystemBaseConn=${SYSTEM_BASE_CONN} + - FrotendConn=${EXTERNAL_HOST}:${FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT} + networks: + - app-network + + # ================= FRONTEND ================= + config-generator: + image: alpine:${IMAGEM_LATEST} + profiles: ["app"] + environment: + - BACKEND_HOST=${SYSTEM_BASE_HOST} + - BACKEND_PORT=${SYSTEM_BASE_PORT} + - FRONTEND_SUITE_URL=${EXTERNAL_HOST}:${FRONTEND_SUITE_APP_EXTERNAL_PORT} + - FRONTEND_ATTENDANCE_URL=${EXTERNAL_HOST}:${FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT} + - FRONTEND_ACCOUNT_URL=${EXTERNAL_HOST}:${FRONTEND_ACCOUNT_APP_EXTERNAL_PORT} + - FRONTEND_PEOPLE_URL=${EXTERNAL_HOST}:${FRONTEND_PEOPLE_APP_EXTERNAL_PORT} + - BACKEND_SUITE_API_URL=${EXTERNAL_HOST}:${BACKEND_SUITE_API_EXTERNAL_PORT} + - BACKEND_ATTENDANCE_API_URL=${EXTERNAL_HOST}:${BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT} + - BACKEND_PEOPLE_API_URL=${EXTERNAL_HOST}:${BACKEND_PEOPLE_API_EXTERNAL_PORT} + - BACKEND_ACCOUNT_API_URL=${EXTERNAL_HOST}:${BACKEND_ACCOUNT_API_EXTERNAL_PORT} + command: > + sh -c "apk add --no-cache gettext && + envsubst < /config.template.json > /output/config.json && + echo '✅ Config gerado com sucesso' && + chmod 644 /output/config.json" + volumes: + - ./config.template.json:/config.template.json + - config-volume:/output + restart: "no" + + attendancesystem-app: + image: ${DOCKER_REPO}/attendancesystem-frontend:${IMAGEM_UNSTABLE_LATEST} + profiles: ["app"] + volumes: + - config-volume:/config-inject:ro + entrypoint: > + sh -c "cp /config-inject/config.json /usr/share/nginx/html/config.json && + nginx -g 'daemon off;'" + ports: + - "${FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT}:${NGINX_DEFAULT_PORT}" + networks: + - app-network + depends_on: + config-generator: + condition: service_completed_successfully + +networks: + app-network: + name: attendancesystem-network + +volumes: + mongodb_data: + config-volume: \ No newline at end of file