Docker-compose 自动加密 ssl

Docker-compose with automatic lets encrypt ssl

好的,伙计们,这是我非常沮丧的问题:

我需要在上面部署一个带有 ssl 的 mautic 实例。请注意谁需要自动生成SSL,我想要一个完整的docker过程。

我尝试了所有方法,但显然不存在任何直接在 docker 上生成 SSL 的解决方案,我发现的所有内容都使用服务器级别。

我找到的最接近的解决方案是使用ftraefik,但是它会与mautic givinf冲突。

这是我的 docker-compose 文件:

version: "3"

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--api=true"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ${DATA_FOLDER}/letsencrypt:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro
      
  mauticdb:
    restart: always
    image: percona/percona-server:5.7
    container_name: mauticdb
    volumes:
      - mysql_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MAUTIC_DB_PASSWORD}
    command:
      --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

  mautic:
    restart: always
    image: mautic/mautic:latest
    container_name: mautic
    links:
      - mauticdb:mysql
    depends_on:
      - mauticdb
    ports:
      - 127.0.0.1:80:80
    volumes:
      - mautic_data:/var/www/html
    environment:
      - MAUTIC_DB_HOST=mauticdb
      - MYSQL_PORT_3306_TCP=3306
      - MAUTIC_DB_USER=root
      - MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
      - MAUTIC_DB_NAME=mautic
      - MAUTIC_RUN_CRON_JOBS=true
      - PHP_INI_DATE_TIMEZONE=${GENERIC_TIMEZONE}
    labels:
      - traefik.enable=true 
      # Routes
      - traefik.http.routers.mautic.rule=Host(`${MAUTIC_SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.mautic-secure.tls=true
      - traefik.http.routers.mautic.entrypoints=websecure
      - traefik.http.routers.mautic.tls.certresolver=mytlschallenge
      # Middlewares
      - traefik.http.middlewares.mautic.headers.SSLRedirect=true
      - traefik.http.middlewares.mautic.headers.contentTypeNosniff=true
      - traefik.http.middlewares.mautic.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.mautic.headers.forceSTSHeader=true
       
volumes:
  mautic_data:
  sslcerts:
  mysql_data:

Traefik 在端口 80 上与 Mautic 发生冲突。所以这根本行不通。

问:如何安装 Traefik 并使用它通过 HTTPS 代理 Mautic 请求?

并且:

如果 Traefik 不是正确的方法,我需要自动生成什么配置让加密基于 .env 文件中的域?

对任何工作的人开放。

谢谢;

运行 MAUTIC 在与 80 不同的端口上(因为这是 Traefik 使用的)

    ports:
      - "8081:80"

您还可以将 Traefik 配置为仅侦听端口 443:在这种情况下,它将仅接受 HTTPS 请求,而 MAUTIC 可以 运行 在端口 80 上而不会发生冲突。