首頁

目前文章總數:210 篇

  

最後更新:2025年 12月 13日

0023. 【NAS 進階】Synology 打造免費私人知識庫:Docker 安裝 + Tailscale Funnel 對外開放完整教學

日期:2025年 12月 13日

標籤: NAS Synology Linux Tailscale Tailscale Funnel Docker Docker-Compose Container BookStack MariaDB LinuxServer.io Portaniner

摘要:資訊筆記


應用所需:1. Synology NAS 主機(Linux 作業系統 + DSM 7.1 以上版本)
     2. 已安裝 Docker-Compose (Docker ≥ 20.x(rootful)、docker‑compose ≥ v2)
解決問題:1. 透過搭建 BookStack 來說明如何將 NAS 上的 BookStack 透過 Tailscale Funnel 免費域名,安全地(Https)於網際網路上公開訪問 NAS 內的 BookStack
     2. 說明使用 Tailscale Funnel 前,要先安裝 Tailscale 於 NAS 上的步驟 & 如何啟用
     3. 克服權限、故障排除等,安裝過程中遭遇的問題,解決方法
相關參考:0017. LinuxServer.io 實戰:Deploy BookStack + MariaDB with Docker Compose
基本介紹:本篇分為 5 大部分。
第一部分:NAS 上安裝 Bookstack 流程
第二部分:NAS 上啟用 Tailscale 與設定使用
第三部分:啟用 Tailscale Funnel 獲取免費公開域名
第四部分:DEMO 成果
第五部分:補充遭遇問題






第一部分:NAS 上安裝 Bookstack 流程

Step 1:安裝 Docker

登入 NAS -> 套件中心 -> 安裝 Docker
補充:建議 NAS 安裝 Docker 透過套件中心安裝,可以有廠商保證的 官方支援、最穩定 ,因為廠商會符合 DSM 支援的版本
自行透過 SSH 安裝 Docker 可能會有版本與 DSM 不匹配的異常狀況


Step 2:開啟 NAS SSH 通道

官方套件中心下載的 Docker BookStack Image 缺少些設定關鍵值,因此我們要透過 SSH 進行安裝


Step 3:遠端登入 NAS

可透過 mRemoteNG 或其他遠端訪問軟體,對 NAS Linux 系統訪問
登入後,輸入以下指令,檢查權限:

docker ps -a





若確定出現 permission denied 表示當前登入的帳號權限不足,我們要暫時性的提升訪問 docker 權限 (要安裝 BookStack 使用)
輸入以下:

sudo chmod 666 /var/run/docker.sock


並且輸入密碼後,即可暫時性的提供對 Docker 的操作


Step 4:檢查 Docker 資料夾

回到 NAS 管理介面 -> 控制台 -> 共用資料夾
可以看到自己的 docker 資料夾位置,後續相關的 docker-compose.yml 都會放置於此


Step 5:新增 yml 安裝 bookstack

如下圖,我們在 docker 目錄中,新增 docker-compose.yml 檔案
詳細的安裝內容、腳本可參考文章: 實戰部署 BookStack +  MariaDB


Step 6:安裝完成

準備好腳本,並且輸入以下指令後(包含 APP_KEY 設定):

docker-compose up -d


為了方便 Demo 安裝了 Portainer 說明,如下圖,bookstack + mariadb 已在 NAS 上安裝完成


Step 7:確認 BookStack Web-UI

若有使用 Tailscale 並且登入成功,可以透過直通 NAT 從自己的機器訪問:

http://100.92.58.167:6875/login


但目前只確認有開通,我們目的是此網站可以讓網際網路上的所有人訪問,還需要後續的步驟實現。並且 不額外花費金錢 達成目標。




第二部分:NAS 上啟用 Tailscale 與設定使用

Step 1:Tailscale 基本介紹

訪問Tailscale官網有以下介紹:

Tailscale is a secure and private, 
identity-based, 
infrastructure agnostic network with a flexible topology, 
resilient networking, and a streamlined setup.


大意是說:可以打造安全、私密的自己的網路拓樸
更通俗的解讀: Tailscale 可以非常輕鬆地把你所有裝置(NAS、Windows、Mac、手機、伺服器),連接成一個安全的私人網路


Step 2:Tailscale 解決網路配置問題

關鍵的是能讓裝置間可以點對點直接訪問,解決了以下網路問題:

