irtek
@irtek
Wordpress-addicted

Как настроить Traefik, чтобы не отваливалась БД?

Добрый день

Стандартная конфигурация WP + БД для Docker. Использую дополнительно Traefik
Когда в параметре WORDPRESS_HOST: стоит как обычно название контейнера db то работает стабильно без Traefik когда с Traefik тогда база начинает отваливаться в случайном порядке то есть подключение то нет при обновлении страницы. Если запустить сервис БД как сделано здесь в блоке db labels и прописать IP сервиса в WORDPRESS_HOST: 172.18.0.4:3306 то работает стабильно с Traefik. Но этот IP каждый раз меняется при перезагрузке, не удобно. Кто-нибудь сталкивался с таким? Сервис БД не обязательно было по идее делать в принципе, она локальная же.
docker-compose.yml

version: "3.9"

networks:
  proxynet:
    external: true

services:
  wordpress:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.reuvenveksler.rule=Host(`****.ru`)"
      - "traefik.http.routers.reuvenveksler.entrypoints=http"
    depends_on:
      - db
    build:
      context: ./docker/wordpress/
      dockerfile: Dockerfile
    volumes:
      - ./wordpress:/var/www/html
    env_file:
      - .env
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: dv
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
      WORDPRESS_DEBUG: 1
      WORDPRESS_CONFIG_EXTRA: |
        define( 'DISABLE_WP_CRON', true );
        define( 'WP_DEBUG_LOG', true );
        define( 'WP_DEBUG_DISPLAY', true);
        define( 'FS_DIRECT', true );
        define( 'SCRIPT_DEBUG', true );
        define( 'ALLOW_UNFILTERED_UPLOADS', true);
    networks:
      proxynet:

  db:
    image: mariadb
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - persistent_db:/var/lib/mysql
      - ./db:/app/db
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    labels:
      - "traefik.enable=true"
      - "traefik.tcp.routers.mysql.rule=HostSNI(`*`)"
      - "traefik.tcp.routers.mysql.entrypoints=mysql"
      - "traefik.tcp.routers.mysql.service=mysql-svc"
      - "traefik.tcp.services.mysql-svc.loadbalancer.server.port=3306"
    networks:
      proxynet:

volumes:
  persistent_db:
  persistent_wordpress:


Конфигурация Traefik дефолтная

services:
  traefik:
    image: traefik:v2.10
    container_name: "traefik"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--log.level=DEBUG"
      - "--providers.docker.exposedByDefault=false"
      - "--providers.docker.network=proxynet"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.mysql.address=:3306"
    ports:
      - "80:80"
      - "8080:8080"
      - "3306:3306"
#      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "letsencrypt:/letsencrypt"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.*****.ru`)"
      - "traefik.http.routers.traefik.service=traefik"
      - "traefik.http.routers.traefik.middlewares=authtraefik"
      - "traefik.http.middlewares.authtraefik.basicauth.users=devAdmin:$$2y$$05$$h9OxLeY20/5uiXjfPgdRxuFlrfqBf2QifYDgrwsR6rAEgX3/dpOGq"
      - "traefik.http.services.traefik.loadbalancer.server.port=8080"
    networks:
      - "proxynet"
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@dronmaxman
VoIP Administrator
Traefik по умолчанию трогает все контейнеры. Поэтому стоит явно указать что бы он не трогал этот контейнер.

labels:
   - "traefik.enable=false"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы