前言

昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下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. Fire-Fighting Hero(多源最短路和单源最短路)

    题:https://nanti.jisuanke.com/t/41349 分析:对于hero来说,走单源最短路,然后遍历dis数组中的最大值即可找到,对于消防员来说,走多源最短路,只需要建个超级起点连 ...

  2. uname|mv|tar -xzvf|

    $ ls CAFE-4.2.1.tar.gz mcl-latest.tar.gz mysql-5.4.3-beta-linux-i686-glibc23.tar.gz.1 orthomclSoftwa ...

  3. Pivotal tc Server Integration for Eclipse

    Pivotal tc Server Integration for Eclipse

  4. Django环境的搭建以及最简示例

    一.环境的搭建 先安装pip yum install python-pip 安装失败: 安装epel扩展源 yum install epel-release 在安装pip 再利用pip安装django ...

  5. 图文并解Word插入修改删除批注

    .插入批注 首先选择对象,比如部分文字[hd1] ,之后执行这样的操作:"插入"→"批注":插入的批注处于编辑状态,可以直接输入批注的文字即可;图解如下: .修 ...

  6. 秒搭Kubernetes之使用Rancher

    Rancher 在接触Docker和K8s的前阶段就耳闻目睹到Rancher,但是没有进一步接触过.直到将K8s搭建完成.才进一步了学习与实践Rancher. Rancher是简便易用的容器管理.其中 ...

  7. 用shell脚本新建文件并自动生成头说明信息

    目标: 新建文件后,直接给文件写入下图信息 代码实现: [root@localhost test]# vi AutoHead.sh #!/bin/bash #此程序的功能是新建shell文件并自动生成 ...

  8. Linux下多线程复制文件(C)

    Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

  9. array-2

    数组的基本操作 JS随机操作数组元素 Math.random() 结果为0-1间的一个随机数[0,1) Math.round(num) 参数num为一个数值,函数结果为num四舍五入的整数 Math. ...

  10. JAVA如何判断两个字符串是否相等

    ==比较引用,equals 比较值 1.java中字符串的比较:== 我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题 example1: String a=&qu ...