前言

昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下Docker + Traefik v2.1.6 ,以下是一些配置的总结,初次接触,大佬勿喷。

我的系统环境是 Ubuntu 18.04.3 LTS

一、Docker 和 Docker Compose 安装

懒人使用一键脚本

1.Docker 安装

curl -sSL https://get.daocloud.io/docker | sh

安装后将会自动重启。

2.Docker Compose 安装

curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

可自行前往Github 查看最新版本 Releases · docker/compose

Docker以及Docker Compose简单介绍使用传送门:docker 及 docker-compose 的快速安装和简单使用

二、使用Docker Compose快速安装Traefik v2.1.6

1.建立traefik目录,新建docker-compose.yml文件 以下是我的配置,仅供参考

vim docker-compose.yml
version: "3.7"
services:
dykimy_traefik:
restart: always
image: traefik:v2.1.6
container_name: dykimy_traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# 入口点信息 其中 http & https 可以自己定义名称 在routers entrypoints中会用到
- "--entrypoints.http.address=:80"
- "--entrypoints.https.address=:443"
# ACME信息
- "--certificatesresolvers.dykimy.acme.httpchallenge=true"
- "--certificatesresolvers.dykimy.acme.httpchallenge.entrypoint=http"
- "--certificatesresolvers.dykimy.acme.email=${AcmeEmail}"
- "--certificatesresolvers.dykimy.acme.storage=/letsencrypt/acme.json"
networks:
- webgateway
ports:
- "80:80"
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/etc/timezone:/etc/timezone"
- "/etc/localtime:/etc/localtime"
labels:
- "traefik.enable=true"
# Traefik仪表板相关配置
- "traefik.http.routers.dykimy_traefik.rule=Host(`${TraefikDomain}`)"
- "traefik.http.routers.dykimy_traefik.tls.certresolver=dykimy"
- "traefik.http.routers.dykimy_traefik.entrypoints=https"
- "traefik.http.routers.dykimy_traefik.middlewares=authtraefik"
- "traefik.http.services.dykimy_traefik.loadbalancer.server.port=8080"
- "traefik.http.middlewares.authtraefik.basicauth.users=${TraefikUsers}" # 全局重定向到HTTPS
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.entrypoints=http"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https" # 重定向中间件
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
networks:
webgateway:
external:
# 请先自行创建网络 docker network create dykimy_gateway 名字自己定义
name: dykimy_gateway
vim .env
AcmeEmail=yourname@youremail.com
TraefikDomain=traefik.yourdomain.com
TraefikUsers=user:$apr1$7u80L7XB$Oqh/UiL5EjWr94lSkULKl0,user2:$apr1$U.eJNqst$DeuE7JjXgbiqP9g2nUq18/
#用户可以设置多个,生成htpasswd使用如下shell获取。
echo $(htpasswd -nb user password)
#user:$apr1$7u80L7XB$Oqh/UiL5EjWr94lSkULKl0 #如果需要直接卸载yml中,因为有$符号需要转移。
echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
#user:$$apr1$$i88wLyi0$$/2dB/ShipkdrTZpnDjcpo0

yml中的写法

labels:
- "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"

2.拉取镜像,启动容器

docker-compose up -d

访问 traefik.yourdomain.com 就可以看到Traefik 的界面啦,下面附送两张图片,Traefik V2的UI是真的好看。

3.其他站点如何配置?

我以一个whoami的示例给大家举例

