name: st-messages services: postgresql: image: postgres:16.6 ports: - "6434:5432" healthcheck: test: ["CMD-SHELL", "pg_isready"] interval: 1s timeout: 2s retries: 300 env_file: - env.d/development/postgresql redis: image: redis:5 elasticsearch: # Same version as Scalingo image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2 environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - xpack.security.enabled=false - http.cors.enabled=true - "http.cors.allow-origin=/.*/" ports: - "9200:9200" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200"] interval: 1s timeout: 5s retries: 60 elasticvue: image: cars10/elasticvue:latest ports: - "8093:8080" environment: - "ELASTICVUE_CLUSTERS=[{\"name\": \"dev cluster\", \"uri\": \"http://localhost:9200\"}]" depends_on: elasticsearch: condition: service_healthy mailcatcher: image: maildev/maildev:2.2.1 ports: - "1081:1080" # minio: # user: ${DOCKER_USER:-1000} # image: minio/minio # environment: # - MINIO_ROOT_USER=st-messages # - MINIO_ROOT_PASSWORD=password # ports: # - "9000:9000" # - "9001:9001" # healthcheck: # test: ["CMD", "mc", "ready", "local"] # interval: 1s # timeout: 20s # retries: 300 # entrypoint: "" # command: minio server --console-address :9001 /data # volumes: # - ./data/media:/data # createbuckets: # image: minio/mc # depends_on: # minio: # condition: service_healthy # restart: true # entrypoint: > # sh -c " # /usr/bin/mc alias set st-messages http://minio:9000 st-messages password && \ # /usr/bin/mc mb st-messages/st-messages-media-storage && \ # /usr/bin/mc version enable st-messages/st-messages-media-storage && \ # exit 0;" backend-dev: build: context: src/backend target: runtime-dev args: DOCKER_USER: ${DOCKER_USER:-1000} user: ${DOCKER_USER:-1000} image: st-messages:backend-development environment: - PYLINTHOME=/app/.pylint.d - DJANGO_CONFIGURATION=Development env_file: - env.d/development/common - env.d/development/backend - env.d/development/postgresql ports: - "8071:8000" volumes: - ./src/backend:/app - ./data/static:/data/static depends_on: postgresql: condition: service_healthy restart: true redis: condition: service_started mta-out: condition: service_started elasticsearch: condition: service_healthy # createbuckets: # condition: service_started backend-poetry: profiles: - tools volumes: - ./src/backend:/app build: context: src/backend/ target: poetry pull_policy: build celery-dev: build: context: src/backend target: runtime-dev args: DOCKER_USER: ${DOCKER_USER:-1000} user: ${DOCKER_USER:-1000} image: st-messages:backend-development command: ["celery", "-A", "messages.celery_app", "worker", "-l", "DEBUG"] environment: - DJANGO_CONFIGURATION=Development env_file: - env.d/development/common - env.d/development/backend - env.d/development/postgresql volumes: - ./src/backend:/app - ./data/static:/data/static depends_on: - backend-dev # app: # build: # context: . # target: backend-production # args: # DOCKER_USER: ${DOCKER_USER:-1000} # user: ${DOCKER_USER:-1000} # image: st-messages:backend-production # environment: # - DJANGO_CONFIGURATION=Production # env_file: # - env.d/development/common # - env.d/development/backend # - env.d/development/postgresql # depends_on: # postgresql: # condition: service_healthy # restart: true # redis: # condition: service_started # #minio: # # condition: service_started nginx: image: nginx:1.25 ports: - "8083:8083" volumes: - ./docker/files/development/etc/nginx/conf.d:/etc/nginx/conf.d:ro depends_on: - keycloak - backend-dev - mta-in - mta-out frontend-dev: user: "${DOCKER_USER:-1000}" build: context: . dockerfile: ./src/frontend/Dockerfile.dev environment: - NEXT_PUBLIC_API_ORIGIN=http://localhost:8071 - NEXT_PUBLIC_S3_DOMAIN_REPLACE=http://localhost:9000 image: st-messages:frontend-development command: ["npm", "run", "dev"] volumes: - ./src/frontend/:/home/frontend/ ports: - "3000:3000" frontend-tools: user: "${DOCKER_USER:-1000}" profiles: - frontend-tools build: dockerfile: ./src/frontend/Dockerfile.dev volumes: - ./src/backend/core/api/openapi.json:/home/backend/core/api/openapi.json - ./src/frontend/:/home/frontend/ # frontend: # user: "${DOCKER_USER:-1000}" # build: # context: . # dockerfile: ./src/frontend/Dockerfile # target: frontend-production # args: # API_ORIGIN: "http://localhost:8071" # S3_DOMAIN_REPLACE: "http://localhost:9000" # image: st-messages:frontend-production # ports: # - "3001:3000" crowdin: image: crowdin/cli:3.16.0 volumes: - ".:/app" env_file: - env.d/development/crowdin user: "${DOCKER_USER:-1000}" working_dir: /app # node: # image: node:22 # user: "${DOCKER_USER:-1000}" # environment: # HOME: /tmp # volumes: # - ".:/app" mta-in: image: mta-in:latest build: context: src/mta-in/postfix dockerfile: Dockerfile env_file: - env.d/development/common - env.d/development/mta-in ports: - "8025:25" depends_on: - backend-dev mta-out: image: mta-out:latest build: context: src/mta-out/postfix dockerfile: Dockerfile env_file: - env.d/development/mta-out ports: - "8587:587" depends_on: mailcatcher: condition: service_started kc_postgresql: image: postgres:16.6 healthcheck: test: ["CMD-SHELL", "pg_isready"] interval: 1s timeout: 2s retries: 300 ports: - "6433:5432" env_file: - env.d/development/kc_postgresql keycloak: image: quay.io/keycloak/keycloak:20.0.1 volumes: - ./docker/auth/realm.json:/opt/keycloak/data/import/realm.json command: - start-dev - --features=preview - --import-realm - --proxy=edge - --hostname-url=http://localhost:8083 - --hostname-admin-url=http://localhost:8083/ - --hostname-strict=false - --hostname-strict-https=false environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_DB: postgres KC_DB_URL_HOST: kc_postgresql KC_DB_URL_DATABASE: keycloak KC_DB_PASSWORD: pass KC_DB_USERNAME: user KC_DB_SCHEMA: public PROXY_ADDRESS_FORWARDING: "true" ports: - "8080:8080" depends_on: - kc_postgresql