惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
博客园_首页
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
D
Docker
博客园 - 司徒正美
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
U
Unit 42
J
Java Code Geeks
A
About on SuperTechFans
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security Affairs
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog RSS Feed
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
T
Threatpost
H
Hacker News: Front Page
G
Google Developers Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
S
Secure Thoughts
GbyAI
GbyAI
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog

羽翼博客

一个软件官网的消失,让我第一次感受到远方局势的影响 Typecho主题发布:Initial-M 网站备份迁移实战:从手动迁移到问题解决 微软原版系统直链下载工具-ESD 给网站添点“懒”:使用LazySizes实现图片懒加载 开源下载器 AB Download Manager | 浏览器集成 批量删除公众号的解决办法|鼠标录制器|投屏工具 Windows10电源计划选项仅平衡问题解决 N4500工控机(3)-PVE定时开关与飞牛核显直通
浏览器书签同步又挂了?自建 linkding 书签管理器(宝塔部署教程)
羽翼 · 2026-04-10 · via 羽翼博客

浏览器书签栏塞满了链接,想找的时候根本翻不到;换台电脑,书签全没了——有朋友遇到类似情况,可以试试 linkding。这是一款轻量、开源的自托管书签管理器,数据完全在自己手里。本文会介绍它的核心功能,并手把手教你在宝塔面板上完成部署。

说个真实场景:你在外面办事,突然需要查一个之前收藏过的链接——可能是某个系统的后台地址、某个工具的下载页、或者某个重要的文档。虽然 Edge 之类的浏览器收藏夹可以手机电脑自动同步,但实际用下来会遇到同步慢、同步不过去、甚至莫名其妙丢失的情况。关键时刻找不到东西。。。所以用linkding来解决这个问题——书签存在自己的服务器上,任何设备打开浏览器就能访问,不依赖任何浏览器的同步机制。

一、linkding 是什么?

linkding 是一款开源的自托管书签管理器,技术栈是 Python + SQLite,没什么重依赖,极限一点 512MB 内存也行——随便一台低配机器都能跑得动。看了下项目从 2020 年发布v1.0后活跃至今,版本迭代挺频繁的。

简单说就是:你把书签数据全放在自己服务器上,不依赖任何第三方服务,想怎么管就怎么管。

Demo: https://demo.linkding.link/

同类工具速览

自托管书签/阅读管理工具不止 linkding 一个,这里简单列几个常见的,方便你对比选择。不过本文的主角是 linkding,如果你对其他工具感兴趣,可以自行查阅了解。

工具定位技术栈一句话点评
linkding书签管理Python/Django轻量简洁,部署简单,适合个人书签管理
Linkwarden书签 + 归档 + 协作TypeScript/Next.js功能最全,支持截图/PDF 归档、团队协作、AI 标签,但资源占用较高
LinkAce链接归档PHP/Laravel支持多用户、链接监控、列表共享,功能丰富但部署稍复杂
Wallabag稍后阅读PHP/Symfony专注"稍后阅读",自动提取文章正文,有手机 App,老牌项目
Shaarli微型书签PHP极致轻量,无数据库(文件存储),适合技术用户,界面比较朴素
Readeck稍后阅读Go新项目,支持标注、高亮、RSS、eBook 导出,界面现代

怎么选?简单给个参考:

  • 只想管理书签链接 → linkdingShaarli
  • 需要保存网页内容(截图/PDF)→ Linkwarden
  • 主要需求是"稍后阅读"文章 → WallabagReadeck
  • 需要团队协作 → LinkwardenLinkAce

二、核心功能

linkding-home_w.webp

打开 linkding 的第一感觉就是——干净。没有什么花里胡哨的动画,也没有一堆用不到的按钮,就是安安静静一个书签列表。页面加载也快,日常使用很流畅。

管理书签的方式跟传统文件夹不一样,linkding 用的是标签(Tags)。一个书签可以打好几个标签,比如一篇 Typecho 教程,你可以同时标上 #Typecho#教程#博客,不管从哪个角度搜都能找到,输入标签名还有自动补全。添加书签的时候也省心,粘贴个 URL 进去,标题、描述、图标全帮你抓好了,不用自己填一个字。另外每个书签都能写 Markdown 笔记,顺手还能记两句"这篇文章讲了啥"。

linkding-bundle_w.webp

linkding-tag_w.webp

