hoarder的特性(摘自项目页面):
🔗 Bookmark links, take simple notes and store images.
⬇️ Automatic fetching for link titles, descriptions and images.
📋 Sort your bookmarks into lists.
🔎 Full text search of all the content stored.
✨ AI-based (aka chatgpt) automatic tagging. With supports for local models using ollama!
🔖 Chrome plugin and Firefox addon for quick bookmarking.
📱 An iOS app that’s pending apple’s review (currently beta testing), and the Android app is almost ready.
🌙 Dark mode support (web only so far).
💾 Self-hosting first.
[Planned] Downloading the content for offline reading.
这篇文章记录下hoarder和ollama整合的配置过程。
安装需要用到的软件包:
apt -y update apt -y install curl wget nginx python3-certbot-nginx curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
[可选]部署ollama,下载ollama的二进制文件给执行权限:
curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/local/bin/ollama chmod +x /usr/local/bin/ollama
创建一个用户:
useradd -r -s /bin/false -m -d /usr/share/ollama ollama
创建systemd服务文件:
nano /etc/systemd/system/ollama.service
写入如下内容:
[Unit] Description=Ollama Service After=network-online.target [Service] Environment="OLLAMA_HOST=0.0.0.0" ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 [Install] WantedBy=default.target
[备注]注意OLLAMA_HOST这个环境变量,务必配置成0.0.0.0。
启动并设置开机自启:
systemctl enable --now ollama
[备注1]ollama是支持gpu的,但我这台独立服务器上没有gpu,所以我没有配置相关的内容,如果你的机器有gpu,可以参考这里进行配置。
[备注2]7b以下的模型,包括7b在内,实际上一个6代i5的cpu就能跑的很流畅了,所以gpu并不是一定需要。。当然如果有的话那更好。。
现在就可以用ollama运行模型了,在这里可以找到可用的模型:https://ollama.com/library
现在最热门的模型应该就是llama3了,毕竟刚刚发布不到2天。。这里我就用它了,执行如下命令下载:
ollama run llama3:8b
等待下载完成,你就可以在命令行和这个模型进行交互了:
Ctrl+D可以退出来,如果后续你希望hoarder能够识别图片,为图片自动添加标签,则还需要下载llava模型:
ollama pull llava
至此ollama的部署就完成了。接下来我们来部署hoarder。
创建目录、下载compose文件:
mkdir -p /opt/hoarder && cd /opt/hoarder && wget https://raw.githubusercontent.com/MohamedBassem/hoarder-app/main/docker/docker-compose.yml
由于我没有使用docker部署ollama,我是将ollama部署到主机的,但hoarder是通过docker部署的,为了让hoarder能够访问到主机的ollama,需要对hoarder的compose文件进行一些修改,编辑compose文件:
nano docker-compose.yml
在web和workers这两个services内添加host.docker.internal:host-gateway相关的配置:
version: "3.8" services: web: image: ghcr.io/mohamedbassem/hoarder-web:${HOARDER_VERSION:-release} restart: unless-stopped ... extra_hosts: - "host.docker.internal:host-gateway" ... workers: image: ghcr.io/mohamedbassem/hoarder-workers:${HOARDER_VERSION:-release} restart: unless-stopped ... extra_hosts: - "host.docker.internal:host-gateway" depends_on: web: condition: service_started ...
创建一个.env环境变量配置文件:
nano .env
写入如下内容:
HOARDER_VERSION=release NEXTAUTH_SECRET=hidden MEILI_MASTER_KEY=hidden NEXTAUTH_URL=https://hoarder.example.com OLLAMA_BASE_URL=http://host.docker.internal:11434 INFERENCE_TEXT_MODEL=llama3 INFERENCE_IMAGE_MODEL=llava
NEXTAUTH_SECRET和MEILI_MASTER_KEY可以使用下面的命令生成:
openssl rand -base64 36
[备注1]务必将NEXTAUTH_URL后面的域名修改为你自己的。
[备注2]如果不需要ollama的支持,可以删掉OLLAMA_BASE_URL、INFERENCE_TEXT_MODEL、INFERENCE_IMAGE_MODEL这三个环境变量。
启动:
docker compose up -d
配置nginx反向代理,新建nginx站点配置文件:
nano /etc/nginx/sites-available/hoarder
写入如下内容:
server { listen 80; listen [::]:80; server_name hoarder.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Accept-Encoding ""; proxy_set_header Host $host; client_max_body_size 0; } }
启用站点:
ln -s /etc/nginx/sites-available/hoarder /etc/nginx/sites-enabled/hoarder
申请tls证书:
certbot --nginx --email imlala@example.com --agree-tos --no-eff-email
访问域名,注册一个账号,注册完成之后,如果要关闭注册,可编辑.env文件:
nano .env
加入如下环境变量:
DISABLE_SIGNUPS=true
使其生效:
docker compose up -d
我测试了一下,自动添加标签(tag)还是挺准的,无论是网页、图片、笔记都可以: