西西有點東西

我只是想找個地方記錄

自架 Linkwarden 教學及注意事項

自架 Linkwarden 教學及注意事項

本文章生命週期剩餘 320 天,結束後可能出現圖片丟失及檔案連結錯誤。

1. 什麼是 linkwarden

Linkwarden 是一個開源(Open-source)、可自託管(Self-hosted)的協同書籤管理器(collaborative bookmark manager)。它主要目的是幫助使用者收集、組織和完整保存(Preserve)網頁內容,以應對「連結失效」(Link Rot)的問題。

自架 Linkwarden 教學及注意事項

1.1. Linkwarden 功能介紹

Linkwarden 不僅僅是儲存連結,它更著重於內容的保存協作

1.1.1. 核心保存功能 (Preservation)

  1. 自動捕捉網頁備份: 在儲存書籤時,Linkwarden 可以自動捕捉網頁的截圖(Screenshot)、PDF 檔案和單一 HTML 檔案,確保即使原始網頁被移除或更改,您仍可隨時存取當時的內容。
  2. 存檔至 Internet Archive: 可選擇將網頁發送到 Wayback Machine (archive.org) 進行快照備份。

boa4v4.png

1.1.2. 組織與管理

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

oXM7co.png

1.1.3. 協作與分享

  1. 協同作業: 支援多使用者協作功能,允許多個成員在同一個收藏集中收集和管理連結。
  2. 權限客製化: 可以客製化每個成員的權限。
  3. 公開分享: 可以公開分享您收集的連結和已保存的內容格式。
  4. RSS Feed: 支援收藏集的 RSS 訂閱,讓追蹤者隨時掌握新增的連結;同時也支援訂閱外部 RSS 來源

1.1.4. 閱讀體驗

  1. 閱讀模式(Reader View): 提供網頁的閱讀視圖,去除廣告和干擾,專注於文章內容。
  2. 高亮和註釋: 可以在閱讀視圖中對文本進行高亮(Highlight)註釋(Annotation)

1.1.5. 其他實用功能

  1. 跨平台存取: 支援瀏覽器擴充功能、可安裝的 PWA(Progressive Web App)iOS 捷徑
  2. 匯入/匯出: 可輕鬆從其他平台匯入書籤,並可將書籤匯出
  3. 同步: 支援使用 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 首頁,相當方便。

xTpGF7.jpg

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)

解決的步驟如下:

  1. Docker-Compose內增加變數NEXT_PUBLIC_MAX_FILE_BUFFER=200即可,如下

    linkwarden:
      container_name: linkwarden
      environment:
        - NEXT_PUBLIC_MAX_FILE_BUFFER=200
  2. Nginx Proxy Manager→Advanced內輸入client_max_body_size 200M;即可,如下:

    client_max_body_size 200M;

歡迎留言分享指教