version: "3.9" services: nginx: image: nginx:1.27-alpine container_name: riabenkyi_nginx ports: - "80:80" - "443:443" volumes: - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:ro - ./src:/var/www/html:ro - ./nginx/logs:/var/log/nginx - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot depends_on: - php networks: - appnet - proxy-net restart: unless-stopped php: build: ./php container_name: riabenkyi_php volumes: - /opt/apps/riabenkyi/src:/var/www/html - /opt/apps/riabenkyi/php/sessions:/var/lib/php/sessions - /opt/apps/riabenkyi/php/logs:/var/log/php networks: - appnet restart: unless-stopped empty: image: alpine:3.20 container_name: riabenkyi_placeholder command: ["sleep", "infinity"] volumes: - /opt/apps/riabenkyi/db/data:/data networks: - appnet restart: unless-stopped api: build: ./python container_name: riabenkyi_api hostname: riabenkyi-api volumes: - ./python/app:/app networks: - appnet restart: unless-stopped certbot: image: certbot/certbot container_name: riabenkyi_certbot volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" networks: appnet: driver: bridge proxy-net: external: true