version: '3.4' services: nginx: image: nginx:stable-alpine volumes: - ./.docker/nginx/default.conf.template:/etc/nginx/templates/default.conf.template:ro ports: - '8080:80' environment: CORE_API_URI: http://core-api:8081 STATEMENTS_API_URI: http://statements-api:8081 WIDGETS_API_URI: http://widgets-api:8081 FRONTEND_URI: http://frontend:5173 LOGIN_SERVICE_URI: http://login-service:8081 depends_on: - core-api - statements-api - widgets-api - frontend - login-service frontend: build: ./pefi-frontend ports: - '5173:5173' login-service: build: ./pefi-login-service ports: - '8084:8081' environment: SERVER_PORT: 8081 FRONTEND_URI: http://localhost:8080 AUTHENTIK_ISSUER_URI: ${AUTHENTIK_ISSUER_URL} AUTHENTIK_BACK_CHANNEL_LOGOUT_URL: ${AUTHENTIK_BACK_CHANNEL_LOGOUT_URL} AUTHENTIK_CLIENT_ID: ${AUTHENTIK_CLIENT_ID} AUTHENTIK_CLIENT_SECRET: ${AUTHENTIK_CLIENT_SECRET} core-api: build: ./pefi-core-api ports: - '8081:8081' environment: SERVER_PORT: 8081 PROFILE: 'development' AUTHENTIK_ISSUER_URI: ${AUTHENTIK_ISSUER_URL} DATASOURCE_URL: jdbc:postgresql://database:5432/${POSTGRES_DB} DATASOURCE_USER: ${POSTGRES_USER} DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} KAFKA_SERVERS: localhost:9092 depends_on: - kafka1 - database statements-api: build: ./pefi-statements-api ports: - '8082:8081' environment: SERVER_PORT: 8081 PROFILE: 'development' AUTHENTIK_ISSUER_URI: ${AUTHENTIK_ISSUER_URL} DATASOURCE_URL: jdbc:postgresql://database:5432/${POSTGRES_DB} DATASOURCE_USER: ${POSTGRES_USER} DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} KAFKA_SERVERS: localhost:9092 depends_on: - kafka1 - database widgets-api: build: ./pefi-widgets-api ports: - '8083:8081' environment: SERVER_PORT: 8081 PROFILE: 'development' AUTHENTIK_ISSUER_URI: ${AUTHENTIK_ISSUER_URL} DATASOURCE_URL: jdbc:postgresql://database:5432/${POSTGRES_DB} DATASOURCE_USER: ${POSTGRES_USER} DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} depends_on: - database database: image: postgres:16.1-alpine ports: - '5432:5432' environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} zoo1: image: confluentinc/cp-zookeeper:7.3.2 hostname: zoo1 container_name: zoo1 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_SERVER_ID: 1 ZOOKEEPER_SERVERS: zoo1:2888:3888 kafka1: image: confluentinc/cp-kafka:7.3.2 hostname: kafka1 container_name: kafka1 ports: - "9092:9092" - "29092:29092" - "9999:9999" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:19092,EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9092,DOCKER://host.docker.internal:29092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 1 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_JMX_PORT: 9999 KAFKA_JMX_HOSTNAME: ${DOCKER_HOST_IP:-127.0.0.1} KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" depends_on: - zoo1