diff --git a/package.json b/package.json index 737b7428..18bdfd8e 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,6 @@ "workbox-window": "^6.5.4" }, "dependencies": { - "netlify-cli": "^12.3.0" + "netlify-cli": "^12.4.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf331079..1c4967a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,7 +34,7 @@ specifiers: github-slugger: ^2.0.0 mdast-util-to-string: ^3.1.0 mdsvex: ^0.10.6 - netlify-cli: ^12.3.0 + netlify-cli: ^12.4.0 npm-run-all: ^4.1.5 postcss: ^8.4.20 prettier: ^2.8.1 @@ -63,7 +63,7 @@ specifiers: workbox-window: ^6.5.4 dependencies: - netlify-cli: 12.3.0_@types+node@18.11.15 + netlify-cli: 12.4.0_@types+node@18.11.15 devDependencies: '@iconify-json/heroicons-outline': 1.1.5 @@ -451,7 +451,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.20.5 - dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.5: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -8984,8 +8983,8 @@ packages: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} dev: false - /netlify-cli/12.3.0_@types+node@18.11.15: - resolution: {integrity: sha512-CPg1hi/21qwZP+pnyHIXOEzWgNRFAvFQ4uMvH/k2vPIS1LOAdFn31Y8J8ISOKLF1zUArbTawanpEhDjqMutCfg==} + /netlify-cli/12.4.0_@types+node@18.11.15: + resolution: {integrity: sha512-psSL2L548C7bBr4JJQjmnqWQIuu/O2ZeL9FIrJd7dm6VTt3vKDMM1/eQluwUuXcBqVmYKNFh4UeMnVC/gqh4qg==} engines: {node: ^14.16.0 || >=16.0.0} hasBin: true requiresBuild: true @@ -9213,14 +9212,14 @@ packages: resolution: {integrity: sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==} engines: {node: '>=6.0'} dependencies: - '@babel/parser': 7.16.8 + '@babel/parser': 7.20.5 dev: false /node-source-walk/5.0.0: resolution: {integrity: sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==} engines: {node: '>=12'} dependencies: - '@babel/parser': 7.16.8 + '@babel/parser': 7.20.5 dev: false /node-stream-zip/1.15.0: diff --git a/src/lib/components/extra/github.svelte b/src/lib/components/extra/github.svelte index 8054e876..5088c33e 100644 --- a/src/lib/components/extra/github.svelte +++ b/src/lib/components/extra/github.svelte @@ -3,8 +3,8 @@ + + + +## 功能介绍 + +Linkding 是一款极简、高效、容易使用的自建书签应用,官方文档写的主要特点有: + +- Organize bookmarks with tags——用标签来管理书签 +- Read it later functionality——稍后读功能 +- Share bookmarks with other users——和他人分享书签 +- Bulk editing——批量管理书签 +- Bookmark archive——书签 Archive 功能 +- Automatically provides titles and descriptions of bookmarked websites——自动获取书签网页的标题和描述 +- Automatically creates snapshots of bookmarked websites on the Internet Archive Wayback Machine——自动创建网页快照上传到[Internet Archive Wayback Machine](https://web.archive.org/). +- Import and export bookmarks in Netscape HTML format——以 Netscape HTML 的格式导入和导出书签 +- Extensions for Firefox and Chrome, as well as a bookmarklet——有支持 Firefox 和 Chrome 的浏览器插件,以及 bookmarklet +- Light and dark themes——明亮和黑暗模式 +- REST API for developing 3rd party apps——用于开发第三方应用的 REST API +- Admin panel for user self-service and raw data access——用户自助服务和原始数据访问的管理面板 +- Easy setup using Docker, uses SQLite as database——使用 Docker 轻松设置,使用 SQLite 作为数据库 + +里面没有提到的比较吸引人的几个比较吸引人的功能: + +- 联合 Miniflux 同步收藏 +- 书签 List 可以自动生成 RSS 源 +- 使用浏览器插件[Linkding-injector](https://github.com/Fivefold/linkding-injector)可以在搜索引擎搜索时显示书签内相符的内容 + +## 搭建 + +我采用 `docker-compose` 的方式来部署 Linkidng,下面是具体搭建步骤: + +### 1.创建配置文件夹 + +```bash + sudo mkdir /opt/linkding && cd /opt/linkding +``` + +也可以放在别的地方,这个位置并不影响 + +### 2.修改配置 + +```bash + sudo nano docker-compose.yml +``` + +复制 [linkding/docker-compose.yml](https://github.com/sissbruecker/linkding/blob/master/docker-compose.yml),粘贴进去,也就是: + +```yaml +version: '3' + +services: + linkding: + container_name: '${LD_CONTAINER_NAME:-linkding}' + image: 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`: + +```bash +sudo nano .env +``` + +将[`.env.example`](https://github.com/sissbruecker/linkding/blob/master/.env.sample) 下面的内容 copy 进去,按照[文档](https://github.com/sissbruecker/linkding/blob/master/docs/Options.md)调整自己的配置,下面是我的配置: + +```bash title=".env" {9,12} +# Docker container name +LD_CONTAINER_NAME=linkding +# Port on the host system that the application should be published on +# 端口号,默认9090 +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 +# Username of the initial superuser to create, leave empty to not create one +# 设置管理员用户名 +LD_SUPERUSER_NAME=test +# Password for the initial superuser, leave empty to disable credentials authentication and rely on proxy authentication instead +# 设置管理员密码 +LD_SUPERUSER_PASSWORD=1234 +# 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 +``` + +注意修改用户名和用户密码,保存后`sudo docker compose up -d`上线 docker,然后就可以在`http://ip:9090`预览 Linkding 页面了, + +### 3.配置反代 + +nginx 配置(和往常一样,没有什么特别的): + +```conf + server { + listen 443 ssl; + server_name 域名; + + location / { + proxy_pass http://127.0.0.1:9090; + proxy_redirect off; + 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; + } + } +``` + +这一步具体可以参考[VPS · 配置 Cloudflare 的免费 SSL 证书-Nginx 配置](/2022-06-12-cloudflare/#3-%E4%BF%AE%E6%94%B9-nginx-%E9%85%8D%E7%BD%AE)部分内容,在此不再赘述,`nginx -t` 和 `systemctl reload nginx` 一套操作下来之后就可以在相应的域名访问 Linkding 了,然后用上面设置的用户名和密码登录 diff --git a/urara/2022-12-19-search-injectors/+page.md b/urara/2022-12-19-search-injectors/+page.md new file mode 100644 index 00000000..645e4d03 --- /dev/null +++ b/urara/2022-12-19-search-injectors/+page.md @@ -0,0 +1,67 @@ +--- +title: Miniflux Injector · 构建自己的搜索引擎 +created: 2022-12-19 +summary: Build your own search engine by Miniflux&Linkidng injector +image: /2022-12-19-search-injectors/cover.png +--- + +在前文 [搭建可一键 Archive 的书签应用-Linkding](/2022-12-18-linkding-intro) 中我里面提到了 [Linkding-Injector](https://github.com/Fivefold/linkding-injector) 这个插件,在用了一段时间后我特别喜欢,因为这样在某些程度上可以避免「稍后读」=>「永远不读」的困境,但是 Linkding 里面的内容又总是太少了,常常搜不到什么内容,然后…… +面对 [Miniflux](https://miniflux.app/)中五万多条未读,我决定做些什么。 + +## 关于 Miniflux-Injector + + + + + +Miniflux Injector 是 Fork 自 Linkding-injector 的一个浏览器插件,它可以将 Miniflux 的搜索结果注入到 Google 和 Duckduckgo 等搜索页面。 + +使用效果: +![duckduckgo](https://github.com/Sevichecc/miniflux-injector/raw/main/docs/duckduckgo.png) + +![google](https://github.com/Sevichecc/miniflux-injector/raw/main/docs/google.png) + +## 安装 + +### FireFox + +从 [Mozilla Addon Store](https://addons.mozilla.org/zh-CN/firefox/addon/miniflux-injector/)中添加 + +### Chrome + +1. 下载最新 [release](https://github.com/Sevichecc/miniflux-injector/releases/tag/v1.0.1)中的`miniflux_injector-1.0.1.zip`压缩包并解压 +2. 在浏览器拓展管理页面中打开`开发者模式` +3. 点击`加载已解压的扩展程序`选取刚刚解压的文件夹,如图就是加载好了: + ![](/2022-12-19-search-injectors/setting.png) + +Brave 浏览器同理 + +## 配置 + +### 1. 生成 Miniflux API Token + +在`https://你的miniflux域名/keys` 下,点击`Create a new API Key` 创建,`API Key Label`可以随意填,创建完后复制 Token + +### 2. 填入 Token + +打开扩展配置页面,填入刚才复制的 Token 和其他内容: +![](/2022-12-19-search-injectors/config.png) +点击右下角的`Save` 保存配置,如果配置成功,则会出现`Connection successful` 的字样 + +### 3. 关于默认配置 + +- Max Search result:默认展示的条目数 +- Open Link in a New Tab:在新页面打开链接 +- Open in Miniflux:可以选择在 Miniflux 中打开链接,需要注意的是此设置打开后搜索会变慢 + +配置完成之后就可以在 DuckDuckGo 和 Google 中搜索看看啦~ + +## 后记 + +我目前的 RSS Feed 有 951 条,未读 53460 条……不过有了 Miniflux-injector 我相信不会积灰了,还看到有人在开发[shiori-injector](https://github.com/tezlm/shiori-injector),[shiori](https://github.com/go-shiori/shiori) 跟 linkding 一样,也是一个书签管理器,和和 linkding 不一样的是,shiori 还保存了源网页的内容,类似 Pocket 的感觉,我之前试过,功能还不是很完善,所以没有用下去,未来还会不会再次尝试呢?暂不清楚 + +- 发现更多的 RSS 源,我推荐 [RSS+](https://greasyfork.org/zh-CN/scripts/373252-rss-show-site-all-rss) + +- 推荐阅读:[Use RSS for privacy and efficiency](https://rsapkf.org/weblog/q2z) diff --git a/urara/2022-12-19-search-injectors/API.png b/urara/2022-12-19-search-injectors/API.png new file mode 100644 index 00000000..aff9be53 Binary files /dev/null and b/urara/2022-12-19-search-injectors/API.png differ diff --git a/urara/2022-12-19-search-injectors/config.png b/urara/2022-12-19-search-injectors/config.png new file mode 100644 index 00000000..dccbfd9e Binary files /dev/null and b/urara/2022-12-19-search-injectors/config.png differ diff --git a/urara/2022-12-19-search-injectors/cover.png b/urara/2022-12-19-search-injectors/cover.png new file mode 100644 index 00000000..3f8aca4b Binary files /dev/null and b/urara/2022-12-19-search-injectors/cover.png differ diff --git a/urara/2022-12-19-search-injectors/detail.png b/urara/2022-12-19-search-injectors/detail.png new file mode 100644 index 00000000..aeb6fa05 Binary files /dev/null and b/urara/2022-12-19-search-injectors/detail.png differ diff --git a/urara/2022-12-19-search-injectors/miniflux-unread.png b/urara/2022-12-19-search-injectors/miniflux-unread.png new file mode 100644 index 00000000..6bf36745 Binary files /dev/null and b/urara/2022-12-19-search-injectors/miniflux-unread.png differ diff --git a/urara/2022-12-19-search-injectors/setting.png b/urara/2022-12-19-search-injectors/setting.png new file mode 100644 index 00000000..eb8d0968 Binary files /dev/null and b/urara/2022-12-19-search-injectors/setting.png differ