本文使用「署名 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,讓 NAS 設備搖身一變爲好用的 Web 服務器。nginx
迄今爲止,我已經寫了接近三十篇搭配 Traefik 使用的各類開源軟件記錄,因此若是你想了解更多,不妨看看那些歷史文章。web
由於我家裏的設備已經有安裝 Traefik ,爲了可以使用乾淨純粹的環境,本次基於虛擬機進行演示:虛擬機羣暉系統版本 6.1+,能夠用於 6.2+ 的系統使用(新版本只有界面有差別,功能、配置方面是一致的)。docker
爲了方便文章描述,我自簽了證書,並將域名配置給了這臺「羣暉」虛擬機。apache
在羣暉上使用 Traefik 有兩種玩法:編程
在繼續聊 Traefik 前,必須先了解羣暉系統的一些默認邏輯:api
因此這裏咱們須要記住兩條基礎規則:瀏覽器
先聊聊如何單獨使用 Traefik。
(下文中使用的域名須要本身進行 hosts 綁定或者 DNS 解析指向)
單獨使用 Traefik 很是簡單,就像上面兩條規則描述的那樣。
不過爲了方便後續維護,Traefik 推薦運行在容器當中,因此若是以前沒有安裝它的話,須要要在套件中找到 Docker 並進行安裝,安裝完畢以後,能夠看到 FileStation 中多了一個名爲 docker 的目錄。
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 看起來空空如也。
那麼,讓咱們來添加兩個應用,測試下 Traefik 的功能吧。
和 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
就能看到熟悉的安裝界面了。
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!」 的默認運行界面啦。
若是你常常搭建網站、尤爲是在同一臺機器進行搭建,你會發現使用 Traefik 來作「服務域名管理」確實是很是高效的。
咱們再來看看以前的 Traefik Dashboard 吧。
這裏會展現全部正確註冊服務發現的應用,因此若是你在瀏覽器裏打不開你的應用,能夠在這裏檢查下應用是否存在、以及應用配置是否正確。
聊完 Traefik 獨立使用,咱們來說講怎麼去掉地址欄裏多餘的端口號,好比上文中出現的 「52080」。
由於羣暉更新頻繁,每次更新都會覆蓋用戶對系統軟件的修改。因此咱們既要保證修改不會影響羣暉各類功能正常,又要讓咱們的修改不受到羣暉系統或者軟件升級所影響。
咱們知道,若是瀏覽器中想隱藏端口,須要使用兩個默認端口:80 和 443 。這兩個端口分別對應 HTTP 和 HTTPS 兩種協議情況。
前文提到過羣暉默認訪問 80/443 端口會跳轉到 5000/5001 端口的後臺頁面,可是若是咱們安裝官方提供的 Web Station 套件後,這個默認行爲就能夠被打破了。
當安裝完畢 Web Station 以後,咱們再次訪問羣暉的域名或者IP,將看到上面這個藍色的默認頁面。
而且在 File Station 中,咱們能看到有一個叫作 web
的目錄被自動建立出來了,裏面保存的文件就是咱們看到的「藍色界面」。
既然羣暉設備的地址能夠去掉端口號,那麼剛剛兩個使用 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
複製代碼
而後前文中咱們啓動的 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、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)