不用設定路由器
不用 Port Forward
不用 DDNS
不用自己架 VPN Server
多裝置跨家裡 / 全世界也能互相連線
穿透 NAT、穿透防火牆
一鍵連線、全自動加密、高安全性



Step 3:Tailscale 的工作原理

至於原理如何實現 NAT 穿透,詳細可以參考官方的說明

1. WireGuard 加密通道 Tailscale 的資料傳輸是靠 WireGuard tunnel
2. NAT 穿透技術 採用 ICE/STUN/TURN 類似技術,進行 UDP Hole Punching (兩台在 NAT 後面的裝置主動對外傳一包 UDP)
3. Tailscale 控制平面 用戶登入平台後,每個節點會從控制平面拿到私有的訪問所需資料(IP、Public Key、ACL、NAT穿透資訊等…)




Step 4:Tailscale 缺點

雖然 Tailscale 解決了傳統的 VPN 所需克服的網路問題,但就是因為克服了,而有些問題點必須知道:

1. 依賴 Tailscale 的控制平面(SaaS 雲服務) 如果 Tailscale 官方宕機,你的裝置可能無法新增、登入或更新路由 (企業要 100% 可用的情況,下不能全部依賴)
2. 公司無法有效控管 能穿透 NAT、防火牆、企業 Proxy,換句話說穿透了 公司安全部門 ,會繞過企業限制,會導致企業無法控管網路,造成安全性問題。
3. 需要信任 Tailscale 官方的金鑰管理 雖然官方保證極度重視隱私,但不能保證未來政策方針變更後,會導致資料外洩
4. 部分網路環境下會退回走 DERP(網速變慢) 發生在雙方機器點對點不相容、防火牆嚴格的狀況下,會走 DERP (TCP Relay Server),網路速度因此變慢
5. Mesh 網路規模大時,ACL 設定會變複雜 ACL 變大的同時,會導致路由器分發同步複雜,因此會導致網路變慢(需解析)
6. 低延遲的狀況不適合 高頻率 UDP(遊戲伺服器)、傳大型檔案、高頻交易的資料庫等,低延遲的情境下使用 Tailscale 會因此被網路拖慢。


綜上所述,Tailscale 通常適合 一般工程師 / 家庭用 / 自己的 NAS (小團隊、私人用途內部網路使用)

Step 5:Tailscale 收費方式 - 個人版免費

以下是官方收費的方式,個人版目前註冊後,仍有 3 個核心使用者數為免費的,個人使用支持 100 個設備,是相當夠用的。
補充:核心使用者表示的是註冊的主帳號,可以再分享給另外 2 個帳號,另外 2 個帳號都可以訪問主帳號的裝置

方案名稱 價格/月 適用對象 核心使用者數 裝置數量限制 主要差異特色
Personal(個人免費版) 免費 個人、家庭使用 最多 3 人(使用者) 最多 100 裝置 免費使用,不做為商業用途。
Personal Plus 5 美金(固定) 個人+家庭朋友群組 最多 6 人 最多 100 裝置 比免費版多一點使用者數。
Starter(商業入門) 約 6 美金/活躍使用者 小團隊/企業初期 使用者人數不限(以活躍用戶計費) 裝置上限為「100 + 10 × 使用者數」 商業用途起點,已有較完整功能。
Premium(商業進階) 約 18 美金/活躍使用者 成長型企業、需要更高階控管 使用者人數不限(以活躍用戶計費) 裝置上限為「100 + 20 × 使用者數」 進階功能如 Funnel、SSH、完整 ACL 等。
Enterprise(企業方案) 自訂/請洽銷售 大型企業、自訂需求 使用者/裝置皆可自訂 裝置上限自訂 專業合規、專屬支援、大型部署。




Step 6:NAS 安裝 Tailscale

登入 NAS -> 套件中心 -> 安裝 Tailscale -> 開啟並登入


Step 7:NAS 登入 Tailscale

從 NAS 登入後可以得到 P2P IP,現在可以用自己的電腦(其他設備,即使非同個區網)透過此 IP 直接訪問 NAS Server

Step 8:Windows 切換開關方法

在 Windows 電腦,可以透過右下角工具列切換是否訪問 Tailscale


Step 9:官網訪問自己的設備清單

Tailscale 綁定後,也可以透過官網登入後檢查當前使用設備,進行管理




第三部分:啟用 Tailscale Funnel 獲取免費公開域名