平时看到好文章但没空看?标个"稍后阅读",回头再统一处理就行。还有个功能我觉得特别实用——网页归档。它可以帮你把网页存成本地 HTML,或者归档到 Internet Archive。有些技术文章说没就没了,有归档在就不怕,原页面 404 了照样能看。

注意:网页归档功能需要使用 latest-plus 镜像(内置 Chromium),镜像体积和运行内存要求更高。本文教程安装的是 latest 版本,不包含此功能。如果需要网页归档,把 docker-compose.yml 中的镜像标签从 latest 改为 latest-plus 即可,更多详情可查阅官方文档

多端方面,linkding 支持软件装到手机或电脑上,打开就是个独立窗口,日常使用足够方便。浏览器扩展也配齐了,Chrome 和 Firefox 都有,装上之后逛网页看到好内容,点一下图标即可保存。

linkding-inst4_w.webp

社区生态也挺丰富,这里挑几个实用的:

  • 手机客户端Linkdy(Flutter,Android/iOS 双端)、LinkBuddy(React Native,已上架 App Store)、Linklater(Kotlin,Android)
  • 书签健康检查linkding-healthcheck,自动检测失效链接并打标签
  • 全文搜索serchding,给 linkding 加上全文搜索能力

更多社区项目可以查阅官方文档


三、宝塔面板部署教程

接下来是实操部分——如何在宝塔面板上部署 linkding。宝塔的 Docker 管理器支持图形化操作,大部分步骤直接在面板里点点就行;如果你更习惯命令行,我也一并附上。

前置条件

  • 一台服务器
  • 至少 512MB 可用内存

第一步:安装 Docker

宝塔面板安装(推荐)

  1. 登录宝塔面板
  2. 进入 软件商店
  3. 搜索 "Docker"
  4. 安装 Docker管理器Docker Compose

装完之后,宝塔左侧菜单会出现 Docker 入口,后面所有操作都可以在这里完成。

命令行安装

# 一键安装 Docker
curl -fsSL https://get.docker.com | bash

# 启动 + 开机自启(这步别漏了)
systemctl start docker
systemctl enable docker

# 安装 Docker Compose
pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
注意:命令行安装的话,systemctl enable docker 一定要执行,不然服务器重启后容器不会自动启动。

第二步:创建项目目录

注意:如果你打算用下面的"宝塔图形化创建容器",可以跳过第二、三步的下载,直接到第四步。

宝塔文件管理

打开宝塔面板的 文件 管理,进入根目录,新建文件夹 /opt/linkding

命令行

mkdir -p /opt/linkding

两种方式效果一样,选你习惯的就行。

第三步:下载配置文件

这一步需要准备两个文件:docker-compose.yml.env(从 .env.sample 重命名而来)。官方都提供了现成的模板,直接下载就行。

提示:下面贴出了当前版本的文件内容供复制使用。不过官方可能会更新这些文件,建议同时前往上面的链接确认是否为最新版本。如果 raw.githubusercontent.com 访问慢,也可以直接从 GitHub 页面复制。

命令行下载

cd /opt/linkding
wget https://raw.githubusercontent.com/sissbruecker/linkding/master/.env.sample -O .env
wget https://raw.githubusercontent.com/sissbruecker/linkding/master/docker-compose.yml -O docker-compose.yml

.env 文件内容(下载时已自动重命名)

# Docker container name
LD_CONTAINER_NAME=linkding
# Port on the host system that the application should be published on
LD_HOST_PORT=9090
# Directory on the host system that should be mounted as data dir into the Docker container
LD_HOST_DATA_DIR=./data
# Can be used to run linkding under a context path, for example: linkding/
# Must end with a slash `/`
LD_CONTEXT_PATH=
# Username of the initial superuser to create, leave empty to not create one
LD_SUPERUSER_NAME=
# Password for the initial superuser, leave empty to disable credentials authentication and rely on proxy authentication instead
LD_SUPERUSER_PASSWORD=
# Option to disable background tasks
LD_DISABLE_BACKGROUND_TASKS=False
# Option to disable URL validation for bookmarks completely
LD_DISABLE_URL_VALIDATION=False
# Enables support for authentication proxies such as Authelia
LD_ENABLE_AUTH_PROXY=False
# Name of the request header that the auth proxy passes to the application to identify the user
# See docs/Options.md for more details
LD_AUTH_PROXY_USERNAME_HEADER=
# The URL that linkding should redirect to after a logout, when using an auth proxy
# See docs/Options.md for more details
LD_AUTH_PROXY_LOGOUT_URL=
# Disables the login form, useful to enforce OIDC authentication
LD_DISABLE_LOGIN_FORM=False
# List of trusted origins from which to accept POST requests
# See docs/Options.md for more details
LD_CSRF_TRUSTED_ORIGINS=
# Database settings
# These are currently only required for configuring PostreSQL.
# By default, linkding uses SQLite for which you don't need to configure anything.
# Database engine, can be sqlite (default) or postgres
LD_DB_ENGINE=
# Database name (default: linkding)
LD_DB_DATABASE=
# Username to connect to the database server  (default: linkding)
LD_DB_USER=
# Password to connect to the database server
LD_DB_PASSWORD=
# The hostname where the database is hosted (default: localhost)
LD_DB_HOST=
# Port use to connect to the database server
# Should use the default port if not set
LD_DB_PORT=
# Any additional options to pass to the database (default: {})
LD_DB_OPTIONS=

