services:

  app:
    image: mattermost/mattermost-team-edition:10.6
    container_name: ${mattermostServName}
    restart: ${restartPolicy}
    volumes:
      - matterConfig:/mattermost/config:rw
      - matterData:/mattermost/data:rw
      - matterLogs:/mattermost/logs:rw
      - matterPlugins:/mattermost/plugins:rw
      - matterClientPlugins:/mattermost/client/plugins:rw
      - /etc/ssl:/etc/ssl:ro
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /etc/environment:/etc/environment:ro
    env_file:
      - ../../secret/env-${mattermostServName}
    environment:
      - VIRTUAL_HOST=mattermost.${domain}
      - MM_PASSWORDSETTINGS_MINIMUMLENGTH=10
      - MM_PASSWORDSETTINGS_LOWERCASE=false
      - MM_PASSWORDSETTINGS_UPPERCASE=false
      - MM_PASSWORDSETTINGS_NUMBER=false
      - MM_PASSWORDSETTINGS_SYMBOL=true
    depends_on:
      - postgres
    links:
      - postgres
    expose:
      - ${matterPort}
    networks:
      - mattermostNet
      - postfixNet
    external_links:
      - ${smtpServName}:${smtpHost}.${domain}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.${mattermostServName}.rule=Host(`${matterHost}.${domain}`)"
      - "traefik.http.services.${mattermostServName}.loadbalancer.server.port=${matterPort}"
      - "traefik.docker.network=mattermostNet"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://app:${matterPort}"]
      interval: 20s
      retries: 10
      start_period: 20s
      timeout: 10s

  postgres:
    image: postgres:17-alpine
    container_name: matterPG
    restart: ${restartPolicy}
    networks:
      - mattermostNet
    security_opt:
      - no-new-privileges:true
    pids_limit: 100
    read_only: true
    tmpfs:
      - /tmp
      - /var/run/postgresql
    volumes:
      - matterPG:/var/lib/postgresql/data
#    environment:
      # timezone inside container
      # - TZ
    env_file:
      - ../../secret/env-${mattermostDBName}


volumes:
  matterPG:
  matterConfig:
  matterData:
  matterLogs:
  matterPlugins:
  matterClientPlugins:
  matterConfigLangSrv:
  matterConfigLangClt:

networks:
  mattermostNet:
    external: true
    name: mattermostNet
  postfixNet:
    external: true
    name: postfixNet