前言

昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下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. Error、Bias、Variance及损失函数理解

    个人感觉理解误差.偏置.方差的一个好的解释,感谢分享:https://baijiahao.baidu.com/s?id=1601092478839269810&wfr=spider&f ...

  2. nowcoder-548C-Tachibana Kanade Loves Review

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言10485 ...

  3. htaccess 伪静态的规则

    利用htaccess文件可以很好的进行站点伪静态,并且形成的目标地址与真正的静态页面几乎一模一样,如abc.html等,伪静态可以非常好的结合SEO来提高站点的排名,并且也能给人一种稳定的印象. 由于 ...

  4. numpy和pandas的基础索引切片

    Numpy的索引切片 索引 In [72]: arr = np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]]) In [73]: arr Out[73]: a ...

  5. @Value默认值填null

    @Value("${topology.position.spout.maxpending:#{null}}") private Integer spoutMaxPending; @ ...

  6. 《内蒙古自治区第十二届大学生程序设计竞赛试题_G: 最大收益》

    问题 G: 最大收益 内存限制:128 MB时间限制:1 S标准输入输出 题目类型:传统评测方式:文本比较上传者:外部导入 提交:87通过:23 返回比赛提交提交记录 题目描述 Elly的叔叔经营一家 ...

  7. C++中字符串的表示与转换

    转换总结 1.char*转string:可以直接赋值. 2.char[]转string:可以直接赋值. 3.char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用st ...

  8. App Store成绞肉机 让创业者止步

    Store成绞肉机 让创业者止步" title="App Store成绞肉机 让创业者止步"> 曾几何时,苹果App Store一直被称之为创业者的天堂.似乎只要灵 ...

  9. 改变生活的移动计算——感受 MobiSys 2015

    MobiSys 2015" title="改变生活的移动计算--感受 MobiSys 2015"> 作者:微软亚洲研究院研究员 张健松 今年的MobiSys会议地点 ...

  10. 一、HTTP和HTTPS的基本概念

    1HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少. 2HT ...