本文章生命週期剩餘 320 天,結束後可能出現圖片丟失及檔案連結錯誤。
1. 什麼是 linkwarden
Linkwarden 是一個開源(Open-source)、可自託管(Self-hosted)的協同書籤管理器(collaborative bookmark manager)。它主要目的是幫助使用者收集、組織和完整保存(Preserve)網頁內容,以應對「連結失效」(Link Rot)的問題。

1.1. Linkwarden 功能介紹
Linkwarden 不僅僅是儲存連結,它更著重於內容的保存和協作:
1.1.1. 核心保存功能 (Preservation)
- 自動捕捉網頁備份: 在儲存書籤時,Linkwarden 可以自動捕捉網頁的截圖(Screenshot)、PDF 檔案和單一 HTML 檔案,確保即使原始網頁被移除或更改,您仍可隨時存取當時的內容。
- 存檔至 Internet Archive: 可選擇將網頁發送到 Wayback Machine (archive.org) 進行快照備份。

1.1.2. 組織與管理
- 多層次組織: 可透過收藏集(Collection)、子收藏集(Sub-collection)、名稱、描述和多個標籤(Tags)來組織連結。
- AI 標籤功能(可選): 利用本機 AI 模型來分析儲存的連結內容,並自動分配相關標籤,有助於大規模內容的分類和檢索。
- 全文搜尋、篩選與排序: 支援全文搜尋,方便快速找到所需的內容。
- 固定連結: 可以將常用或重要的連結固定在儀表板(Dashboard)上。

1.1.3. 協作與分享
- 協同作業: 支援多使用者和協作功能,允許多個成員在同一個收藏集中收集和管理連結。
- 權限客製化: 可以客製化每個成員的權限。
- 公開分享: 可以公開分享您收集的連結和已保存的內容格式。
- RSS Feed: 支援收藏集的 RSS 訂閱,讓追蹤者隨時掌握新增的連結;同時也支援訂閱外部 RSS 來源。
1.1.4. 閱讀體驗
- 閱讀模式(Reader View): 提供網頁的閱讀視圖,去除廣告和干擾,專注於文章內容。
- 高亮和註釋: 可以在閱讀視圖中對文本進行高亮(Highlight)和註釋(Annotation)。
1.1.5. 其他實用功能
- 跨平台存取: 支援瀏覽器擴充功能、可安裝的 PWA(Progressive Web App)和 iOS 捷徑。
- 匯入/匯出: 可輕鬆從其他平台匯入書籤,並可將書籤匯出。
- 同步: 支援使用 Floccus 等工具進行瀏覽器同步。
1.2. Linkwarden 優點 (Pros)
| 優點 | 說明 |
|---|---|
| 網頁內容完整保存 | 最大的優勢,自動將網頁保存為截圖、PDF 和 HTML 檔,有效對抗連結失效問題。 |
| 開源且可自託管 | 軟體本身開源免費,使用者可以選擇自行部署在自己的伺服器上,完全掌控資料和隱私。 |
| 強大的組織工具 | 支援多層次的收藏集、豐富的標籤和AI 自動標籤,使大量連結的管理更有效率。 |
| 支援協作與分享 | 允許多人共同管理書籤,適合團隊專案或共同研究,且可公開分享收藏。 |
| 優化的閱讀體驗 | 提供無干擾的閱讀模式,並可進行高亮和註釋,兼具「稍後閱讀」工具的特性。 |
| 現代化功能 | 支援 PWA、瀏覽器擴充功能、RSS 訂閱/輸出、匯入/匯出等,功能全面。 |
1.3. Linkwarden 潛在缺點 (Cons)
| 潛在缺點 | 說明 |
|---|---|
| 自託管的門檻 | 如果選擇自託管(Self-hosted),需要一定的技術知識(如 Docker)和伺服器資源來部署和維護。 |
| 資源消耗 | 網頁內容的完整保存(截圖、PDF 等)需要較大的儲存空間和處理資源,特別是對於自託管的使用者。 |
| 使用者體驗 | 部分使用者反映其使用者介面(UX)或操作流程可能有些混亂或不夠直觀,需要時間熟悉。(相較於某些簡單的書籤管理工具) |
| 網頁爬取限制 | 某些需要登入或有 Captcha(驗證碼)保護的頁面(例如 Amazon 購物頁面)可能無法成功保存完整的網頁內容。(已有方法解決) |
| 移動應用 | 雖然支援 PWA 和 iOS 捷徑,但缺乏專門的原生手機應用程式(App),移動體驗可能不如專門的商業服務。 |
| 標籤整理困難 | 雖然目前版本已經可以在網頁上選取多個標籤刪除,但仍不支援全選刪除跟無使用之標籤刪除,嚴格來說還是雞肋 |
2. 建議 docker 安裝內容
Docker-Compose 檔案的內容如下,因為習慣使用 Portianer 來架設,所以 volumes 的部分都是使用絕對路徑來設定,如果習慣直接用 Docker-Compose 來架設的話,可以改成相對路徑,比較具靈活性。
version: '3.8'
services:
linkwarden-postgres:
container_name: linkwarden-postgres
image: postgres:16-alpine
restart: always
volumes:
- /mnt/cloud1/dockerData/linkwarden/pgdata:/var/lib/postgresql/data #自行修改左側位置
environment:
- POSTGRES_USER=linkwarden
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD} #資料庫密碼,需要自己設定,隨便簡單的也行,反正資料庫是不對外連線的
- POSTGRES_DB=linkwarden
networks:
- ollama-network #跟 ollama 設置同網路才方便引用
linkwarden:
container_name: linkwarden
environment:
- DATABASE_URL=postgresql://linkwarden:${POSTGRES_PASSWORD}@linkwarden-postgres:5432/linkwarden
- NEXTAUTH_URL=${NEXTAUTH_URL} #網址,通常為 https
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET} #密碼,這個越複雜越好
- NEXT_PUBLIC_OLLAMA_ENDPOINT_URL=${NEXT_PUBLIC_OLLAMA_ENDPOINT_URL} #AI 的網址列
- OLLAMA_MODEL=${OLLAMA_MODEL} #AI 模型
- NEXT_PUBLIC_MAX_FILE_BUFFER=200 #預設儲存容量更改為 200mb,這個很重要需要增加
restart: always
# build: . # uncomment to build from source
image: ghcr.io/linkwarden/linkwarden:latest # comment to build from source
ports:
- 3002:3000
volumes:
- /mnt/cloud1/dockerData/linkwarden/data:/data/data #自行修改左側位置
depends_on:
- linkwarden-postgres
- linkwarden-meilisearch
networks:
- ollama-network #跟 ollama 設置同網路才方便引用
linkwarden-meilisearch:
container_name: linkwarden-meilisearch
image: getmeili/meilisearch:v1.12.8
restart: always
environment:
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY} #meilisearch 的密碼,越複雜越好
volumes:
- /mnt/cloud1/dockerData/linkwarden/meili_data:/meili_data #自行修改左側位置
networks:
- ollama-network #跟 ollama 設置同網路才方便引用
networks:
ollama-network: #跟 ollama 設置同網路才方便引用
driver: bridge
name: ollama-network #跟 ollama 設置同網路才方便引用
env 內容
env 檔內容
```bash
#資料庫
POSTGRES_PASSWORD=變更密碼
#linkwarden 設定
NEXTAUTH_URL=https://網址/api/v1/auth
NEXTAUTH_SECRET=變更密碼
#AI 設定
NEXT_PUBLIC_OLLAMA_ENDPOINT_URL=http://ollama:11434 #ollama 預設網址,docker 跟網路要架一起才能這樣輸入
OLLAMA_MODEL=cwchang/llama-3-taiwan-8b-instruct:latest #模型名稱,選自己可以用的
# Meilisearch 設定
MEILI_MASTER_KEY=變更密碼
```
使用說明
架設完成之後點選起始網頁,註冊即可第一個註冊為管理員,然後下載瀏覽器 Linkwarden 的外掛,我是比較常用 firefox,裝完後打開附加元件的設定填上 API 即可使用。
打開想要存檔的網頁,點選元件的圖示即會跳出存檔的資料夾,選好後儲存即可。點選圖示還能自動跳到 Linkwarden 首頁,相當方便。

