十分钟搭建一个「万物皆可存」的智能书签应用——karakeep|好玩儿的 Docker 项目

本博客用什么VPS?创作不易,欢迎请咕咕喝杯咖啡☕☕☕

1. 唠嗑

好久没更新了,这周来和大家分享一个好用的书签工具——Karakeep

2. karakeep 简介

Karakeep(前身为 Hoarder)是一款可自托管的「万物皆可存」书签应用,专为数据囤积爱好者打造,融入一丝 AI 魔法。

b877b9e2ebadea6bd7eb91991a4744e4.png

功能

  • 🔗 书签链接、记录简单笔记,并存储图片和 PDF 文件。

  • ⬇️ 自动抓取链接标题、描述和预览图。

  • 📋 将书签整理到不同列表中。

  • 🔎 全文本搜索所有存储内容。

  • ✨ 基于 AI(类似 ChatGPT)自动打标签和生成摘要。支持使用 Ollama 运行本地模型!

  • 🤖 规则引擎,实现自定义管理。

  • 🎆 图像 OCR,提取图片中的文字。

  • 🔖 Chrome 插件和 Firefox 扩展,快速添加书签。

  • 📱 iOS 应用和 Android 应用。

  • 📰 从 RSS 订阅源自动归档内容。

  • 🔌 REST API 和多种客户端。

  • 🌐 多语言支持。

  • 🖍️ 标记并保存归档内容中的高亮片段。

  • 🗄️ 完整页面归档(使用 monolith),防止链接失效。

  • ▶️ 使用 yt-dlp 自动归档视频。

  • ☑️ 支持批量操作。

  • 🔐 支持 SSO 单点登录。

  • 🌙 深色模式。

  • 💾 优先支持自托管。

  • ⬇️ 从 Chrome、Pocket、Linkwarden、Omnivore、Tab Session Manager 导入书签。

  • 🔄 通过 floccus 与浏览器书签自动同步。

  • [计划中] 移动端离线阅读、书签语义搜索,……

6fb0d16e6fa436a7fceaa95125fee34d.png

3. 相关地址

官方 GitHub 地址:https://github.com/karakeep-app/karakeep (目前 21.1k 个 star,欢迎大家去给项目点星星!)

Demo 地址:https://try.karakeep.app

默认账号密码:

Email: demo@karakeep.app

Password: demodemo

当然如果你体验完还想自己用 docker 搭建一个,那我们就继续往下!

4. 搭建环境

5. 搭建视频(过俩周补充 = =)

5.1 YouTube

视频地址:

5.2 哔哩哔哩

哔哩哔哩:

6. 搭建方式

6.1 安装 Docker 与 Nginx Proxy Manager

可以直接参考这篇内容:

https://blog.laoda.de/archives/nginxproxymanager/

6.2 创建安装目录

创建一下安装的目录:

sudo -i

mkdir -p /root/data/docker_data/karakeep

cd /root/data/docker_data/karakeep

接着我们来编辑下docker-compose.yml

vim docker-compose.yml
services:
  web:
    image: ghcr.io/karakeep-app/karakeep:latest
    restart: unless-stopped
    volumes:
      # By default, the data is stored in a docker volume called "data".
      # If you want to mount a custom directory, change the volume mapping to:
      # - /path/to/your/directory:/data
      - ./data:/data
    ports:
      - 3030:3000
    env_file:
      - .env
    environment:
      MEILI_ADDR: http://meilisearch:7700
      BROWSER_WEB_URL: http://chrome:9222
      # OPENAI_API_KEY: ...

      # You almost never want to change the value of the DATA_DIR variable.
      # If you want to mount a custom directory, change the volume mapping above instead.
      DATA_DIR: /data # DON'T CHANGE THIS
  chrome:
    image: gcr.io/zenika-hub/alpine-chrome:124
    restart: unless-stopped
    command:
      - --no-sandbox
      - --disable-gpu
      - --disable-dev-shm-usage
      - --remote-debugging-address=0.0.0.0
      - --remote-debugging-port=9222
      - --hide-scrollbars
  meilisearch:
    image: getmeili/meilisearch:v1.13.3
    restart: unless-stopped
    env_file:
      - .env
    environment:
      MEILI_NO_ANALYTICS: "true"
    volumes:
      - ./meilisearch:/meili_data

