支持存档的书签服务LinkWarden

在这里插入图片描述

什么是 LinkWarden ?

Linkwarden 是一个自托管、开源协作书签管理器,用于收集、组织和存档网页。目标是将您在网络上找到的有用网页和文章组织到一个地方,并且由于有用的网页可能会消失(参见链接失效的必然性),Linkwarden 还将每个网页的副本保存为屏幕截图和 PDF,确保可访问性即使原始内容不再可用。

在这里插入图片描述

官方提供了试用站点:https://linkwarden.app

重要说明

本文完成于 8 月,当时官方提供了 Dockerfile ,但是没有现成的镜像,发文时老苏发现官方对 Dockerfile 文件做了比较大的调整 ,而且也在 ghcr.io 提供了镜像,连 logo 都做了变更。 😂

老苏建议大家用官方的镜像,请将下文中 docker-compose.yml 中的 wbsu2003/linkwarden 替换为 ghcr.io/linkwarden/linkwarden:latest,其他的都是一样的。

ghcr.io 镜像的下载,可以试试 docker 代理网站:https://dockerproxy.com/,可能是现在用的人太多,速度有时候会非常慢,下载失败也是常事,不行就多试几次吧。

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

官方提供了 Dockerfile,但没找到现成的镜像,所以需要自己编译

# playwright doesnt support debian image  
FROM ubuntu:focal  
  
RUN apt-get update && apt-get install wget xz-utils -y  
  
RUN mkdir /data  
  
WORKDIR /data  
  
RUN wget https://nodejs.org/dist/v20.5.0/node-v20.5.0-linux-x64.tar.xz -O nodejs.tar.xz \  
  && mkdir /opt/nodejs \  
  && tar -xf nodejs.tar.xz --strip-components 1 -C /opt/nodejs \  
  && rm nodejs.tar.xz  
ENV PATH="$PATH:/opt/nodejs/bin"  
RUN npm install -g yarn  
  
COPY ./package.json ./yarn.lock ./playwright.config.ts ./  
  
RUN yarn  
RUN npx playwright install-deps  
  
COPY . .  
  
RUN yarn prisma generate  
RUN yarn build  
  
CMD yarn prisma migrate deploy && yarn start

构建镜像和容器运行的基本命令如下👇

# 下载代码
git clone https://github.com/linkwarden/linkwarden.git

# 或者加个代理
git clone https://ghproxy.com/github.com/linkwarden/linkwarden.git

# 进入目录  
cd linkwarden

# 构建镜像
docker build -t wbsu2003/linkwarden:v1 .

老苏就修改了 nodejs 的版本,从 v20.5.0 改为了 v20.5.1 ,其他的未做任何改动

RUN wget https://nodejs.org/dist/v20.5.1/node-v20.5.1-linux-x64.tar.xz -O nodejs.tar.xz \  
  && mkdir /opt/nodejs \  
  && tar -xf nodejs.tar.xz --strip-components 1 -C /opt/nodejs \  
  && rm nodejs.tar.xz  

编译出来的镜像有点大,就这样吧

在这里插入图片描述

官方镜像是一样的

在这里插入图片描述

命令行安装

将下面的内容保存为 docker-compose.yml 文件

version: "3.5"

services:
  postgres:
    image: postgres:14
    container_name: linkwarden-db
    restart: always
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=linkwarden
      - POSTGRES_PASSWORD=qP4oMQGewTi
      - POSTGRES_DB=linkwarden
      
  linkwarden:
    image: wbsu2003/linkwarden
    container_name: linkwarden-web
    restart: always
    platform: linux/x86_64
    ports:
      - 3035:3000
    volumes:
      - ./data:/data/data
    environment:
      - DATABASE_URL=postgresql://linkwarden:qP4oMQGewTi@postgres:5432/linkwarden
      - NEXTAUTH_URL=http://192.168.0.197:3035
      - NEXTAUTH_SECRET=23NhmBsT7TzC6996XwLX9PjPNnAciPZV
    depends_on:
      - postgres
  • postgres 环境变量