上面内容比较多,大部分保持默认就行,你只需要改这几项

# 管理员用户名(必填,否则无法登录)
LD_SUPERUSER_NAME=admin
# 管理员密码(必填,设一个靠谱的密码)
LD_SUPERUSER_PASSWORD=your_strong_password_here
# 服务器端口(默认 9090,可以改成你想要的)
LD_HOST_PORT=9090
# 数据存储目录(默认 ./data,一般不用改)
LD_HOST_DATA_DIR=./data

docker-compose.yml 文件内容(不需要改动)

说明:镜像地址使用了 ghcr.io/sissbruecker/linkding:latest(GitHub Container Registry),这是官方文档提供的镜像源之一,国内访问更稳定。官方同时提供的还有 Docker Hub 源 sissbruecker/linkding:latest,如果你网络环境没问题也可以用。
services:
  linkding:
    container_name: "${LD_CONTAINER_NAME:-linkding}"
    image: ghcr.io/sissbruecker/linkding:latest
    ports:
      - "${LD_HOST_PORT:-9090}:9090"
    volumes:
      - "${LD_HOST_DATA_DIR:-./data}:/etc/linkding/data"
    env_file:
      - .env
    restart: unless-stopped

可以看到,端口、数据目录这些都由 .env 控制,所以只需要改 .env 就行。

需要改的地方汇总:

参数在哪改说明
LD_SUPERUSER_NAME.env 文件管理员用户名,改成你自己的
LD_SUPERUSER_PASSWORD.env 文件管理员密码,设一个靠谱的密码
LD_HOST_PORT.env 文件服务器端口,默认 9090,可改
其他参数.env 文件不用动,保持默认即可

第四步:启动容器

有两种方式,选你习惯的。注意:二选一,不要混用——宝塔方式的数据目录在宝塔管理的路径下,升级在面板操作;命令行方式的数据在 /opt/linkding/data,升级用命令。两者数据目录和升级方式各不相同,混用会导致数据对不上。

方式一:宝塔面板(推荐)

宝塔提供了两种操作方式,效果一样,选你喜欢的:

  • 容器编排(推荐):[下载好配置文件]后路径选择 /opt/linkding,或者跳过第三步直接在表单中填写配置内容。操作:Docker → 容器编排 → 添加容器编排 → 名称填 linkding → 提交 → 启动

