前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在群晖上使用 Traefik

在群晖上使用 Traefik

作者头像
soulteary
发布2019-09-28 18:26:44
2.7K0
发布2019-09-28 18:26:44
举报
文章被收录于专栏:为了不折腾而去折腾的那些事

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2019年07月18日 统计字数: 7078字 阅读时间: 15分钟阅读 本文链接: https://soulteary.com/2019/07/18/traefik-on-synology.html


在群晖上使用 Traefik

这篇文章聊聊如何在群晖系统上使用 Traefik,让 NAS 设备摇身一变为好用的 Web 服务器。

迄今为止,我已经写了接近三十篇搭配 Traefik 使用的各种开源软件记录,所以如果你想了解更多,不妨看看那些历史文章。

写在前面

因为我家里的设备已经有安装 Traefik ,为了能够使用干净纯粹的环境,本次基于虚拟机进行演示:虚拟机群晖系统版本 6.1+,可以用于 6.2+ 的系统使用(新版本只有界面有差异,功能、配置方面是一致的)。

为了方便文章描述,我自签了证书,并将域名配置给了这台“群晖”虚拟机。

在群晖上使用 Traefik 有两种玩法:

  • 单独使用 Traefik ,指定一个非 80 / 443 端口提供服务。
  • 使用 Traefik 配合系统自带的 Nginx 使用,支持通过 80 /443 端口访问服务。

在继续聊 Traefik 前,必须先了解群晖系统的一些默认逻辑

  • 群晖默认提供 Web 界面 ,支持用户在浏览器上使用 5000 或者 5001 端口进行 HTTP/HTTPS 的方式使用系统,可以配置用户自己的 SSL 证书。
  • 群晖默认逻辑是用户直接访问 IP 或者主机域名后(不带端口号),直接跳转上面的 5000/5001 端口。
  • 群晖各种应用/共享协议会使用低位端口号,如果不想冲突,用户定义端口需要规避这类端口,如发生端口冲突的事情,冲突软件就只能进行“二选一”了,那个软件先启动,那么另外一个就只能报错退出了。

所以这里我们需要记住两条基础规则

  • 80/443 端口没有那么好用,使用 Traefik 等三方软件得带着端口号,忍受“不完美”。
  • 需要规避一堆低位端口,避免让系统/应用功能不可用。

先聊聊如何单独使用 Traefik。

(下文中使用的域名需要自己进行 hosts 绑定或者 DNS 解析指向)

单独使用 Traefik

单独使用 Traefik 非常简单,就像上面两条规则描述的那样。

不过为了方便后续维护,Traefik 推荐运行在容器当中,所以如果之前没有安装它的话,需要要在套件中找到 Docker 并进行安装,安装完毕之后,可以看到 FileStation 中多了一个名为 docker 的目录。

将 Traefik 作为服务运行

Traefik 默认的端口是 80 ,上文提到过,这个端口默认被系统占用,所以我们这里将端口映射到一个相对冷僻的高位数字: 52080

代码语言:javascript
复制
version: '3'
services:
  traefik:    image: traefik:v1.7-alpine    restart: always    container_name: traefik    ports:      - 52080:80    networks:      - traefik    command: traefik -c /etc/traefik.toml    volumes:      - /etc/localtime:/etc/localtime:ro      - /var/run/docker.sock:/var/run/docker.sock      - ./traefik.toml:/etc/traefik.toml    healthcheck:      test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:4399/ || exit 1"]
networks:  traefik:    external: true

将配置保存为 docker-compose.yml ,我们继续编写 traefik 的配置文件: traefik.toml

代码语言:javascript
复制
debug = falsesendAnonymousUsage = falsedefaultEntryPoints = ["http"]
[entryPoints]    [entryPoints.http]        address = ":80"        compress = true    [entryPoints.traefik-api]        address = ":4399"
[file]    [backends]        [backends.dashboard]            [backends.dashboard.servers.server1]                url = "http://127.0.0.1:4399"
[frontends]    [frontends.dashboard]        entrypoints = ["http"]        backend = "dashboard"        [frontends.dashboard.routes.route01]            rule = "Host:dashboard.orange.lab.com"
[traefikLog]filePath = "/tmp/traefik.log"
[accessLog]filePath = "/tmp/access.log"
[api]entryPoint = "traefik-api"dashboard = truedefaultEntryPoints = ["http"]
[docker]endpoint = "unix:///var/run/docker.sock"domain = "traefik.orange.lab.com"watch = trueexposedbydefault = falseusebindportip = falseswarmmode = false