可变
POSTGRES_USER数据库用户,设为 linkwarden
POSTGRES_PASSWORD数据库密码,用 vaultwarden 生成
POSTGRES_DB数据库库名,设为 linkwarden
  • linkwarden 环境变量
可变
NEXTAUTH_URL站点地址
NEXTAUTH_SECRET随机字符串,可用vaultwarden 生成,或者用 openssl rand -base64 32 创建
DATABASE_URL数据库访问地址,格式如下👇:
postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@数据库主机地址:5432/${POSTGRES_DB}

更多的环境变量,请参考 .env.sample 文件:https://github.com/linkwarden/linkwarden/blob/main/.env.sample

然后执行下面的命令

# 新建文件夹 linkwarden 和 子目录
mkdir -p /volume1/docker/linkwarden/{data,pgdata}

# 进入 linkwarden 目录
cd /volume1/docker/linkwarden

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3035 就能看到登录界面

在这里插入图片描述

第一次需要注册

密码不能少于 8 个字符

在这里插入图片描述

登录成功后的主界面

在这里插入图片描述

Collections 是分类,可以设置为共享或者协作

在这里插入图片描述

有了分类就可以添加 Link

在这里插入图片描述

Link 属性除了 Collection ,还支持 Tags,查询起来会比较快

在这里插入图片描述

新增一个 link

在这里插入图片描述

可用固定在主页

在这里插入图片描述

可用截屏或者导出 pdf

在这里插入图片描述

效果还行

在这里插入图片描述

最后来一张官方的效果图

在这里插入图片描述

参考文献

Daniel31x13/link-warden: A self-hosted bookmark + archive manager to store your useful links.
地址:https://github.com/Daniel31x13/link-warden

Linkwarden
地址:https://linkwarden.app/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/136839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络原理-UDP/TCP详解

