version: '3.8' services: web: image: ${IMAGE_NAME} deploy: replicas: 1 update_config: parallelism: 1 delay: 10s order: stop-first restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s labels: - "app=vite-portfolio" - "traefik.enable=true" - "traefik.docker.network=${TRAEFIK_NETWORK:-traefik-public}" - "traefik.http.routers.vite-portfolio.rule=Host(`${PORTFOLIO_HOST:-localhost}`)" - "traefik.http.routers.vite-portfolio.entrypoints=${TRAEFIK_ENTRYPOINTS:-web}" - "traefik.swarm.network=${TRAEFIK_NETWORK:-traefik-public}" - "traefik.http.services.vite-portfolio.loadbalancer.server.port=80" networks: - portfolio-network - traefik-public drupal: image: drupal:10-apache ports: - target: 80 published: 8281 protocol: tcp mode: host environment: DRUPAL_DB_HOST: mariadb DRUPAL_DB_PORT: 3306 DRUPAL_DB_NAME: ${DRUPAL_DB_NAME:-drupal} DRUPAL_DB_USER: ${DRUPAL_DB_USER:-drupal} DRUPAL_DB_PASSWORD: ${DRUPAL_DB_PASSWORD:-drupal} volumes: - drupal-sites:/var/www/html/sites - drupal-modules:/var/www/html/modules - drupal-themes:/var/www/html/themes deploy: replicas: 1 restart_policy: condition: on-failure labels: - "app=drupal" networks: - portfolio-network mariadb: image: mariadb:11 environment: MARIADB_DATABASE: ${DRUPAL_DB_NAME:-drupal} MARIADB_USER: ${DRUPAL_DB_USER:-drupal} MARIADB_PASSWORD: ${DRUPAL_DB_PASSWORD:-drupal} MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-root} volumes: - mariadb-data:/var/lib/mysql deploy: replicas: 1 restart_policy: condition: on-failure labels: - "app=drupal-db" networks: - portfolio-network volumes: drupal-sites: drupal-modules: drupal-themes: mariadb-data: networks: portfolio-network: driver: overlay traefik-public: external: true name: ${TRAEFIK_NETWORK:-traefik-public}