/
kirillmatveev
/
quadro-server
Обзор
Документация
Войти
/
kirillmatveev
/
quadro-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
docker-compose.yaml
252 строки
7 KB
Kirill Matveev
fix
02 июн 2026, 17:58
02 июн 2026, 17:58
77211cf
Код
Авторство
О чём код?
networks: quadro-net: name: quadro-net driver: bridge volumes: postgres_data: name: ${POSTGRES_VOLUME:-postgres_data} kafka_data: name: ${KAFKA_VOLUME:-kafka_data} redis_data: name: ${REDIS_VOLUME:-redis_data} minio_data: name: ${MINIO_VOLUME:-minio_data} prometheus_data: grafana_data: x-common-env: &common-env APP_DATABASE_URL: ${DB_HOST} DB_NAME: ${DB_NAME} APP_DATABASE_USER: ${DB_USER} APP_DATABASE_PASSWORD: ${DB_PASSWORD} APP_DB_POOL_SIZE: ${DB_POOL_SIZE:-10} APP_KAFKA_BROKERS: kafka:29092 APP_REDIS_PASSWORD: ${REDIS_PASSWORD} APP_JWT_SECRET: ${JWT_SECRET} APP_JWT_ISSUER: ${JWT_ISSUER} APP_JWT_AUDIENCE: ${JWT_AUDIENCE} APP_JWT_REALM: ${JWT_REALM} APP_JWT_EXPIRATION_MS: ${JWT_ACCESS_EXPIRATION} APP_JWT_REFRESH_EXPIRATION_MS: ${JWT_REFRESH_EXPIRATION} services: # ========== PostgreSQL ========== postgres: # Используется только, если нет отдельного контейнера с БД. В таком случае указывает DB_HOST на этот контейнер. image: postgres-with-init:latest container_name: postgres restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${DB_NAME} healthcheck: test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${DB_NAME}" ] interval: 10s timeout: 5s start_period: 10s retries: 5 networks: - quadro-net pgAdmin: image: dpage/pgadmin4 container_name: pgadmin restart: unless-stopped ports: - "5050:81" environment: PGADMIN_DEFAULT_EMAIL: admin@example.com PGADMIN_DEFAULT_PASSWORD: admin PGADMIN_LISTEN_PORT: 81 DB_NAME: ${DB_NAME} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - ./servers.json:/pgadmin4/servers.json depends_on: - postgres networks: - quadro-net # ========== Kafka ========== kafka: image: confluentinc/cp-kafka:latest container_name: kafka restart: unless-stopped volumes: - kafka_data:/var/lib/kafka/data ports: - "${KAFKA_PORT_EXTERNAL:-9092}:9092" environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${KAFKA_INTERNAL_HOST:-kafka}:${KAFKA_INTERNAL_PORT:-29092},PLAINTEXT_HOST://${KAFKA_EXTERNAL_HOST:-localhost}:${KAFKA_EXTERNAL_PORT:-9092} KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: ${KAFKA_REPLICATION_FACTOR:-1} KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_NODE_ID: ${KAFKA_NODE_ID:-1} CLUSTER_ID: ${KAFKA_CLUSTER_ID:-cx33_hoaQrG0wLT9oWx4Gw} KAFKA_PROCESS_ROLES: ${KAFKA_PROCESS_ROLES:-controller,broker} KAFKA_CONTROLLER_QUORUM_VOTERS: ${KAFKA_CONTROLLER_VOTERS:-1@kafka:9093} KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENERS: PLAINTEXT://${KAFKA_INTERNAL_HOST:-kafka}:${KAFKA_INTERNAL_PORT:-29092},PLAINTEXT_HOST://0.0.0.0:${KAFKA_EXTERNAL_PORT:-9092},CONTROLLER://${KAFKA_CONTROLLER_HOST:-kafka}:${KAFKA_CONTROLLER_PORT:-9093} healthcheck: test: [ "CMD-SHELL", "kafka-topics --bootstrap-server localhost:${KAFKA_EXTERNAL_PORT:-9092} --list" ] interval: 10s timeout: 5s start_period: 30s retries: 5 networks: - quadro-net # ========== API Gateway ========== auth-service: image: ${CR_URI}/${REPOSITORY}:auth-service.${VERSION:-latest} container_name: auth-service restart: unless-stopped environment: <<: *common-env APP_DATABASE: auth_schema PORT: 8081 SEED_USERNAME: ${SEED_USERNAME} SEED_EMAIL: ${SEED_EMAIL} SEED_PASSWORD: ${SEED_PASSWORD} depends_on: postgres: condition: service_healthy kafka: condition: service_healthy networks: - quadro-net project-service: image: ${CR_URI}/${REPOSITORY}:project-service.${VERSION:-latest} container_name: project-service restart: unless-stopped environment: <<: *common-env APP_DATABASE: project_schema PORT: 8082 depends_on: postgres: condition: service_healthy kafka: condition: service_healthy networks: - quadro-net # team-service: # image: ${CR_URI}/${REPOSITORY}:team-service.${VERSION:-latest} # container_name: team-service # restart: unless-stopped # environment: # <<: *common-env # APP_DATABASE: team_schema # PORT: 8083 # depends_on: # postgres: # condition: service_healthy # kafka: # condition: service_healthy # networks: # - quadro-net notification-service: image: ${CR_URI}/${REPOSITORY}:notification-service.${VERSION:-latest} container_name: notification-service restart: unless-stopped environment: <<: *common-env PORT: 8085 depends_on: postgres: condition: service_healthy kafka: condition: service_healthy networks: - quadro-net task-service: image: ${CR_URI}/${REPOSITORY}:task-service.${VERSION:-latest} container_name: task-service restart: unless-stopped environment: <<: *common-env APP_DATABASE: task_schema PORT: 8084 depends_on: postgres: condition: service_healthy kafka: condition: service_healthy networks: - quadro-net api-gateway: image: ${CR_URI}/${REPOSITORY}:api-gateway.${VERSION:-latest} container_name: api-gateway restart: unless-stopped environment: <<: *common-env APP_SERVICES_AUTH: "http://auth-service:8081" APP_SERVICES_PROJECT: "http://project-service:8082" APP_SERVICES_TEAM: "http://team-service:8083" APP_SERVICES_TASK: "http://task-service:8084" APP_SERVICES_NOTIFICATION: "http://notification-service:8085" PORT: 8080 ports: - "8080:8080" depends_on: - auth-service # - team-service - project-service - task-service - notification-service networks: - quadro-net # ========== Monitoring ========== promtail: image: grafana/promtail:latest container_name: promtail volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock - ./promtail-config.yaml:/etc/promtail/config.yml command: -config.file=/etc/promtail/config.yml privileged: true networks: - quadro-net loki: image: grafana/loki:latest container_name: loki volumes: - ./loki-config.yaml:/etc/loki/local-config.yaml networks: - quadro-net prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus networks: - quadro-net grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - ./grafana/datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml - grafana_data:/var/lib/grafana networks: - quadro-net