vim docker-compose.yml
version: "3.7"
services:
whoami:
restart: always
image: containous/whoami
container_name: whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.yourdomain.com`)"
- "traefik.http.routers.whoami.entrypoints=https"
# 这里的dykimy 填写上面的ACME你定义的节点名称
- "traefik.http.routers.whoami.tls.certresolver=dykimy"
networks:
- webgateway
networks:
webgateway:
external:
name: dykimy_gateway

启动容器

docker-compose up -d

访问whoami.yourdomain.com就可以看到效果了

4.不带www转到www

我搜索了中文结果,英文结果,都没有找到traefik v2 设置不带www跳转www的方法,然后发现老外的需求都是带www跳转到不带www,哈哈,然后自己写了一个,仅供参考。

在 traefik 目录的 docker-compose.yml 下的 labels 节点,增加如下配置:

- "traefik.http.middlewares.https-force-www.redirectregex.regex=^https://([^www](?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(.+)"
- "traefik.http.middlewares.https-force-www.redirectregex.replacement=https://www.$${1}$${2}"
- "traefik.http.middlewares.https-force-www.redirectregex.permanent=true"

完整文件内容

version: "3.7"
services:
dykimy_traefik:
restart: always
image: traefik:v2.1.6
container_name: dykimy_traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# 入口点信息 其中 http & https 可以自己定义名称 在routers entrypoints中会用到
- "--entrypoints.http.address=:80"
- "--entrypoints.https.address=:443"
# ACME信息
- "--certificatesresolvers.dykimy.acme.httpchallenge=true"
- "--certificatesresolvers.dykimy.acme.httpchallenge.entrypoint=http"
- "--certificatesresolvers.dykimy.acme.email=${AcmeEmail}"
- "--certificatesresolvers.dykimy.acme.storage=/letsencrypt/acme.json"
networks:
- webgateway
ports:
- "80:80"
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/etc/timezone:/etc/timezone"
- "/etc/localtime:/etc/localtime"
labels:
- "traefik.enable=true"
# Traefik仪表板相关配置
- "traefik.http.routers.dykimy_traefik.rule=Host(`${TraefikDomain}`)"
- "traefik.http.routers.dykimy_traefik.tls.certresolver=dykimy"
- "traefik.http.routers.dykimy_traefik.entrypoints=https"
- "traefik.http.routers.dykimy_traefik.middlewares=authtraefik"
- "traefik.http.services.dykimy_traefik.loadbalancer.server.port=8080"
- "traefik.http.middlewares.authtraefik.basicauth.users=${TraefikUsers}" # 全局重定向到HTTPS
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.entrypoints=http"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https" # 重定向中间件
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # 全局重定向https请求不带www到www中间件
- "traefik.http.middlewares.https-force-www.redirectregex.regex=^https://([^www](?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(.+)"
- "traefik.http.middlewares.https-force-www.redirectregex.replacement=https://www.$${1}$${2}"
- "traefik.http.middlewares.https-force-www.redirectregex.permanent=true"
networks:
webgateway:
external:
# 请先自行创建网络 docker network create dykimy_gateway 名字自己定义
name: dykimy_gateway

对应修改站点下的docker-compose.yml为:

version: "3.7"
services:
whoami:
restart: always
image: containous/whoami
container_name: whoami
labels:
- "traefik.enable=true"
# 注意这里增加了www前缀
- "traefik.http.routers.whoami.rule=Host(`whoami.yourdomain.com`,`www.whoami.yourdomain.com`)"
- "traefik.http.routers.whoami.entrypoints=https"
# 这里的dykimy 填写上面的ACME你定义的节点名称
- "traefik.http.routers.whoami.tls.certresolver=dykimy"
# 使用咱们全局定义的https-force-www中间件
- "traefik.http.routers.whoami.middlewares=https-force-www"
networks:
- webgateway
networks:
webgateway:
external:
name: dykimy_gateway

好了,大功告成,一写博客就去了几个小时,哈哈哈,如果本文帮到您,请大家多多支持,如有不足之处,请指出,感谢您的阅读。

本文版权归 Dykimy博客园 共有,欢迎转载,如未经作者允许,转载需保留此段声明,并在文章显眼处注明出处,否则保留追究法律责任的权利。

Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试的更多相关文章

  1. 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】

    今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...

  2. StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略

    来源:https://www.williamyao.com/index.php/archives/1397/ 前言 最近收到 StartCom 的邮件,数字证书即将过期,想到去年在 StartSSL ...

  3. 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南

    随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...

  4. 腾讯云域名申请+ssl证书申请+springboot配置https

    阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...

  5. 阿里云申请ssl证书配置tomcat访问https

    首先去阿里云上面申请ssl证书,免费的,自己百度去. 申请完ok之后会让你下载一个压缩包,里面有四个文件. 在tomcat安装目录下创建cert文件夹,把这四个文件扔进去 在conf/server.x ...

  6. 申请ssl证书报提示caa提示

    申请ssl证书报下面提示caa提示,这和dns有关,换一组dns重新申请  send challenge err[acme error 'urn:acme:error:connection': DNS ...

  7. 使用acme.sh从Let's Encrypt申请SSL证书

    Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...

  8. Linux服务系统申请SSL证书方法

    inux主要面向专业性较强的技术人员,如果是WEB站点通常采取PHP语言为主选,可选的服务器环境中有Apache.Nginx.Tomcat这几类为主的框架环境,有的图方便会用一些可视化一键式的控制面板 ...

  9. 阿里云申请SSL证书 并部署到SpringBoot项目

    前提 有一台阿里云的服务器(安装了java环境) 有已经备案的域名,并且域名绑定上面的服务器 申请SSL证书 申请教程:https://blog.csdn.net/yunweifun/article/ ...

随机推荐

  1. unittest如何在循环遍历一条用例时生成多个测试结果

    引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...

  2. wsdl中含ref="s:schema"时处理

    转载地址:http://ljhzzyx.blog.163.com/blog/static/38380312201471375946602/

  3. springboot actuator监控笔记

    0 环境 系统:win10 编辑器:IDEA 1 概念 监控 管理自身信息(可以自定义) 的模块 2 文件配置 1 pom的配置 监控的添加 <dependency> <groupI ...

  4. Redis实现分布式读写锁(Java基于Lua实现)

    https://blog.csdn.net/grandachn/article/details/89032815 https://blog.csdn.net/xingsilong/article/de ...

  5. HTTP协议八种请求类型介绍

    HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法.也可以利用向W ...

  6. 1005 继续(3n+1)猜想 (25 分)

    题目:链接 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 ...

  7. [LC] 82. Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  8. pressure to compete|listen to sb do|have sb do|felt like|shouldn't have done|spring up|in honour of|not more than|much as|

    The pressure to compete causes Americans to be energetic, but it also puts then under a constant emo ...

  9. SpringMVC学习笔记八:文件上传及多个文件上传

    SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...

  10. (转)python中join()方法

    原文:http://blog.csdn.net/weixin_40475396/article/details/78227747 函数:string.join() Python中有join()和os. ...