部署书签管理工具 Linkding 的三种方案
Linkding 是一个自托管的书签管理工具,主打极简、快速、易部署,支持自动获取网页标题/描述/图标、批量编辑、多用户共享、浏览器插件等功能,非常适合追求轻量化的用户。
部署 Linkding 是我第一次接触 Docker,这个过程踩了一些坑,但是对 Docker 的理解加深了不少。
在 macOS 本地部署
这种方式部署的服务提供公网访问会比较麻烦,也不见得安全,我仅作为本地测试和学习研究使用。
我选择使用 OrbStack 来代替 Docker Desktop,首先下载安装 OrbStack,即可实现 Docker 开箱即用。
打开终端执行下列命令来下载 Linkding 的 Docker 镜像文件。
docker pull sissbruecker/linkding:latest
这一步如果遇到网络问题导致 Docker 镜像文件下载失败,可以参考 使用 Cloudflare 部署 Docker 镜像代理 解决。
创建一个卷(Volume),用于单独存储 Linkding 的数据,可以避免后续容器万一被删除导致数据丢失。
docker volume create linkding
启动一个 Linkding 容器:
docker run --name linkding -p 9090:9090 -v linkding:/etc/linkding/data -d sissbruecker/linkding:latest
由于 Linkding 不提供初始化用户,所以需要先注册一个超级用户:
docker exec -it linkding python manage.py createsuperuser --username=[username] --email=[email]
根据提示输入两次密码。由于终端中输入密码不可见,如果总是设置错误,可以先设置一个简单的密码,在登录 Linkding Web 后台后再重设密码。
通过 OrbStack 一键访问 Linkding Web 后台:
后续也可以在 OrbStack 中管理、操作 Docker 的 Image、Volume 和 Container,会比使用命令方便不少。
在 Zeabur 部署
Zeabur 是一个简单易用的云服务平台,帮助开发者快速部署和管理应用,支持多种编程语言和框架,提供一键部署、自动扩缩容等功能。使用 Zeabur 部署 Docker 也非常简单。
首先注册登录 Zeabur 后点击「New Project」,选择想要部署服务的地区。没有付费订阅的 Free Trial Plan 账户能选择的地区应该很受限,按需选择即可。
Zeabur 会以一个随机的名称(后续可修改)创建空白项目。在项目内选择「Deploy New Service」,在搜索框输入 Linkding,社区提供了 Linkding 模板,所以直接点击「Deploy」即可。然后等待一段时间即可部署成功。
而 Zeabur 的 Free Trial Plan(我还不打算仅为了部署 Linkding 而付费订阅 Zeabur)在我实际体验过程中服务不是很稳定,部署经常遇到 Queued 几个小时在执行构建,配置的域名也出现了长时间 PROVISIONING。
在云服务器部署 😎
所以还是在云服务器上部署是相对较为靠谱的方案。
在云服务部署 Linkding 的流程和 在 macOS 本地部署 完全一致,依然是下载镜像、创建 Volume、启动容器、注册用户这 4 大步即可。不过由于云服务器部署后我希望能通过我的域名访问到服务,并且走 HTTPS,所有还有一些额外的步骤。
要支持 HTTPS 首先得有 SSL 证书,选择使用 Certbot 获取,Certbot 是 Let‘s Encrypt 的官方客户端,支持自动签发免费的 SSL 证书。考虑到未来还会在这台云服务器上部署更多服务,所以直接使用 Nginx 进行反向代理,方便以后管理多个服务。
虽然大部分服务会考虑使用 Docker 部署,但是 Nginx 还是选择传统方式安装部署,复杂度会低于 Docker 方案,更简单。
本章节所有命令仅在 Ubuntu Server 22.04 LTS 64bit 环境下测试通过。
配置 Nginx
在云服务器上安装 Nginx:
sudo apt update
sudo apt install nginx -y
启动 Nginx 并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
验证 Nginx 运行状态:
sudo systemctl status nginx
如果 Nginx 运行正常,直接在浏览器访问云服务器公网 IP,可以看到 Nginx 欢迎页:
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/linkding.rokcso.com
写入以下配置内容:
server {
listen 80;
server_name linkding.rokcso.com;
location / {
proxy_pass http://localhost:9090; # 转发到 Linkding 容器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/linkding.rokcso.com /etc/nginx/sites-enabled/
sudo nginx -t # 检查语法是否正确
sudo systemctl reload nginx
此时访问 http://linkding.rokcso.com
就能正常访问到 Linkding 了。
启用 HTTPS
在云服务器上安装 Certbot:
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
获取证书并自动配置 Nginx:
sudo certbot --nginx -d linkding.rokcso.com
Certbot 会:
- 自动验证域名所有权(需确保
linkding.rokcso.com
解析正确); - 签发 Let’s Encrypt SSL 证书;
- 修改 Nginx 配置,强制 HTTP 跳转到 HTTPS。
此时访问 https://linkding.rokcso.com
就能正常访问到 Linkding 了。
由于 Let‘s Encrypt 的 SSL 证书有效期为 90 天,可以设置一个自动续期。首先模拟 SSL 证书续订过程(不会实际更新证书),测试 Certbot 的自动续订功能是否能正常工作:
sudo certbot renew --dry-run
添加定时任务(Crontab):
sudo crontab -e
添加任务配置,每天 00:00 静默执行 Certbot 续订命令(当证书有效期 ≤ 30 天时,才会实际更新证书):
0 0 * * * /usr/bin/certbot renew --quiet
Certbot 续订证书之后会自动执行 nginx -s reload
重启 Nginx。
最后,欢迎访问我的 Linkding Share Page 看看吧。