将两个文件单独保存之后,把文件上传到群晖上,启动 Traefik:(这里以刚刚系统自动创建的 docker 目录为例)

代码语言:javascript
复制
# 创建目录mkdir -p /volume1/docker/traefikcd /volume1/docker/traefik
docker network create traefikdocker-compose up -d

命令执行完毕后,访问 dashboard.orange.lab.com:52080 就能看到 Traefik 的 Dashboard 了。

因为暂时没有运行其他的应用,所以 Dashboard 看起来空空如也。

那么,让我们来添加两个应用,测试下 Traefik 的功能吧。

安装第一个应用(WordPress)

和 Nginx 作为反向代理不同的是,使用 Traefik 添加应用只需要注明一条规则,就能够让你的应用使用某个域名进行访问了,简化了非常多操作。

这里使用之前的文章 里的 WordPress 配置,并进行简化,启动第一个测试应用。

代码语言:javascript
复制
version: '3'
services:
  wp:    image: wordpress:5.2.2-php7.1-apache    restart: always    networks:      - traefik    environment:        WORDPRESS_DB_HOST: wp-db        WORDPRESS_TABLE_PREFIX: wp        WORDPRESS_DB_NAME: wordpress        WORDPRESS_DB_USER: wordpress        WORDPRESS_DB_PASSWORD: wordpress    labels:      - "traefik.enable=true"      - "traefik.frontend.rule=Host:wp.orange.lab.com"      - "traefik.frontend.entryPoints=http"
  mariadb:    image: mariadb:10.3.8    restart: always    container_name: wp-db    networks:      - traefik    environment:      MYSQL_DATABASE: wordpress      MYSQL_USER: wordpress      MYSQL_PASSWORD: wordpress      MYSQL_ROOT_PASSWORD: soulteary
networks:  traefik:    external: true

将上面的配置保存为 docker-compose.yml ,和处理 traefik 类似,我们将它也上传到群晖的目录中,并将容器启动起来。

代码语言:javascript
复制
mkdir -p /volume1/docker/wordpresscd /volume1/docker/wordpress
docker-compose up -d

稍等片刻,打开 http://wp.orange.lab.com:52080 就能看到熟悉的安装界面了。

安装第二个应用(Nginx)

Nginx 除了作为服务端常常使用的服务网关外,还经常作为动静态站点的 Web 前端软件。

这里同样使用一篇之前文章 里的 Nginx 配置,并进行简化,启动第二个测试应用。

代码语言:javascript
复制
version: '3'
services:
  nginx:    image: nginx:1.15.10-alpine    restart: always    networks:      - traefik    expose:      - 80    labels:      - "traefik.enable=true"      - "traefik.frontend.rule=Host:ngx.orange.lab.com"      - "traefik.frontend.entryPoints=http"
networks:  traefik:    external: true

同样将上面的配置保存为 docker-compose.yml ,和处理前面的应用类似,我们还是将它上传到群晖的目录中,并将容器启动起来。

代码语言:javascript
复制
mkdir -p /volume1/docker/nginxcd /volume1/docker/nginx
docker-compose up -d

稍等片刻,打开 http://nginx.orange.lab.com:52080 你就能看到 “Welcome to nginx!” 的默认运行界面啦。

如果你经常搭建网站、尤其是在同一台机器进行搭建,你会发现使用 Traefik 来做“服务域名管理”确实是非常高效的。

我们再来看看之前的 Traefik Dashboard 吧。

这里会展示所有正确注册服务发现的应用,所以如果你在浏览器里打不开你的应用,可以在这里检查下应用是否存在、以及应用配置是否正确。

搭配 Web Station 使用

聊完 Traefik 独立使用,我们来讲讲怎么去掉地址栏里多余的端口号,比如上文中出现的 “52080”。

