Files
lasuite-messages/compose.yaml
T
Sylvain Zimmer d789bb48ca ✨(e2e) make end-to-end emailing work!
You can now send emails to the inbound MTA, which will forward them
to the Django MDA. You can then read them (served through REST) from
the frontend and compose a reply! The frontend will POST the message
to Django, which will build an RFC5322 message and send it to the
outbound MTA, which will relay it to the local mailcatcher where you
can view your reply. Phew!

Initial documentation in the README but this is the core loop that
will be expanded upon, with diagrams and videos!
2025-04-22 18:47:35 +02:00

240 lines
5.6 KiB
YAML

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
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;"
app-dev:
build:
context: .
target: backend-development
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
# createbuckets:
# condition: service_started
# 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
- app-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:
- app-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