一. UDP协议 UDP协议端格式 由上图可以看出,一个UDP报文最大长度就是65535. • 16位长度,表示整个数据报(UDP首部UDP数据)的最大长度(注意,这里的16位UDP长度只是一个标识这个数据报长度的字段&#xff0…

设计模式之十一:代理模式

代理可以控制和管理访问。 RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。 步骤一:制作远程…

【Redis系列】Redis的核心命令(上)

哈喽,大家好,我是小浪。那么上篇博客教会了大家如何在Linux上安装Redis,那么本篇博客就要正式开始学习Redis啦,跟着俺的随笔往下看~ 1、启动Redis 那么如何启动Redis呢?最常用的是以下这个命令: redis-cl…

Linux提取RPM包文件

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录&#xff09…

Java基础知识第四讲:Java 基础 - 深入理解泛型机制

Java 基础 - 深入理解泛型机制 背景:Java泛型这个特性是从JDK 1.5才开始加入的,为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”&#xff0…

基于springboot的在线文档管理系统

基于springboot的在线文档管理系统 摘要 基于Spring Boot的在线文档管理系统是一种通过使用Spring Boot框架构建的现代化应用程序,旨在有效地组织、存储和分享文档内容。该系统通过利用Spring Boot的快速开发和简化配置的优势,提供了一个稳健的基础架构&…

clouldcompare工具使用

文章目录 1.界面1.1 布局1.3 视觉显示方向1.4 放大镜1.5 建立旋转中心2.快速入门2.1 剪裁2.2 多点云拼接 1.界面 1.1 布局 参考:https://blog.csdn.net/lovely_yoshino/article/details/129595201 1.3 视觉显示方向 1.4 放大镜 1.5 建立旋转中心 2.快速入门 2.1 …

c++求三个数的最小公倍数

答案&#xff1a; #include <iostream> using namespace std; int main() {int n1, n2, n3, max;cin >> n1 >> n2 >> n3;max (n1 > n2 > n3) ? n1 : n2;do{if (max % n1 0 && max % n2 0 && max % n3 0){cout << ma…

Python开发者的利器:掌握多种执行JS的方法

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com JavaScript&#xff08;JS&#xff09;是一种常用的脚本语言&#xff0c;通常用于网页开发&#xff0c;但有时也需要在Python中执行或调用JavaScript代码。这种需求可能是因为希望与网页进行交互&#xff0c;或者…

ASP.NETWeb开发(C#版)-day1-C#基础+实操

目录 .NET实操&#xff1a;创建项目执行 C#基础语法数据类型变量实操001_变量如何在一个解决方案 中创建另一个项目实操002结构实操003-if else实操004-多分支多行注释按钮实操&#xff1a;循环 面向对象基础如何在同一个项目下创建新的.cs文件实操-类的定义与访问实操-练习实操…

Git版本控制系统之分支与标签(版本)

目录 一、Git分支&#xff08;Branch&#xff09; 1.1 分支作用 1.2 四种分支管理策略 1.3 使用案例 1.3.1 指令 1.3.2 结合应用场景使用 二、Git标签&#xff08;Tag&#xff09; 2.1 标签作用 2.2 标签规范 2.3 使用案例 2.3.1 指令 2.3.2 使用示例 一、Git分支&…

JavaScript从入门到精通系列第三十四篇:基于JavaScript实现邮件正则

文章目录 一&#xff1a;电子邮件正则 1&#xff1a;电子邮件规则 2&#xff1a;编写代码校验 大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&…

从0到1实现一个前端监控系统(附源码)

目录 一、从0开始 二、上报数据方法 三、上报时机 四、性能数据收集上报 收集上报FP 收集上报FCP 收集上报LCP 收集上报DOMContentLoaded 收集上报onload数据 收集上报资源加载时间 收集上报接口请求时间 五、错误数据收集上报 收集上报资源加载错误 收集上报js错…

如何确定线程栈的基址?

起 很早之前&#xff0c;我遇到过几个与栈相关的问题&#xff0c;当时总结过几篇关于线程栈的文章&#xff0c;分别是 《栈大小可以怎么改&#xff1f;》、《栈局部变量优化探究&#xff0c;意外发现了 vs 的一个 bug &#xff1f;》、《栈又溢出了》、《有趣的异常》。在这几…

链表OJ题(4)

目录 10.链表的回文结构 11.随机链表的复制 &#x1f642;找中间节点一定要考虑偶数个和奇数个的问题。 &#x1f642;指针指向的前中后。 &#x1f642;链表节点的位置个数/链表的节点中的数字。&#x1f197;&#x1f197; 今天最后两道链表OJ题目。 10.链表的回文结构…

<MySQL> MySQL表数据的 CRUD 基础操作 —— 增(Create)、查(Retrieve)、改(Update)、删(Delete)

目录 一、CRUD 二、增加&#xff08;Create&#xff09; 2.1 新增插入数据 insert 2.2 操作演示 2.3 多行插入更高效 2.4 插入时间类型的数据 2.5 使用“库函数” 三、查询&#xff08;Retrieve&#xff09; 四、修改&#xff08;Update&#xff09; 4.1 修改数据 …

Linux如何修改主机名(hostname)(亲测可用)

文章目录 背景Linux如何修改主机名&#xff08;hostname&#xff09;方法方法1. 使用 hostnamectl 命令示例 2. 编辑 /etc/hostname 文件注意事项 背景 我创建虚拟机的时候没设置主机名&#xff0c;现在显示localhost&#xff0c;有点尴尬&#x1f605;&#xff1a; 需要重新设…

55基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声

基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲&#xff08;椒盐&#xff09;噪声五组噪声模型&#xff0c;程序已调通&#xff0c;可直接运行。 55高斯噪声、瑞利噪声 (xiaohongshu.com)

Java Web——前端HTML入门

目录 HTML&CSS3&JavaScript简述 1. HTML概念 2. 超文本 3. 标记语言 4. HTML基础结构 5. HTML基础词汇 6. HTML语法规则 7. VS Code 推荐使用的插件 8. 在线帮助文档 HTML&CSS3&JavaScript简述 HTML 主要用于网页主体结构的搭建&#xff0c;像一个毛坯…

基于springboot实现桥牌计分管理系统项目【项目源码】计算机毕业设计

基于springboot实现桥牌计分管理系统演示 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#…