其中的左边的3030可以改成服务器上没有用过的端口,如果要用到AI功能的话,可以取消OPENAI_API_KEY的注释,填入自己的密钥。

修改完成之后,可以在英文输入法下,按 i 修改,完成之后,按一下 esc,然后 :wq 保存退出。

接着我们来编辑下.env

cd /root/data/docker_data/karakeep
vim .env

粘贴如下内容:

KARAKEEP_VERSION=release
NEXTAUTH_SECRET=super_random_string
MEILI_MASTER_KEY=another_random_string
NEXTAUTH_URL=http://localhost:3000
  • 其中的http://localhost:3000这个改成你自己之后用域名访问的地址,比如我的https://karakeep.gugu.ovh

  • 其中的super_random_stringanother_random_string需要我们自己生成。

我们可以先在命令行里面输入

openssl rand -base64 36

生成随机的字符,然后替代它们。

aebf462264a0d4c95fa1416bee41830a.png

我需要放在.env里的内容就是:

KARAKEEP_VERSION=release
NEXTAUTH_SECRET=Lu4YuG5pXji2/QB6blXaoWnfK2WdtKifPhEBt0UQCHqkxCAe
MEILI_MASTER_KEY=wJ222cTFWJ0/9Jnu38gU9Wb+AdCk2SBmQ687MdTbxT8c/V0b
NEXTAUTH_URL=https://karakeep.gugu.ovh

修改完成之后,同样的,可以在英文输入法下,按 i 修改,完成之后,按一下 esc,然后 :wq 保存退出。

6.3 查看端口是否被占用

查看端口是否被占用(以 3030 为例),输入:

lsof -i:3030  #查看 3030 端口是否被占用,如果被占用,重新自定义一个端口

如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

如果出现:

-bash: lsof: command not found

运行:

apt install lsof  #安装 lsof

如果端口没有被占用(被占用了就修改一下端口,比如改成 8381,注意 docker 命令行里和防火墙都要改)

6.4 启动 karakeep

cd /root/data/docker_data/karakeep

docker compose up -d   # 注意,老版本用户用 docker-compose up -d

耐心等待拉取好镜像,出现 done的字样之后,

理论上我们就可以输入 http://ip:3030 访问了。

但是这边这个服务必须先搞一下反向代理!既然是加密的项目,不能用 http 使用明文传输,我们部署在公网一定要考虑使用反向代理工具配置 SSL!

做反向代理前,你需要一个域名!

namesilo 上面 xyz 后缀的域名一年就 7 块钱,可以年抛。(冷知识,namesilo 上 6 位数字的 xyz 续费永远都是 0.99 美元 = =)

如果想要长期使用,还是建议买 com 后缀的域名,更加正规一些,可以输入 laodade 来获得 1 美元的优惠(不知道现在还有没有)

namesilo 自带隐私保护,咕咕一直在用这家,价格也是这些注册商里面比较低的,关键是他家不像其他家域名注册商,没有七七八八的套路!(就是后台界面有些 古老 = =)

【域名购买】Namesilo 优惠码和域名解析教程(附带服务器购买推荐和注意事项)

我们接着往下看!

7. 反向代理

7.1 利用 Nginx Proxy Manager

在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上域名购买、域名解析 视频教程) (名称改成你自己想要的域名前缀即可)

8a522c57d08898256ce3814d5183f811.png

之后,登陆 Nginx Proxy Manager(不会的看这个:安装 Nginx Proxy Manager相关教程))

注意:

Nginx Proxy Manager(以下简称 NPM)会用到 80443 端口,所以本机不能占用(比如原来就有 Nginx)

直接丢几张图:

deeedad5afbbcc25441ac1a41e89ba31.png
cf5928e754752471d09460cd31fb2eae.png
832a857e518a6999f692c56a1b0d6d18.png
bd08eed12b655993b53b6df83bcb6606.png
ec68bb8adeb0d9661917ba2e77032906.png

