version: '3.9' services: postfix: image: boky/postfix:latest container_name: postfix-production hostname: ${DOMAIN:-no-copy.ru} environment: - DOMAIN=${DOMAIN:-no-copy.ru} - ALLOWED_SENDER_DOMAINS=* - RELAYHOST= - DISABLE_SMTP_AUTH= - SMTP_USERNAME=${MAIL_USERNAME:-noreply@no-copy.ru} - SMTP_PASSWORD=${SMTP_PASSWORD:-nocopy!nocopy!} - RELAY_NETWORKS=172.16.0.0/12 - POSTFIX_mynetworks=127.0.0.0/8 172.17.0.0/16 172.16.0.0/12 - POSTFIX_smtpd_relay_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination - POSTFIX_smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination - DISABLE_SIGNING=true ports: - "25:25" - "587:587" networks: - app-network restart: unless-stopped storage: image: alpine:latest container_name: file-storage networks: - app-network volumes: - uploads_data:/storage:rw command: tail -f /dev/null restart: unless-stopped db: image: postgres:17.7 container_name: postgres environment: POSTGRES_DB: no_copy_ POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_SHARED_BUFFERS: 512MB POSTGRES_EFFECTIVE_CACHE_SIZE: 1536MB ports: - "54320:5432" volumes: - pgdata:/var/lib/postgresql/data - ./init-scripts:/docker-entrypoint-initdb.d:ro networks: app-network: aliases: - database restart: unless-stopped app: build: . container_name: app-backend environment: FILE_STORAGE_PATH: /data/uploads MAX_FILE_SIZE: 10737418240 FILE_CHUNK_SIZE: 1000000 POSTGRES_DB: no_copy_ POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_PORT: 5432 POSTGRES_HOST: db STORAGE_SERVICE_URL: http://storage:8081 SPRING_PROFILES_ACTIVE: docker MAIL_HOST: postfix MAIL_PORT: 25 MAIL_USERNAME: noreply@no-copy.ru SMTP_PASSWORD: nocopy!nocopy! SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE: "false" SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH: "false" SPRING_MAIL_PROPERTIES_MAIL_DEBUG: "true" depends_on: - db - postfix ports: - "80:8080" networks: app-network: aliases: - app - backend - api volumes: - uploads_data:/data/uploads:rw healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d no_copy_"] interval: 10s retries: 5 restart: unless-stopped volumes: pgdata: uploads_data: postfix-data: networks: app-network: external: true driver: bridge