在羣暉上使用 Traefik

本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)php

本文做者: 蘇洋html

建立時間: 2019年07月18日 統計字數: 7078字 閱讀時間: 15分鐘閱讀 本文連接: soulteary.com/2019/07/18/…前端


在羣暉上使用 Traefik

這篇文章聊聊如何在羣暉系統上使用 Traefik,讓 NAS 設備搖身一變爲好用的 Web 服務器。nginx

迄今爲止,我已經寫了接近三十篇搭配 Traefik 使用的各類開源軟件記錄,因此若是你想了解更多,不妨看看那些歷史文章web

寫在前面

使用一個嶄新的系統進行演示

由於我家裏的設備已經有安裝 Traefik ,爲了可以使用乾淨純粹的環境,本次基於虛擬機進行演示:虛擬機羣暉系統版本 6.1+,能夠用於 6.2+ 的系統使用(新版本只有界面有差別,功能、配置方面是一致的)。docker

配置 SSL 證書

爲了方便文章描述,我自簽了證書,並將域名配置給了這臺「羣暉」虛擬機。apache

在羣暉上使用 Traefik 有兩種玩法:編程

  • 單獨使用 Traefik ,指定一個非 80 / 443 端口提供服務。
  • 使用 Traefik 配合系統自帶的 Nginx 使用,支持經過 80 /443 端口訪問服務。

在繼續聊 Traefik 前,必須先了解羣暉系統的一些默認邏輯api

  • 羣暉默認提供 Web 界面 ,支持用戶在瀏覽器上使用 5000 或者 5001 端口進行 HTTP/HTTPS 的方式使用系統,能夠配置用戶本身的 SSL 證書。
  • 羣暉默認邏輯是用戶直接訪問 IP 或者主機域名後(不帶端口號),直接跳轉上面的 5000/5001 端口。
  • 羣暉各類應用/共享協議會使用低位端口號,若是不想衝突,用戶定義端口須要規避這類端口,如發生端口衝突的事情,衝突軟件就只能進行「二選一」了,那個軟件先啓動,那麼另一個就只能報錯退出了。

因此這裏咱們須要記住兩條基礎規則瀏覽器

  • 80/443 端口沒有那麼好用,使用 Traefik 等三方軟件得帶着端口號,忍受「不完美」。
  • 須要規避一堆低位端口,避免讓系統/應用功能不可用。

先聊聊如何單獨使用 Traefik。

(下文中使用的域名須要本身進行 hosts 綁定或者 DNS 解析指向)

單獨使用 Traefik

單獨使用 Traefik 很是簡單,就像上面兩條規則描述的那樣。

不過爲了方便後續維護,Traefik 推薦運行在容器當中,因此若是以前沒有安裝它的話,須要要在套件中找到 Docker 並進行安裝,安裝完畢以後,能夠看到 FileStation 中多了一個名爲 docker 的目錄。

安裝 docker 套件

將 Traefik 做爲服務運行

Traefik 默認的端口是 80 ,上文提到過,這個端口默認被系統佔用,因此咱們這裏將端口映射到一個相對冷僻的高位數字: 52080

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

