Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试
前言
昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下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 初次尝试的更多相关文章
- 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】
今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...
- StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略
来源:https://www.williamyao.com/index.php/archives/1397/ 前言 最近收到 StartCom 的邮件,数字证书即将过期,想到去年在 StartSSL ...
- 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南
随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...
- 腾讯云域名申请+ssl证书申请+springboot配置https
阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...
- 阿里云申请ssl证书配置tomcat访问https
首先去阿里云上面申请ssl证书,免费的,自己百度去. 申请完ok之后会让你下载一个压缩包,里面有四个文件. 在tomcat安装目录下创建cert文件夹,把这四个文件扔进去 在conf/server.x ...
- 申请ssl证书报提示caa提示
申请ssl证书报下面提示caa提示,这和dns有关,换一组dns重新申请 send challenge err[acme error 'urn:acme:error:connection': DNS ...
- 使用acme.sh从Let's Encrypt申请SSL证书
Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...
- Linux服务系统申请SSL证书方法
inux主要面向专业性较强的技术人员,如果是WEB站点通常采取PHP语言为主选,可选的服务器环境中有Apache.Nginx.Tomcat这几类为主的框架环境,有的图方便会用一些可视化一键式的控制面板 ...
- 阿里云申请SSL证书 并部署到SpringBoot项目
前提 有一台阿里云的服务器(安装了java环境) 有已经备案的域名,并且域名绑定上面的服务器 申请SSL证书 申请教程:https://blog.csdn.net/yunweifun/article/ ...
随机推荐
- python中读取mat文件
mat数据格式是Matlab的数据存储的标准格式 在python中可以使用scipy.io中的函数loadmat()读取mat文件. import scipy.io as scio path = 'e ...
- 瑞星:以虚拟化安全“Hold住”企业用户
自从云计算的概念诞生的哪一天起,就吸引了无数人的目光.自从2006年开始,云计算经过了雾里看花的朦胧.众说纷纭的迷茫,到现在各类应用与服务呈现出了百花齐放的姿态,引领着信息科技迈入了新纪元,而服务器虚 ...
- deeplearning.ai 序列模型 Week 1 RNN(Recurrent Neural Network)
1. Notations 循环序列模型的输入和输出都是时间序列.$x^{(i)<t>}$表示第$i$个输入样本的第$t$个元素,$T_x^{(i)}$表示输入的第$i$个样本的元素个数:$ ...
- 探索真实事物的虚拟再现——微软亚洲研究院SIGGRAPH Asia 2014精彩入选论文赏析
Asia 2014精彩入选论文赏析" title="探索真实事物的虚拟再现--微软亚洲研究院SIGGRAPH Asia 2014精彩入选论文赏析"> SIGGRAP ...
- HDU-6312-Game
题意: 一个集合里有1到n,两个人轮流从中取数,取出一个数的同时这个数的因子也被取走.取走最后一个数者为胜.判断是否先手必胜. 思路: 一道挺有意思的博弈题.一开始在纸上列出了n为1到6的情况,发现都 ...
- C语言学习笔记之获取文件长度
本文为原创文章,转载请标明出处 #include <stdio.h> #include <stdlib.h> int main() { FILE *inputFile; inp ...
- unittest(12)- 学习读取配置文件
1.配置文件格式 2.读取配置文件 import configparser """ 通过读取配置文件,来执行相应的测试用例 配置文件分为2个部分 第一部分:[SECTIO ...
- 微软Project Oxford帮助开发人员创建更智能的应用
Oxford帮助开发人员创建更智能的应用" title="微软Project Oxford帮助开发人员创建更智能的应用"> 假设你是一名对关于健身的应用充满奇思妙想 ...
- 餐厅随评系列之四:Umu日本料理(米其林二星)
文章目录 在过去的几个月,工作和生活都极其忙碌,因此博客短暂停更了一阵子.慢慢积累下了很多素材,从近期开始恢复博客更新,不过很多内容估计得靠回忆了. 索性采取"倒叙"的方法,先从最 ...
- 通过git shell 在Github上传本地项目
首先现在github上新建一个库,再进行如下操作,过程不赘述 1.打开git shell 2.cd到项目位置 // cd archives-vue 3.git init 4.Get add ...