linkding-tj_w.webp

  • 图形化创建容器:不想碰配置文件的话,Docker → 镜像 → 拉取 sissbruecker/linkding → 创建容器,填写端口映射(9090:9090)、目录映射(/opt/linkding/data/etc/linkding/data)、环境变量(LD_SUPERUSER_NAMELD_SUPERUSER_PASSWORD)、重启策略(unless-stopped

linkding-la_w.webp

注意:图形化创建容器没有配置文件存档,后续升级或迁移时需要重新填写参数,建议记下来。推荐使用容器编排方式。

方式二:命令行

cd /opt/linkding
docker-compose up -d

看到 Creating linkding ... done 就说明跑起来了。


linkding-bpok_w.webp

linkding-rqok_w.webp


如果你打算直接通过IP http://服务器IP:9090 访问 linkding,查看第五步、第六步,否则跳过。

第五步:配置防火墙

需要在宝塔面板中放行端口:

  1. 进入 安全 页面
  2. 添加规则,放行 9090 端口

如果使用的是阿里云、腾讯云等云服务器,还需要在云控制台的安全组中放行该端口。

注意:如果你后续会配置反向代理(第七步),通过域名访问的话,走的是 80/443 端口,这一步可以跳过。本地测试环境(localhost)不需要配置。

第六步:测试 linkding

浏览器访问:

http://你的服务器IP:9090

用之前设置的管理员账号密码登录,看到书签管理界面就说明部署成功了。

第七步:配置反向代理与 HTTPS

注意:不建议在宝塔 Docker 管理器的"网站"板块直接添加域名代理,可能会遇到各种奇怪的问题。而且删除代理域名时往往删不干净——比如勾选了"删除目录"但实际并未删除,残留文件还会影响后续配置。建议按下面的方式操作。

方式一:独立子域名(如 bookmarks.yourdomain.com

linkding-dL_w.webp

  1. 宝塔面板 → 网站添加站点,填入你的域名(如 bookmarks.yourdomain.com
  2. 进入站点设置 → 反向代理 → 添加反向代理

    • 代理名称:linkding
    • 目标 URL:http://127.0.0.1:9090
  3. 进入站点设置 → SSL → 配置证书
  4. 开启强制 HTTPS

linkding-wjt_w.webp

重要:宝塔默认用 Nginx 做反向代理,而 Nginx 默认会重写 Host 头,这会导致 linkding 登录失败。需要在伪静态的配置中加上两行:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;

在宝塔中操作:站点设置 → 伪静态,把这两行加到里面,保存即可。

方式二:主域名的二级目录(如 yourdomain.com/bm/

如果你的主域名已经有网站(比如 Typecho),想把 linkding 挂在二级目录下:

  1. 编辑 .env 文件,添加:

    LD_CONTEXT_PATH=bm/

    注意末尾的 / 不能省略,且不要加前导 / 然后重启容器。

  2. 在宝塔面板中,进入主域名站点的 设置配置文件
  3. include 伪静态规则之前,插入以下内容:

    # 阻止伪静态规则拦截 /bm/ 请求
    rewrite ^/bm/(.*)$ /bm/$1 break;
    
    # linkding 二级目录代理(使用 ^~ 确保优先级高于静态文件规则)
    location ^~ /bm/ {
        proxy_pass http://127.0.0.1:9090/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

linkding-wjtlj_w.webp

几个关键点:

  • location 前面加 ^~,否则会被 Nginx 的静态文件缓存规则(location ~ .*\.(js|css)?$ 等)截获,导致页面样式丢失
  • proxy_pass 末尾要加 /,作用是去掉 /bm/ 前缀再转发给 linkding
  • LD_CONTEXT_PATH 不要加前导 /(写 bm/ 而不是 /bm/),否则内部路径会出错
  • rewrite 规则必须放在 include 伪静态规则之前,否则 Typecho 的 rewrite 会先拦截请求
  1. 保存后执行 nginx -t && systemctl reload nginx

配置完成后,访问 https://yourdomain.com/bm/ 即可。

💡 踩坑实录(仅供参考,博君一笑)

别看上面就几步配置,实际调试的时候可是一波三折。记录一下,说不定能帮到同样在折腾的朋友:

第一关:Typecho 的"拦截"

配完 Nginx 后访问 /bookmarks/,结果出来的是 Typecho 的 404 页面——自己的博客把书签管理器给拦了。原因很简单:Typecho 的伪静态规则(通过 include 引入)是所有请求先过它那一遍,/bookmarks/ 直接被当成不存在的文章处理。解决办法是在 include 之前加一条 rewrite ^/bookmarks/(.*)$ /bookmarks/$1 break;,告诉 Nginx"这个路径别动,直接放行"。

第二关:前导斜杠的影响

伪静态搞定了,但 linkding 自己报 404。查了容器日志,发现内部路径变成了 //bookmarks/health——双斜杠!罪魁祸首是 .envLD_CONTEXT_PATH 写成了 /bookmarks/(带前导 /),linkding 拼接路径时又加了一个 /,直接把路由搞崩了。改成 bookmarks/(不带前导 /)就行。这一步没细看导致出错

第三关:CSS 去哪了?

终于能访问了,但页面没样式、没图标,像回到了 1998 年。F12 一看,所有 .js.css 文件全是 404。原因是 Nginx 里有一条 location ~ .*\.(js|css)?$ 的正则规则,优先级比普通 location /bookmarks/ 高,把静态资源请求全截走了。加个 ^~ 前缀提升优先级就行。

第四关:地址路径是/bookmarks/bookmarks?

一切就绪后,打开书签列表,地址栏赫然显示 /bookmarks/bookmarks/。没错,linkding 内部的书签路由就是 /bookmarks/,套上二级目录前缀就变成了双重"bookmarks"。虽然功能完全正常,但看着有点别扭,就把路径改成了 bm/——短小精悍。

所以你现在看到教程里用的是 /bm/ 而不是 /bookmarks/——这不是随便选的,是"实践出真知" 😂

附:升级 linkding

linkding 更新挺频繁的,升级也很简单,数据不会丢(都存在数据卷目录里)。

宝塔面板(方式一)

  1. 宝塔左侧菜单 → Docker容器编排 标签页
  2. 找到 linkding 项目,点击 更新镜像,等待拉取完成
  3. 点击 重建,容器会用新镜像重建并启动

命令行(方式二)

cd /opt/linkding
docker-compose pull
docker-compose up -d
注意:如果是通过宝塔图形化创建容器(非容器编排)部署的,升级需要手动操作:先在镜像标签页拉取最新镜像,然后删除旧容器,再用新镜像重新创建容器(环境变量和目录映射要重新填写)。这也是为什么推荐使用容器编排方式——升级一条龙,不用反复填参数。

附:镜像拉取失败怎么办?

如果你在拉取镜像时遇到以下错误:

Image sissbruecker/linkding:latest Pulling
Image sissbruecker/linkding:latest Error
failed to resolve reference "docker.io/sissbruecker/linkding:latest": not found

这是因为 Docker Hub(docker.io)在国内访问不稳定导致的。解决办法是把镜像地址换成 GitHub Container Registry(GHCR):

docker-compose.yml 中,把:

image: sissbruecker/linkding:latest

改成:

image: ghcr.io/sissbruecker/linkding:latest

然后重新执行 docker-compose up -d 即可。

注意:如果你是通过宝塔图形化拉取镜像(图形化创建容器方式),宝塔默认走镜像加速,一般不会遇到这个问题,直接搜索 sissbruecker/linkding 就能拉取。

四、使用技巧

1. 安装浏览器扩展

下载 ChromeFirefox 扩展,打开开发者模式后拖入安装,(如果无法访问Chrome ,可以通过Crx直链下载)在扩展设置中填入你的 linkding 地址和 API Token(在用户设置页面获取)。之后浏览网页时点击扩展图标即可一键保存,体验会好很多。

linkding-inst1_w.webp

linkding-inst2_w.webp

linkding-inst3_w.webp

2. 批量导入旧书签

如果之前使用浏览器书签,可以在浏览器书签管理器中导出为 HTML 文件,然后在 linkding 的设置页面直接导入,基本能无损迁移。

3. 善用 Markdown 笔记

收藏书签时支持顺手写几句记录作为说明。

4. 定期备份数据

如果有需求的话:linkding 的所有数据存储在数据卷目录里(命令行方式默认是 /opt/linkding/data,宝塔容器编排方式在宝塔管理的路径下),定期备份这个目录即可。也可以通过宝塔面板的计划任务设置自动备份:

# 每天凌晨 3 点自动打包备份(请根据实际数据目录修改路径)
tar -czf /opt/backup/linkding-$(date +%Y%m%d).tar.gz /opt/linkding/data

五、总结

优点:

  • 轻量:SQLite,1核1G 的服务器即可流畅运行,界面干净
  • 自主:数据存在自己服务器上,开源免费,不依赖任何第三方服务
  • 接入:支持api、Ai Bot

缺点:

  • 不支持全文搜索:只能按标题、描述、标签搜索,无法搜索网页正文内容(如果你想折腾还真有办法-社区有 serchding 项目可以补充这个能力)
  • 语言: 官方无中文,可关注其他博主汉化

相关链接


写这篇文章时 linkding 最新版本为 v1.45.0,功能可能随版本更新有所变化,请以官方文档为准。

文章目录

  • 一、linkding 是什么?
    • 同类工具速览
  • 二、核心功能
  • 三、宝塔面板部署教程
    • 前置条件
    • 第一步:安装 Docker
    • 第二步:创建项目目录
    • 第三步:下载配置文件
    • 第四步:启动容器
    • 第五步:配置防火墙
    • 第六步:测试 linkding
    • 第七步:配置反向代理与 HTTPS
    • 附:升级 linkding
    • 附:镜像拉取失败怎么办?
  • 四、使用技巧
    • 1. 安装浏览器扩展
    • 2. 批量导入旧书签
    • 3. 善用 Markdown 笔记
    • 4. 定期备份数据
  • 五、总结
    • 相关链接