分享程式代碼相關筆記
目前文章總數:210 篇
最後更新:2025年 12月 13日
登入 NAS -> 套件中心 -> 安裝 Docker
補充:建議 NAS 安裝 Docker 透過套件中心安裝,可以有廠商保證的 官方支援、最穩定 ,因為廠商會符合 DSM 支援的版本
自行透過 SSH 安裝 Docker 可能會有版本與 DSM 不匹配的異常狀況
官方套件中心下載的 Docker BookStack Image 缺少些設定關鍵值,因此我們要透過 SSH 進行安裝
可透過 mRemoteNG 或其他遠端訪問軟體,對 NAS Linux 系統訪問
登入後,輸入以下指令,檢查權限:
docker ps -a
若確定出現 permission denied 表示當前登入的帳號權限不足,我們要暫時性的提升訪問 docker 權限 (要安裝 BookStack 使用)
輸入以下:
sudo chmod 666 /var/run/docker.sock
並且輸入密碼後,即可暫時性的提供對 Docker 的操作
回到 NAS 管理介面 -> 控制台 -> 共用資料夾
可以看到自己的 docker 資料夾位置,後續相關的 docker-compose.yml 都會放置於此
如下圖,我們在 docker 目錄中,新增 docker-compose.yml 檔案
詳細的安裝內容、腳本可參考文章: 實戰部署 BookStack + MariaDB
準備好腳本,並且輸入以下指令後(包含 APP_KEY 設定):
docker-compose up -d
為了方便 Demo 安裝了 Portainer 說明,如下圖,bookstack + mariadb 已在 NAS 上安裝完成
若有使用 Tailscale 並且登入成功,可以透過直通 NAT 從自己的機器訪問:
http://100.92.58.167:6875/login
但目前只確認有開通,我們目的是此網站可以讓網際網路上的所有人訪問,還需要後續的步驟實現。並且 不額外花費金錢 達成目標。
訪問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、手機、伺服器),連接成一個安全的私人網路
關鍵的是能讓裝置間可以點對點直接訪問,解決了以下網路問題:
| 不用設定路由器 |
| 不用 Port Forward |
| 不用 DDNS |
| 不用自己架 VPN Server |
| 多裝置跨家裡 / 全世界也能互相連線 |
| 穿透 NAT、穿透防火牆 |
| 一鍵連線、全自動加密、高安全性 |
至於原理如何實現 NAT 穿透,詳細可以參考官方的說明
| 1. WireGuard 加密通道 | Tailscale 的資料傳輸是靠 WireGuard tunnel |
| 2. NAT 穿透技術 | 採用 ICE/STUN/TURN 類似技術,進行 UDP Hole Punching (兩台在 NAT 後面的裝置主動對外傳一包 UDP) |
| 3. Tailscale 控制平面 | 用戶登入平台後,每個節點會從控制平面拿到私有的訪問所需資料(IP、Public Key、ACL、NAT穿透資訊等…) |
雖然 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 (小團隊、私人用途內部網路使用)
以下是官方收費的方式,個人版目前註冊後,仍有 3 個核心使用者數為免費的,個人使用支持 100 個設備,是相當夠用的。
補充:核心使用者表示的是註冊的主帳號,可以再分享給另外 2 個帳號,另外 2 個帳號都可以訪問主帳號的裝置
| 方案名稱 | 價格/月 | 適用對象 | 核心使用者數 | 裝置數量限制 | 主要差異特色 |
|---|---|---|---|---|---|
| Personal(個人免費版) | 免費 | 個人、家庭使用 | 最多 3 人(使用者) | 最多 100 裝置 | 免費使用,不做為商業用途。 |
| Personal Plus | 5 美金(固定) | 個人+家庭朋友群組 | 最多 6 人 | 最多 100 裝置 | 比免費版多一點使用者數。 |
| Starter(商業入門) | 約 6 美金/活躍使用者 | 小團隊/企業初期 | 使用者人數不限(以活躍用戶計費) | 裝置上限為「100 + 10 × 使用者數」 | 商業用途起點,已有較完整功能。 |
| Premium(商業進階) | 約 18 美金/活躍使用者 | 成長型企業、需要更高階控管 | 使用者人數不限(以活躍用戶計費) | 裝置上限為「100 + 20 × 使用者數」 | 進階功能如 Funnel、SSH、完整 ACL 等。 |
| Enterprise(企業方案) | 自訂/請洽銷售 | 大型企業、自訂需求 | 使用者/裝置皆可自訂 | 裝置上限自訂 | 專業合規、專屬支援、大型部署。 |
登入 NAS -> 套件中心 -> 安裝 Tailscale -> 開啟並登入
從 NAS 登入後可以得到 P2P IP,現在可以用自己的電腦(其他設備,即使非同個區網)透過此 IP 直接訪問 NAS Server

在 Windows 電腦,可以透過右下角工具列切換是否訪問 Tailscale
Tailscale 綁定後,也可以透過官網登入後檢查當前使用設備,進行管理
Tailscale Funnel 是 Tailscale 提供的一個功能,可以透過 啟用 來免費使用。
目的:可以把NAS、家用伺服器上的服務,安全地公開到 Internet 上,而不需要設定防火牆、路由器或反向代理。
官方 Tailscale Funnel 說明連結
為了讓 私有 Tailscale 節點安全地被外網訪問,實際上會運行以下步驟:
| 1. 你在 Tailscale 網路內的一台機器(例如 NAS)啟用 Funnel。 |
| 2. Tailscale 會建立一個 全域公開的 HTTPS 端點(例如 https://yourname.tailnet-funnel.ts.net)。 |
| 3. 所有從外部 Internet 到這個網址的流量,會經過 Tailscale 的中繼伺服器,轉發到你的 NAS。 |
透過 SSH 訪問 NAS ,並且輸入以下指令進行啟動
備註:6875 是開啟 BookStack 的 Port,如果有其他容器、網站想要對外,可以再額外設定
sudo tailscale funnel --bg 6875
執行後,會出現 Funnel is not enabled on your tailnet. To enable, visit:
將網址貼上瀏覽器進行訪問
開啟瀏覽器貼上網址後,會要求進行授權,允許
成功後,應出現以下畫面:
最終直接訪問,啟用完成
https://{您的 NAS 域名}.tailed716c.ts.net
授權成功後,會獲得類似以下網址,這是 Tailscale Funnel 產生的域名
https://{您的 NAS 域名}.tailed716c.ts.net
我們還需要到調整 docker-compose.yml,將上面的網址貼上,類似如下
APP_URL=https://{您的 NAS 域名}.tailed716c.ts.net
保存後,重新啟動 BookStack Container
未來若是忘記已啟用的域名,可以到 NAS 上透過以下指令檢查
tailscale funnel status
原 TailScale 的訪問會失效,取而代之的是 TailScale Funnel 的域名取代
http://100.92.58.167:6875/login
透過 Tailscale Funnel 提供的域名,我們已經可以用任何網路來訪問這個網站
運行 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 沿用
運行 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
請檢查使用的 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