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 上而不会发生冲突。
好的,伙计们,这是我非常沮丧的问题:
我需要在上面部署一个带有 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 上而不会发生冲突。