开源的笔记和书签应用Benotes

news2024/9/20 7:49:29

在这里插入图片描述

什么是 Benotes ?

Benotes 一个开源的自托管笔记和书签网络应用程序。使用 Laravel 和轻量级 Lumen 框架构建,可以作为 PWA 安装并托管在几乎任何地方。同时支持 Markdown 和富文本编辑器。

软件特点:

  • URL 会自动保存图片、标题和描述
  • 同时支持 markdown 和富文本编辑器
  • 可以作为 PWA 安装在您的移动设备(和台式机)上
  • 通过此应用程序共享内容(如果作为 PWA 安装并受您的浏览器支持)
  • 可以通过公共可用 URL 共享集合
  • 链接可以立即粘贴为新帖子
  • 由于使用了轻量级的 Lumen 框架和良好支持的 PHP 语言,几乎可以在任何地方托管
  • 使用和不使用持久存储层(支持文件系统和 S3
  • 也可以通过 DockerHeroku 托管
  • 通过每日备份保护您的数据

在这里插入图片描述

【注意】:该项目目前处于测试阶段。您可能会遇到错误或错误。

准备工作

建数据库

数据库直接用的群晖的 MariaDB 10,在 phpMyAdmin 中创建了名为 benotes 的数据库

在这里插入图片描述

为了便于说明,我们假设数据库密码为 123456

.env 文件

环境变量文件 .env 的设置,需要根据上一步数据库的设定做调整

如果用了中文,保存时建议采用 utf-8 格式

APP_PORT=8347

USE_COMPOSER=false
RUN_MIGRATIONS=false
INSTALL_NODE=false

APP_NAME=Benotes
APP_ENV=production
APP_DEBUG=false
APP_URL=http://192.168.0.197:${APP_PORT}
APP_TIMEZONE=Asia/Shanghai

APP_KEY=7aGLzKFJTCkTkbLuJ3BoU3kNjkv6t67GWrC2izhrf9yEPTREvgeHJ2cMSptmuGnU
JWT_SECRET=hNwrp6N8NY2xaQayb5ikAFSPwD7iomwaZvVDUabT3JjTh35ejMw3pfTBUqsr8sJR
USE_FILESYSTEM=true

DB_CONNECTION=mysql
DB_HOST=192.168.0.197
DB_PORT=3307
DB_DATABASE=benotes
DB_USERNAME=benotes
DB_PASSWORD=123456

CACHE_DRIVER=file
QUEUE_CONNECTION=sync

MAIL_DRIVER=smtp
MAIL_HOST=smtp.88.com
MAIL_PORT=465
MAIL_USERNAME=wbsu2003@88.com
MAIL_PASSWORD=<第三方邮件客户端密码>
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=wbsu2003@88.com
MAIL_FROM_NAME="Benotes"

如果你想使用 SQLite,上面数据库设置部分用下面的替换就可以了

DB_CONNECTION=sqlite
DB_HOST=
DB_PORT=
DB_DATABASE=storage/database.sqlite
DB_USERNAME=
DB_PASSWORD=

主要的几个变量说明见下表👇

可变
APP_URL项目地址
APP_KEY应用程序标识,用验证接入的合法性,老苏一般用 Bitwarden 生成,你也可以用 openssl 来生成
DB_CONNECTION数据库类型
DB_HOST数据库主机名或者 IP
DB_PORT数据库端口
DB_DATABASE数据库库名
DB_USERNAME数据库用户
DB_PASSWORD数据库密码,老苏只是演示用的
MAIL_DRIVER发送邮件的协议,默认 smtp
MAIL_HOSTsmtp协议邮件主机地址
MAIL_PORT邮件端口,SSL协议端口号默认为 465
MAIL_USERNAME邮件账号
MAIL_PASSWORD邮件第三方客户端密码
MAIL_ENCRYPTION发送加密,可选 SSLTLS 和无
MAIL_FROM_ADDRESS发送的电子邮件地址
MAIL_FROM_NAME发送的姓名

还支持 S3 对象存储:https://github.com/fr0tt/benotes/blob/master/installation.md#optional-s3-as-filesystem

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 benotes 和 子目录
# storage 目录用来存放 SQLite 数据库,对外暴露需要映射 /var/www/storage 目录,用 MariaDB 可以不用建
mkdir -p /volume2/docker/benotes/{logs,storage}

# 进入 benotes 目录
cd /volume2/docker/benotes

# 将 .env 文件放入当前目录

# 运行容器
docker run -d \
   --restart unless-stopped \
   --name benotes \
   --env-file ./.env \
   -p 8347:80 \
   -v $(pwd)/logs:/var/lib/nginx/logs/\
   -v $(pwd)/.env:/var/www/.env \
   fr0tt/benotes

# 进入容器
docker exec -it benotes sh

# 数据库迁移
php artisan migrate

# 创建用户
php artisan install --only-user

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: "3.6"

services:
    benotes:
        image: fr0tt/benotes
        container_name: benotes
        restart: unless-stopped
        environment:
            DB_CONNECTION: ${DB_CONNECTION}
            RUN_MIGRATIONS: ${RUN_MIGRATIONS}
        ports:
            - ${APP_PORT}:80
        volumes:
            - ./logs/:/var/lib/nginx/logs/
            - ./.env:/var/www/.env

然后执行下面的命令

# 新建文件夹 benotes 和 子目录
# storage 目录用来存放 SQLite 数据库,对外暴露需要映射 /var/www/storage 目录,用 MariaDB 可以不用建
mkdir -p /volume2/docker/benotes/{logs,storage}

# 进入 benotes 目录
cd /volume2/docker/benotes

# 将 docker-compose.yml 和 .env 文件放入当前目录

# 一键启动
docker-compose up -d

# 访问应用程序服务
docker-compose exec --user application benotes sh

# 做一些必要的工作,如数据库迁移和管理员帐户创建
sh docker/install.sh

在这里插入图片描述

输入 yes 开始数据库迁移

在这里插入图片描述

然后设置管理员,用户名回车就可以,设置邮件和密码即可

在这里插入图片描述

运行

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

在这里插入图片描述

登录成功之后

在这里插入图片描述

收藏网站

选中 Uncategorized,点 Create 创建一个 Post,内容中只要输入一个 URL,例如老苏的博客地址: https://laosu.ml/

在这里插入图片描述

Save 之后,主界面就有了,可以看到已经抓到了网站的 title 等信息

在这里插入图片描述

收藏文章

在这里插入图片描述

虽然获取到了文章的信息,但是图片没出来,主要是因为 jsdelivr 在国内没有备案

在这里插入图片描述

cdn.jsdelivr.net 加入科学上网的白名单,就 OK

在这里插入图片描述

从数据库看,图片只是链接,并没有抓下来

在这里插入图片描述

新建类型

新建一个 Collection

在这里插入图片描述

保存之后,就出现在左侧菜单中了

在这里插入图片描述

刚开始我们建的都是放在 Uncategorized

在这里插入图片描述

选择需要更改的书签,点 Transfer 即可更改

在这里插入图片描述

点左侧的 群晖,已经更新成功

在这里插入图片描述

参考文档

fr0tt/benotes: An open source self hosted notes and bookmarks taking web app.
地址:https://github.com/fr0tt/benotes

Benotes
地址:https://benotes.org/

benotes/installation.md at master · fr0tt/benotes
地址:https://github.com/fr0tt/benotes/blob/master/installation.md

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力系统潮流计算与PowerWorld仿真(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; ​ &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 目录 1 概述 2 主要任务 3 主要内…

【雷达】基于Matlab模拟海洋监视雷达检测仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

攻防世界 真是阳间题

作者本题所使用工具 打开附件 艾尔登法环正式发售在即&#xff0c;迫不及待的mjj身上好像有蚂蚁在爬&#xff0c;写下了一句谜语&#xff1a; 32073579756415871361224665144251529616546134107283371422717502731249951057470539916408170663523436573989472489382550863584…

Nginx的安装与负载均衡、动静分离的初步使用(Windows)

了解Nginx Nginx的作用&#xff1a; 反向代理 正反向代理是什么&#xff1f; 正向代理&#xff1a;代客户端访问服务端 反向代理&#xff1a;代服务端接收客户端的访问 正反向代理示例&#xff1a; 正向代理&#xff1a;客户端A1、客户端A2...----->正向代理服务器------&…

解决vite不是内部或外部命令,也不是可运行的程序 或批处理文件。

前言 今天是要vite创建vue3.0项目的时候&#xff0c;到了最后一步npm run dev的时候出现了以下错误&#xff1a; ‘vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 如下图所示 思考问题 想了半天&#xff0c;调试了很久&#xff0c;本来以为是环境…

Eureka

Eureka介绍 注册中心 &#xff1a; 每个服务都有自己的ip和端口&#xff0c;&#xff0c;一个服务调用另一个服务的时候都需要知道对方的ip&#xff0c;&#xff0c;&#xff0c; Eureka类似 dubbo中的zookeeper Eureka 是 netflix公司提供的一款服务注册中心&#xff0c;&a…

刷爆力扣之非递减序列

刷爆力扣之非递减序列 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#xff0c;…

电磁场几何和衍射理论的统一

在物理光学中&#xff0c;我们使用麦克斯韦方程组处理电磁场。为了快速求解该方程组&#xff0c;我们将不同的麦克斯韦算子结合在一个非序列场追迹概念中。进一步的&#xff0c;快速物理光学概念的支柱是&#xff1a;&#xff08;1&#xff09;尽可能在k域求解麦克斯韦方程组。…

深入理解Linux网络技术内幕(十一)——帧的传输

文章目录前言传输的开启和关闭设备调度以准备传输队列规则接口qdisc_restart函数dev_queue_xmit函数有队列设备无队列设备处理NET_TX_SOFTIRQ: net_tx_action看门狗定时器前言 “传输”这一术语用于离开系统的帧&#xff0c;也许是因为被系统传送出去&#xff0c;或者是因为被…

火山引擎 DataTester:如何用 A/B 测试做产品增长?

技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着如今越来越高的获客成本&#xff0c;用户拉新变得不再容易&#xff1b;而且由于获客成本的增高&#xff0c;让用户留存也变得更加重要。同时&#xff0c;一个产品的…

【C++】list的模拟实现+迭代器的设计思维

目录1.认识STL中的list2.迭代器的设计思维2.1 迭代器的定义2.2 迭代器的底层结构3.list的模拟实现3.1 list的节点3.2 list的迭代器3.3 list类4.list和vector的比较1.认识STL中的list &#x1f4a8;相比于vector简单的连续线性结构&#xff0c;list就稍显复杂了。 &#x1f4a8;…

用细节问题撬动自我进化:首届雪浪算力开发者大赛来了!

12月2日&#xff0c;首届【雪浪算力开发者大赛】在无锡雪浪小镇正式揭幕&#xff0c;并由此开启了新一轮智能制造新生力量的博弈。本次大赛不仅将工业界开发者与创新企业置于聚光灯下&#xff0c;也是雪浪算力中心向社会公众展示其强大计算能力与支撑能力的震撼大秀。 在疫情威…

【关于Spring MVC框架中的@RequestBody】

关于Spring MVC框架中的RequestBody 在Spring MVC框架中&#xff0c;可以在POJO类型的请求参数前添加RequestBody。 当服务器端接收请求参数时&#xff0c;使用了RequestBody注解&#xff0c;客户端提交的请求参数必须是对象格式的&#xff01; 如果客户端提交的请求参数不是…

Vue中使用vue-video-player插件播放本地mp4视频文件

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客_前后端分离项目本地运行 在上面搭建项目的基础上&#xff0c;先实现了播放rtmp视频流 Vue中使用vue-video-player和vi…

Unity Animancer插件(一)基本使用

Animancer是什么&#xff1f;资源商店主页 一、快速播放 我们来通过Animancer实现一个最基本的动画播放效果。 首先创建一个脚本PlayAnimationOnEnable&#xff0c;编写如下代码 public AnimancerComponent animancer; public AnimationClip clip;private void OnEnable() …

pinia 持久化存储

pinia刷新数据持久化解决方案 无论是使用vuex 还是pinia都会面临一个问题&#xff1a;页面刷新&#xff0c;状态数据丢失的问题&#xff1b; 为了解决数据状态持久化问题&#xff0c;可以考虑使用插件 pinia-plugin-persistedstate 目录 安装pinia 并引入使用 npm install pin…

CCES软件如何来对ADI的SHARC DSP进行Flash的编程和烧写

如何做 Flash 烧写并实现脱机运行&#xff0c;其实我在之前的文章里有讲过&#xff0c;就可以用 Visual DSP来做&#xff0c;鼠标 点几下&#xff0c;非常简单。但是很多客户用的是 21569、21565这一类的SHARC DSP&#xff0c;不能再用 VDSP 来做烧写了&#xff0c;所以我想了 …

留学Essay写作怎么积累更多词汇量?

大部分留学生们都会感觉Essay挺难写作的&#xff0c;然而这其实是自身平时积累的不够多。当然&#xff0c;还有其他的正确方法&#xff01;高分的Essay都是平时练习出来的&#xff0c;所以我们需要在平时多注意收集一些相关的写作知识。下面是一些常用的Essay写作词汇&#xff…

5 年经验年薪百万,一位阿里 P8 分享自己的成长干货

今天这篇文章&#xff0c;我前后读了 3 遍&#xff0c;主人公是阿里最年轻的 P8 之一&#xff0c;工作五年连升三级&#xff0c;他在一次采访中分享了自己的成长经历和职场心得&#xff0c;非常接地气&#xff0c;我们整理了 一下&#xff0c;真诚地推荐给每一个渴望成长和进步…

基于主成分分析的支持向量机入侵检测系统

基于主成分分析的支持向量机入侵检测系统学习目标&#xff1a;学习内容&#xff1a;A. 数据集分析B. 主成分分析 (PCA)--降维C. 支持向量机 (SVM)核函数数据集预处理--转换数据集预处理 --特征缩放算法过程核函数对比总结不足参考论文申明&#xff1a; 未经许可&#xff0c;禁止…