注意填写对应的 域名IP端口,按文章来的话,应该是 3030

IP 填写:

如果 Nginx Proxy Manager 和 karakeep 在同一台服务器上,可以在终端输入:

ip addr show docker0

查看对应的 Docker 容器内部 IP。

十分钟搭建一个「万物皆可存」的智能书签应用——karakeep|好玩儿的 Docker 项目

否则直接填 karakeep 所在的服务器 IP 就行。

然后访问域名就可以访问了!

7.2 利用宝塔面板

发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:

直接新建一个站点,不要数据库,不要 php,纯静态即可。

然后打开下面的配置,修改 Nginx 的配置。

image-20220819150345725
image-20220819150542867

代码如下:

location / {
      proxy_pass http://127.0.0.1:3030/;       # 注意改成你实际使用的端口
      rewrite ^/(.*)$ /$1 break;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade-Insecure-Requests 1;
      proxy_set_header X-Forwarded-Proto https;
    }

此方法对 90% 的反向代理都能生效,然后就可以用域名来安装访问了。

有同学可能会问,为什么不直接用宝塔自带的反向代理功能。

image-20220819150730128

也可以,不过咕咕自己之前遇到过当有多个网站需要反代的时候,在这边设置会报错的情况 = =

所以后来就不用了,直接用上面的方法来操作了。

8. 使用教程

非常简单,所见即所得。

登录,

32cb2fe6c8694197a931f84b06e6931d.png

首先注册一个账号,

e04dc92bb6e9435aaebfc5d43eb4f56f.png

后台页面,

2069ec87e83c0c1ad747046940e44717.png

用户设置,

213472f4fcb8caa51ae8344d98424a60.png

如果觉得英文不习惯,也可以改成中文,

0cfd2e99f9d8a159389de1d0f8b3f163.png

输入一个网址,测试一下,

2d1764ecbf9c5ff13e0692864d15659b.png

支持给你存下来的网页打标签,

58b7e0e99d814b62bfa15217b140b3a4.png

服务器统计情况,

abe96ef7a5a74c3d3cd8330ec85073c2.png

Karakeep是支持浏览器插件的,这边可以直接下载浏览器插件,方便浏览网页的时候使用,

c5519d815ece46e7a66ebf39b763ec26.png

输入你搭建好的域名,然后登录即可,

ccd39153c2f87d5ae8be6ee098cfbf7c.png

使用

ea1377f2cd994631248c61114a911c92.png

c89e80bfa4ab4a3de5f1e1b7e6c11124.png

也支持下载完整页面,

502f8bd34f6f45f8af5ad101bd17bd69.png

还有一些AI功能,大家可以自行探索。或者查看Karakeep的官方文档

8.1 更新 karakeep

这个项目后续会持续有更新,所以提供一个更新的方式。

cd /root/data/docker_data/karakeep

docker compose pull

docker compose up -d    # 请不要使用 docker compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

提示:

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]

输入 y

利用 Docker 搭建的应用,更新非常容易~

8.2 卸载 karakeep

同样进入安装页面,先停止所有容器。

cd /root/data/docker_data/karakeep

docker compose down

cd ..

rm -rf /root/data/docker_data/karakeep  # 完全删除

可以卸载得很干净。

9. 使用简介

大家有问题欢迎评论区交流。

10. 结尾

祝大家用得开心,有问题可以去 GitHub 提 Issues,也可以在评论区互相交流探讨。

同时,有能力给项目做贡献的同学,也欢迎积极加入到 项目 中来,贡献自己的一份力量!

最后,感谢作者 @civilblur 的辛苦付出,让我们能用到这么优秀的项目!欢迎大家都去给这个项目点个 star。

参考资料

官方 GitHub:https://github.com/karakeep-app/karakeep

---------------
如何觉得文章内容不错,欢迎点击一下广告,支持一下咕咕😍😍😍

原创文章,作者:Roy,如若转载,请注明出处:https://iwanlab.com/docker-compose-install-karakeep/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Roy的头像Roy
上一篇 2025年10月22日 上午11:06
下一篇 2023年6月15日 下午7:24
   

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注