Files
web_server/docker-compose.yml
2025-11-24 12:57:23 +00:00

80 lines
1.9 KiB
YAML

networks:
app-network:
driver: bridge
services:
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
environment:
BACKEND_HOST: "${BACKEND_HOST}" # from .env
BACKEND_PORT: "${BACKEND_PORT}" # from .env
DOMAIN: "${DOMAIN}" # from .env
restart: unless-stopped
depends_on:
- backend
networks:
- app-network
ports:
- 80:80
- 443:443
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
- ./html/:/etc/nginx/html:ro
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
command: certonly --webroot -w /var/www/certbot --email ${EMAIL} -d ${DOMAIN} -d www.${DOMAIN} --agree-tos --non-interactive
networks:
- app-network
certbot-renew:
image: certbot/certbot
container_name: certbot-renew
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; sleep 12h & wait $${!}; done;"
networks:
- app-network
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: "${BACKEND_HOST}"
restart: unless-stopped
depends_on:
- db
networks:
- app-network
env_file:
- ./.env
db:
image: postgres:16
container_name: "${POSTGRES_HOST}"
restart: unless-stopped
environment:
POSTGRES_USER: "${POSTGRES_USER}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_DB: "${POSTGRES_DB}"
networks:
- app-network
icecast2:
image: pltnk/icecast2
container_name: icecast2
restart: always
volumes:
- ./icecast/icecast.xml:/etc/icecast2/icecast.xml
env_file:
- ./.env