debug = false
sendAnonymousUsage = false
defaultEntryPoints = ["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 = true
defaultEntryPoints = ["http"]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "traefik.orange.lab.com"
watch = true
exposedbydefault = false
usebindportip = false
swarmmode = false
複製代碼

將兩個文件單獨保存以後,把文件上傳到羣暉上,啓動 Traefik: (這裏以剛剛系統自動建立的 docker 目錄爲例)

# 建立目錄
mkdir -p /volume1/docker/traefik
cd /volume1/docker/traefik

docker network create traefik
docker-compose up -d
複製代碼

命令執行完畢後,訪問 dashboard.orange.lab.com:52080 就能看到 Traefik 的 Dashboard 了。

暫時空空如也的 Dashboard

由於暫時沒有運行其餘的應用,因此 Dashboard 看起來空空如也。

那麼,讓咱們來添加兩個應用,測試下 Traefik 的功能吧。

安裝第一個應用(WordPress)

和 Nginx 做爲反向代理不一樣的是,使用 Traefik 添加應用只須要註明一條規則,就可以讓你的應用使用某個域名進行訪問了,簡化了很是多操做。

這裏使用以前的文章 裏的 WordPress 配置,並進行簡化,啓動第一個測試應用。

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 相似,咱們將它也上傳到羣暉的目錄中,並將容器啓動起來。

mkdir -p /volume1/docker/wordpress
cd /volume1/docker/wordpress

docker-compose up -d
複製代碼

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

熟悉的 WordPress 安裝界面

安裝第二個應用(Nginx)

Nginx 除了做爲服務端經常使用的服務網關外,還常常做爲動靜態站點的 Web 前端軟件。

這裏一樣使用一篇以前文章 裏的 Nginx 配置,並進行簡化,啓動第二個測試應用。

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 ,和處理前面的應用相似,咱們仍是將它上傳到羣暉的目錄中,並將容器啓動起來。

mkdir -p /volume1/docker/nginx
cd /volume1/docker/nginx

docker-compose up -d
複製代碼

稍等片刻,打開 http://nginx.orange.lab.com:52080 你就能看到 「Welcome to nginx!」 的默認運行界面啦。

Nginx 默認運行界面

若是你常常搭建網站、尤爲是在同一臺機器進行搭建,你會發現使用 Traefik 來作「服務域名管理」確實是很是高效的。

咱們再來看看以前的 Traefik Dashboard 吧。

再看 Traefik Dashboard

這裏會展現全部正確註冊服務發現的應用,因此若是你在瀏覽器裏打不開你的應用,能夠在這裏檢查下應用是否存在、以及應用配置是否正確。

搭配 Web Station 使用

聊完 Traefik 獨立使用,咱們來說講怎麼去掉地址欄裏多餘的端口號,好比上文中出現的 「52080」。

由於羣暉更新頻繁,每次更新都會覆蓋用戶對系統軟件的修改。因此咱們既要保證修改不會影響羣暉各類功能正常,又要讓咱們的修改不受到羣暉系統或者軟件升級所影響。

改變羣暉默認行爲

咱們知道,若是瀏覽器中想隱藏端口,須要使用兩個默認端口:80 和 443 。這兩個端口分別對應 HTTP 和 HTTPS 兩種協議情況。

前文提到過羣暉默認訪問 80/443 端口會跳轉到 5000/5001 端口的後臺頁面,可是若是咱們安裝官方提供的 Web Station 套件後,這個默認行爲就能夠被打破了

Web Station 安裝以後

當安裝完畢 Web Station 以後,咱們再次訪問羣暉的域名或者IP,將看到上面這個藍色的默認頁面。

安裝 Web Station

而且在 File Station 中,咱們能看到有一個叫作 web 的目錄被自動建立出來了,裏面保存的文件就是咱們看到的「藍色界面」。

使用 Web Station 代理 Traefik 請求

既然羣暉設備的地址能夠去掉端口號,那麼剛剛兩個使用 Traefik 經過域名暴露服務的軟件也沒有什麼問題。

打開 Web Station 套件,咱們使用域名添加一個網站。

添加虛擬主機

此刻,若是你使用這個域名打開網站,會發現網站的界面竟然仍是那個藍色的初始界面。這是由於 Web Station 默認生成的配置只支持比較簡單的場景,不過修改也很容易。

使用終端切換到 /etc/nginx/conf.d 目錄,咱們會看到一些配置和一些目錄,這些目錄默認是空的。

/etc/nginx/conf.d# ls
0a977aa1-e8b6-4f98-9f0a-b595268aaa5b  dsm.docker.conf  dsm.ssdp.conf  events.conf  main.conf
複製代碼

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

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:

/usr/syno/bin/synopkg restart WebStation
複製代碼

固然,也可使用標準的 nginx 命令

nginx -t && nginx -s reload
複製代碼

重啓 Web Station 後,WP 就正常了

而後前文中咱們啓動的 WordPress 就可以正常使用了。按照上面的方法,再重複操做幾回,其餘的站點也都能去掉端口運行啦。

其餘

在安裝配置羣暉系統的時候,其實咱們除了能夠打開 http://find.synology.com/ 或者下載使用 Synology Assistant 外。

只須要使用系統自帶的 arp 命令就能發現等待操做的羣暉設備,好比下面這樣。

# 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


我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。

在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。

喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)

關於折騰羣入羣的那些事

相關文章
相關標籤/搜索