Step 1:Tailscale Funnel 基本介紹

Tailscale Funnel 是 Tailscale 提供的一個功能,可以透過 啟用 來免費使用。
目的:可以把NAS、家用伺服器上的服務,安全地公開到 Internet 上,而不需要設定防火牆、路由器或反向代理。
官方 Tailscale Funnel 說明連結


Step 2:Tailscale Funnel 實現流程

為了讓 私有 Tailscale 節點安全地被外網訪問,實際上會運行以下步驟:

1. 你在 Tailscale 網路內的一台機器(例如 NAS)啟用 Funnel。
2. Tailscale 會建立一個 全域公開的 HTTPS 端點(例如 https://yourname.tailnet-funnel.ts.net)。
3. 所有從外部 Internet 到這個網址的流量,會經過 Tailscale 的中繼伺服器,轉發到你的 NAS。



Step 3:遠端 SSH 訪問 NAS

透過 SSH 訪問 NAS ,並且輸入以下指令進行啟動
備註:6875 是開啟 BookStack 的 Port,如果有其他容器、網站想要對外,可以再額外設定

sudo tailscale funnel --bg 6875


執行後,會出現 Funnel is not enabled on your tailnet. To enable, visit:
將網址貼上瀏覽器進行訪問


Step 4:開啟權限

開啟瀏覽器貼上網址後,會要求進行授權,允許


成功後,應出現以下畫面:


Step 5:回到 NAS - 啟用完成

最終直接訪問,啟用完成

https://{您的 NAS 域名}.tailed716c.ts.net




Step 6:編輯 Bookstack 並重啟

授權成功後,會獲得類似以下網址,這是 Tailscale Funnel 產生的域名

https://{您的 NAS 域名}.tailed716c.ts.net


我們還需要到調整 docker-compose.yml,將上面的網址貼上,類似如下

APP_URL=https://{您的 NAS 域名}.tailed716c.ts.net


保存後,重新啟動 BookStack Container


Step 7:NAS 可回顧 TailScale Funnel 提供的域名

未來若是忘記已啟用的域名,可以到 NAS 上透過以下指令檢查

tailscale funnel status






第四部分:DEMO 成果

Step 1:原 TailScale 失效

原 TailScale 的訪問會失效,取而代之的是 TailScale Funnel 的域名取代

http://100.92.58.167:6875/login




Step 2:訪問 TailScale Funnel 域名 - 成功對外

透過 Tailscale Funnel 提供的域名,我們已經可以用任何網路來訪問這個網站




第五部分:補充遭遇問題

Step 1:BookStack 的 APP_KEY 必須要生成

運行 Bookstack Container 後,啟動 :6875 ,可能遇到 An unknown error occurred 通常表示 未設定生成並設定 APP_KEY
建議重新執行以下指令,重新生成 APP_KEY:

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey


生成後,開啟 docker-compose.yml 檔案,將生成的 Base64 Key 重新貼上後,重新啟動容器
※備註:每台機器的 APP_KEY 都會不同,因此不能將之前成功的 Linux 機器上的 APP_KEY 沿用

Step 2:BookStack 快取導致無法執行容器

運行 BookStack 時,可能重複啟動多次,這時 mariaDB 資料庫有正常初始化,但是快取沒有清除導致無法正常運行
可依序以下執行:

# 1. 進入 BookStack 容器
docker exec -it bookstack bash
cd /app/www

# 2. 清除快取
php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear

# 3. 重新建立快取
php artisan config:cache

# 4. 退出
exit

# 5. 重啟容器
docker restart bookstack



Step 3:BookStack 資料庫參數

請檢查使用的 BookStack Image 版本,最新版本(2025 年 11 月)的應如下,否則會報錯使用者、密碼

項目 錯誤 正確
使用者 DB_USER DB_USERNAME
密碼 DB_PASS DB_PASSWORD


如下標註 # 的地方,否則會有無法啟動 BookStack 容器的狀況

services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - DB_HOST=mariadb
      - DB_PORT=3306
      - DB_USER=bookstack    # 這邊要檢查版本,最新版本是用 DB_USERNAME
      - DB_PASS=bookstack123 # 這邊要檢查版本,最新版本是用 DB_PASSWORD
      - DB_DATABASE=bookstackapp
    volumes:
      - ./bookstack-config:/config
    ports:
      - 6875:80
    restart: unless-stopped
    depends_on:
      - mariadb