Use Traefik as reverse proxy - set up Traefik

前文提到了如何用Docker快速部署Wordpress网站,但是那个方法相当于在该服务器上只host一个网站。如果要在同一个服务器上部署几个网站怎么办呢?我之前的文章中有叙述过如何使用server block在Nginx服务器上部署两个网站。但是那个方法有它的局限性,首先如果选择了Nginx作为服务器,那么其他的网站也只能在Nginx上面跑,如果有一些application需要在别的服务器类型例如Apache或者Node.js上跑就需要设置不同的port,而且设置起来很麻烦。

这个时候我们就考虑可以使用reverse proxy了。传统来说可以使用Nginx作为Reverse Proxy,原理是当用户输入一个网址的时候,Reverse Proxy个输入的网址把客户引导到不同的网站folder。

不过Nginx作为reverse proxy的设置稍显麻烦,我看了一段时间也不得要领,还好在这个时候我发现了Traefik

Traefik的设置虽然也不好上手,不过一旦知道工作原理之后很容易就可以手上添加不同的服务器了。

Docker是运行的前置条件,如果还没有安装Docker,可以参考我之前的文章

同样的,我们会使用Docker Compose来完成设置

创建Traefik Container
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.3'

services:
#给这个服务起个名字
reverse-proxy:
#使用官方的docker image
image: traefik
command: --api --docker
#打开80和443的端口(80是http端口,443是https端口)
ports:
- "80:80"
- "443:443"
#监视Docker Container的运行
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
#Traefik自己有一个Dashboard,一般在域名的8080端口,下面的设置是吧这个dashboard的界面放到sub domain
labels:
- "traefik.port=8080"
- "traefik.backend=reverse-proxy"
- "traefik.frontend.rule=Host:traefik.example.com"
- "traefik.enable=true"

运行sudo docker-compose up -d之后如果我们可以在sub domain打开Traefik的dashboard就代表我们创建好了

dashboard

给Traefik Dashboard加一层保护

我们之后的container都会在Dashboard显示出来,因此最好加上一层验证来保证只有自己可以access这个页面。这一步我们需要用到Apache的工具htpasswd。使用方法有两个,一个是用在线工具,另外就是参考官方文档用命令行生成。

1
2
3
4
5
#安装工具
sudo apt-get install apache2-utils
#生成用户名密码
htpasswd -nb test passW0rd!
test:$apr1$G4XsYvsX$VvhrMcFoB03MGm.sSIlr20

我们需要escape在我们密码里面的每一个$因此我们需要替换每一个$$$

替换过后test:$apr1$G4XsYvsX$VvhrMcFoB03MGm.sSIlr20

变成了test:$$apr1$$G4XsYvsX$$VvhrMcFoB03MGm.sSIlr20

接下来我们在Docker Compose的文件里加入一行

1
2
3
4
5
6
version: '3.3'
...
labels:
...
- "traefik.enable=true"
- "traefik.frontend.auth.basic=test:$$apr1$$G4XsYvsX$$VvhrMcFoB03MGm.sSIlr20"

然后我们再运行一次sudo docker-compose up -d 就可以让它生效了

dashwithpass