因为群晖更新频繁,每次更新都会覆盖用户对系统软件的修改。所以我们既要保证修改不会影响群晖各种功能正常,又要让我们的修改不受到群晖系统或者软件升级所影响。

改变群晖默认行为

我们知道,如果浏览器中想隐藏端口,需要使用两个默认端口:80 和 443 。这两个端口分别对应 HTTP 和 HTTPS 两种协议状况。

前文提到过群晖默认访问 80/443 端口会跳转到 5000/5001 端口的后台页面,但是如果我们安装官方提供的 Web Station 套件后,这个默认行为就可以被打破了

当安装完毕 Web Station 之后,我们再次访问群晖的域名或者IP,将看到上面这个蓝色的默认页面。

并且在 File Station 中,我们能看到有一个叫做 web 的目录被自动创建出来了,里面保存的文件就是我们看到的“蓝色界面”。

使用 Web Station 代理 Traefik 请求

既然群晖设备的地址可以去掉端口号,那么刚刚两个使用 Traefik 通过域名暴露服务的软件也没有什么问题。

打开 Web Station 套件,我们使用域名添加一个网站。

此刻,如果你使用这个域名打开网站,会发现网站的界面居然还是那个蓝色的初始界面。这是因为 Web Station 默认生成的配置只支持比较简单的场景,不过修改也很容易。

使用终端切换到 /etc/nginx/conf.d 目录,我们会看到一些配置和一些目录,这些目录默认是空的。

代码语言:javascript
复制
/etc/nginx/conf.d# ls0a977aa1-e8b6-4f98-9f0a-b595268aaa5b  dsm.docker.conf  dsm.ssdp.conf  events.conf  main.conf

在上面的 0a977aa1-e8b6-4f98-9f0a-b595268aaa5b 目录添加一个名为 user.conf的配置。

代码语言:javascript
复制
location / {    proxy_set_header Host                $http_host;    proxy_set_header X-Real-IP           $remote_addr;    proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;    proxy_set_header X-Forwarded-Proto   $scheme;    proxy_intercept_errors on;    proxy_http_version 1.1;    proxy_pass http://127.0.0.1:52080/;}

然后使用下面的命令重启群晖的 Web Station:

代码语言:javascript
复制
/usr/syno/bin/synopkg restart WebStation

当然,也可以使用标准的 nginx 命令

代码语言:javascript
复制
nginx -t && nginx -s reload

然后前文中我们启动的 WordPress 就能够正常使用了。按照上面的方法,再重复操作几次,其他的站点也都能去掉端口运行啦。

其他

在安装配置群晖系统的时候,其实我们除了可以打开 http://find.synology.com/ 或者下载使用 Synology Assistant 外。

只需要使用系统自带的 arp 命令就能发现等待操作的群晖设备,比如下面这样。

代码语言:javascript
复制
# arp -a
pear.pear (10.11.12.13) at 20:76:93:xx:yy:zz on en0 ifscope [ethernet]notebook.pear (10.11.12.110) at 8c:85:90:xx:yy:zz on en0 ifscope permanent [ethernet]diskstation.pear (10.11.12.179) at 0:11:32:xx:yy:zz on en0 ifscope [ethernet]? (172.16.24.1) at 0:50:5xx:yy:zz on vmnet1 ifscope permanent [ethernet]? (192.168.247.1) at 0:50:5xx:yy:zz on vmnet8 ifscope permanent [ethernet]? (224.0.0.251) at 1:0:5xx:yy:zz on en0 ifscope permanent [ethernet]? (239.255.255.250) at 1:0:5e:xx:yy:zz on en0 ifscope permanent [ethernet]

最后

近几年出现的群晖设备性能越来越强,甚至远胜前几年使用 ATOM CPU 的Web 服务器。

如果只是让他们简单的做一个存储型设备,未免太过浪费,物尽其用,或许会更好一些。

—EOF

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 折腾技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在群晖上使用 Traefik
    • 写在前面
      • 单独使用 Traefik
        • 将 Traefik 作为服务运行
        • 安装第一个应用(WordPress)
        • 安装第二个应用(Nginx)
      • 搭配 Web Station 使用
        • 改变群晖默认行为
        • 使用 Web Station 代理 Traefik 请求
      • 其他
        • 最后
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档