services:

TRAEFIK:
image: traefik:v3.0
container_name: TRAEFIK
ports:
- "80:80"
- "443:443"
command:
- "--api=true"
- "--api.dashboard=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--providers.docker=true"
- "--certificatesresolvers.default.acme.tlschallenge=true"
- "--certificatesresolvers.[email protected]"
- "--certificatesresolvers.default.acme.storage=letsencrypt/acme.json"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
- ./logs/traefik:/var/log/traefik
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.routers.redirect.rule=HostRegexp({host:.+})"
- "traefik.http.routers.redirect.entrypoints=web"
- "traefik.http.routers.redirect.middlewares=redirect-to-https"
deploy:
resources:
limits:
memory: 192M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.2

POSTGRES:
hostname: testpg
image: postgres
container_name: POSTGRES
ports:
- 5432:5432
volumes:
- postgres_data:/var/lib/postgresql/data
- /srv/test/compose/data/pg_hba.conf:/etc/postgresql/pg_hba.conf:ro
environment:
POSTGRES_PASSWORD: ${DB_ROOT_PASSWORD}
POSTGRES_USER: ${DB_ROOT_USER}
POSTGRES_DB: test_db1
command:
- "postgres"
- "-c"
- "listen_addresses=*"
deploy:
resources:
limits:
memory: 256M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.4

PGADMIN:
image: dpage/pgadmin4
container_name: PGADMIN4
ports:
- "8888:80"
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_ROOT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_ROOT_PASSWORD}
volumes:
- pgadmin-data:/var/lib/pgadmin
depends_on:
- POSTGRES
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.20

MINIO:
image: minio/minio:latest
container_name: minio.test.com
volumes:
- ./minio_storage:/data
- ./config:/root/.minio
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
command: server --console-address ":9001" /data
labels:
- "traefik.enable=true"
- "traefik.http.routers.minio-api.rule=Host(v1.minio.test.com)"
- "traefik.http.routers.minio-api.entrypoints=websecure"
- "traefik.http.routers.minio-api.tls=true"
- "traefik.http.routers.minio-api.tls.certresolver=default"
- "traefik.http.routers.minio-api.service=minio-api-service"
- "traefik.http.services.minio-api-service.loadbalancer.server.port=9000"
- "traefik.http.routers.minio-console.rule=Host(v1.minio-console.test.com)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls=true"
- "traefik.http.routers.minio-console.tls.certresolver=default"
- "traefik.http.routers.minio-console.service=minio-console-service"
- "traefik.http.services.minio-console-service.loadbalancer.server.port=9001"
depends_on:
- POSTGRES
deploy:
resources:
limits:
memory: 256M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.3

www.test.com:
image : test/test:latest
container_name: www.test.com
labels:
- "traefik.enable=true"
- "traefik.http.routers.testcom.rule=Host(v1.test.com)"
- "traefik.http.routers.testcom.entrypoints=websecure"
- "traefik.http.services.testcom.loadbalancer.server.port=3000"
- "traefik.http.routers.testcom.tls=true"
- "traefik.http.routers.testcom.tls.certresolver=default"
depends_on:
- api.test.com
deploy:
resources:
limits:
memory: 256M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.9

api.test.com:
image: test/api.test.com:latest
container_name: api.test.com
labels:
- "traefik.enable=true"
- "traefik.http.routers.preprod.rule=Host(v1.preprod.api.test.com)"
- "traefik.http.routers.preprod.entrypoints=websecure"
- "traefik.http.services.preprod.loadbalancer.server.port=3000"
- "traefik.http.routers.preprod.tls=true"
- "traefik.http.routers.preprod.tls.certresolver=default"
depends_on:
- POSTGRES
deploy:
resources:
limits:
memory: 256M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.6

admin.test.com:
image : test/admin.test.com:latest
container_name: admin.test.com
labels:
- "traefik.enable=true"
- "traefik.http.routers.testadmin.rule=Host(v1.admin.test.com)"
- "traefik.http.routers.testadmin.entrypoints=websecure"
- "traefik.http.services.testadmin.loadbalancer.server.port=3000"
- "traefik.http.routers.testadmin.tls=true"
- "traefik.http.routers.testadmin.tls.certresolver=default"
depends_on:
- api.test.com
deploy:
resources:
limits:
memory: 256M
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.8

mail.test.com:
image: mailserver/docker-mailserver:latest
container_name: mail.test.com
ports:
- "465:465" # SMTPS
- "993:993" # IMAP
volumes:
- ./maildata:/var/mail
- ./mailstate:/var/mail-state
- ./config/:/tmp/docker-mailserver/
- "./letsencrypt:/etc/letsencrypt"
hostname: mail
domainname: test.com
environment:
- ENABLE_SPAMASSASSIN=1
- ENABLE_CLAMAV=1
- ENABLE_FAIL2BAN=1
- ENABLE_POSTGREY=0
- ONE_DIR=1
- PERMIT_DOCKER=network
- DMS_DEBUG=0
- ENABLE_IMAP=1
- SSL_TYPE=letsencrypt
- SSL_CERT_PATH=/etc/letsencrypt/live/mail.test.com/fullchain.pem
- SSL_KEY_PATH=/etc/letsencrypt/live/mail.test.com/privkey.pem
labels:
- "traefik.enable=true"
- "traefik.http.routers.mail.rule=Host(mail.test.com)"
- "traefik.http.routers.mail.entrypoints=websecure"
- "traefik.http.routers.mail.tls=true"
- "traefik.http.routers.mail.tls.certresolver=default"
depends_on:
- TRAEFIK
restart: unless-stopped
networks:
web:
ipv4_address: 172.18.0.30

volumes:
minio_storage: {}
postgres_data: {}
ssh-volume:
data:
pgadmin-data:
maildata:
mailstate:

networks:
web:
external: true
name: web
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16

Edit Report
Pub: 19 Mar 2025 06:46 UTC
Views: 460