3. 小技巧
3.1. singlefile 設定
到偏好設定→保存位置,選擇 儲存到 REST 表單 API 設定,然後輸入下列即可將需要登入的網站整個存到 Linkwarden 保存,
需要注意的是用這個方法檔案通常很大,會超過 Linkwarden 存檔的預設容量大小,需要修改才行,這個弄了很久才發現。
| 欄位名稱 | 欄位值或設定內容 | 備註 |
|---|---|---|
| 網址 | https://網址/api/v1/archives?format=4 |
API 的端點(Endpoint)位址。 |
| 授權令牌 | •••••••••••••••••••••••••••••• |
隱藏的授權金鑰或密碼(Token)。 |
| 檔案字段名稱 | file |
用於上傳檔案的表單欄位名稱。 |
| 網址字段名稱 | url |
用於傳遞網址的表單欄位名稱。 |
3.2. 修改網頁預設儲存大小
使用 singlefile 保存網頁往往會生成約 10MB 或以上的網頁檔,linkwearden 預設的容量好像是 10MB 左右,超過就會出現限制錯誤的訊息
{"response":"Sorry, we couldn't process your file. Please ensure it doesn't exceed 10MB."} (RestFormApi)
解決的步驟如下:
-
在
Docker-Compose內增加變數NEXT_PUBLIC_MAX_FILE_BUFFER=200即可,如下linkwarden: container_name: linkwarden environment: - NEXT_PUBLIC_MAX_FILE_BUFFER=200 -
在
Nginx Proxy Manager→Advanced內輸入client_max_body_size 200M;即可,如下:client_max_body_size 200M;