← Почта · Все разделы

Docker Compose

> Исходные требования, сохранённые по темам. Рабочие команды и отличия реализации — в руководстве. Концептуальные примеры ниже не являются готовыми конфигурационными файлами.

Базовый compose должен выглядеть концептуально так:


name: mail



services:

  postgres:

    image: postgres:17-alpine

    container_name: mail-postgres

    restart: unless-stopped



    environment:

      POSTGRES_DB: stalwart

      POSTGRES_USER: stalwart

      POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password



    secrets:

      - postgres_password



    volumes:

      - ${MAIL_ROOT}/data/postgres:/var/lib/postgresql/data



    command:

      - postgres

      - -c

      - shared_buffers=64MB

      - -c

      - max_connections=30



    healthcheck:

      test: ["CMD-SHELL", "pg_isready -U stalwart -d stalwart"]

      interval: 30s

      timeout: 5s

      retries: 5



    mem_limit: 384m



    networks:

      - mail



    logging:

      driver: json-file

      options:

        max-size: 10m

        max-file: "3"





  stalwart:

    image: stalwartlabs/stalwart:v0.16

    container_name: mail-stalwart

    restart: unless-stopped



    depends_on:

      postgres:

        condition: service_healthy



    environment:

      STALWART_PUBLIC_URL: https://${MAIL_FQDN}



    secrets:

      - postgres_password

      - smtp2go_password



    volumes:

      - ${MAIL_ROOT}/data/stalwart-etc:/etc/stalwart

      - ${MAIL_ROOT}/data/blobs:/var/lib/stalwart-blobs



    ports:

      # Internet SMTP

      - "25:25"



      # Только LAN/VPN

      - "${LAN_IP}:587:587"

      - "${LAN_IP}:993:993"



      # WebUI, доступен NPM/LAN

      - "${LAN_IP}:18080:8080"



    mem_limit: 768m



    networks:

      - mail



    logging:

      driver: json-file

      options:

        max-size: 10m

        max-file: "3"





networks:

  mail:

    driver: bridge





secrets:

  postgres_password:

    file: ${MAIL_ROOT}/secrets/postgres_password



  smtp2go_password:

    file: ${MAIL_ROOT}/secrets/smtp2go_password

В .env:


MAIL_ROOT=/mnt/omv/work/SMTP

LAN_IP=192.168.x.x

MAIL_FQDN=mail.example.com

Паролей в .env быть не должно.