【问题标题】:Wordpress inside Docker with Traefik 2Docker 中的 Wordpress 和 Traefik 2
【发布时间】:2020-10-28 20:14:58
【问题描述】:

我按照这些Examples 在我的服务器上设置 traefik。我尝试按照其他一些指南在 docker 中设置我的 Wordpress-Site,并使其无需 nginx 即可通过 Traefik 访问。

目前我有一个在whoami.mydomain.com 上运行的whoami-Container,它运行良好。 但是访问blog.mydomain.com 只会导致502 Bad Gateway 你能告诉我我的错误是在traefik-labels 中还是与wordpress 相关?

我的文件如下所示:

traefik-compose.yml:

version: "3.7"

services:
  traefik:
    image: "traefik:v2.1"
    container_name: "traefik"
    hostname: "traefik"
    env_file:
      - .env
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./traefik.yml:/traefik.yml:ro"
      - "./acme.json:/acme.json"
    labels:
      - "traefik.enable=true"
      ## DNS CHALLENGE
      - "traefik.http.routers.traefik.tls.certresolver=lets-encr"
      - "traefik.http.routers.traefik.tls.domains[0].main=*.$MY_DOMAIN"
      - "traefik.http.routers.traefik.tls.domains[0].sans=$MY_DOMAIN"
      ## HTTP REDIRECT
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
      - "traefik.http.routers.redirect-https.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.redirect-https.entrypoints=web"
      - "traefik.http.routers.redirect-https.middlewares=redirect-to-https"

networks:
  default:
    external:
      name: $DEFAULT_NETWORK

traefik.yml:

## STATIC CONFIGURATION
log:
  level: INFO

api:
  insecure: true
  dashboard: true

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
 
certificatesResolvers:
  lets-encr:
    acme:
      caServer: https://acme-staging-v02.api.letsencrypt.org/directory
      storage: acme.json
      email: mymail@example.com
      dnsChallenge:
        provider: netcup

whoami-docker-compose.yml

version: "3.7"

services:
  whoami:
    image: "containous/whoami"
    container_name: "whoami"
    hostname: "whoami"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.rule=Host(`whoami.$MY_DOMAIN`)"
      - "traefik.http.routers.whoami.tls.certresolver=lets-encr"

networks:
  default:
    external:
      name: $DEFAULT_NETWORK

wordpress-docker-compose.yml

version: "3.7"

services:
  db:
    image: mysql:8.0
    container_name: db-blog
    restart: unless-stopped
    environment:
      - MYSQL_DATABASE=wordpress-blog
      - MYSQL_ROOT_PASSWORD=MYROOTPASSWORD
      - MYSQL_USER=blog-user
      - MYSQL_PASSWORD=MYPASSWORD
    volumes:
      - dbdata:/var/lib/mysql
    command: "--default-authentication-plugin=mysql_native_password"
    networks:
      - app-network

  wordpress:
    depends_on:
      - db
    image: wordpress:5.4.1-fpm-alpine
    container_name: wordpress-blog
    hostname: wordpress-blog
    restart: unless-stopped
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=blog-user
      - WORDPRESS_DB_PASSWORD=MYPASSWORD
      - WORDPRESS_DB_NAME=wordpress-blog
    volumes:
      - wordpress:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      - app-network
      - default
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.blog.entrypoints=websecure"
      - "traefik.http.routers.blog.rule=Host(`blog.$MY_DOMAIN`)"
      - "traefik.http.routers.blog.tls.certresolver=lets-encr"

volumes:
  wordpress:
  dbdata:
  
networks:
  default:
    external:
      name: $DEFAULT_NETWORK
  app-network:
    driver: bridge 

【问题讨论】:

    标签: wordpress docker traefik


    【解决方案1】:

    wordpress好像在8080监听,所以需要给wordpress容器加标签:

         - "traefik.http.services.blog.loadbalancer.server.port=8080"
    

    另外,您不需要在traefik 容器中公开该端口,因为您使用的是websecure 入口点,所以我建议删除此行

         - "8080:8080"
    

    来自traefik 容器。

    【讨论】:

    • 感谢您的回答。正如我今天发现的那样,正如我在自己的回答中所解释的那样,问题完全是另外一回事。 8080:8080 与 traefik 本身有关。它公开了 traefik 仪表板的端口。
    【解决方案2】:

    所以我自己想通了。主要问题是完全不同的东西。我的 docker-compose for wordpress 位于名为 mydomain.com 的目录中。不知何故,当目录包含.时,traefik 似乎有问题

    将目录更改为仅mydomain 后,它就像一个魅力。我还清理了我的wordpress-docker-compose.yml 以供任何想知道的人使用。

    version: '3'
     
    services:
       wordpress:
         container_name: wordpress-blog
         depends_on:
           - db
         image: wordpress:latest
         volumes:
           - wp_data:/var/www/html
           - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
         restart: on-failure
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: MYSUPERSECUREPASSWORD
         labels:
           - "traefik.enable=true"
           - "traefik.http.routers.blog.entrypoints=websecure"
           - "traefik.http.routers.blog.rule=Host(`$MY_DOMAIN`)"
           - "traefik.http.routers.blog.tls.certresolver=lets-encr"
    
       db:
         container_name: db-blog
         image: mariadb
         volumes:
           - db_data:/var/lib/mysql
         restart: on-failure
         environment:
           MYSQL_ROOT_PASSWORD: MYOTHERSUPERSECUREPASSWORD
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: MYSUPERSECUREPASSWORD
    volumes:
        wp_data:
        db_data:
    
    networks:
      default:
        external:
          name: $DEFAULT_NETWORK 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多