开源的笔记和书签应用Benotes

只隔了一天,上海又发布了新的优化措施,只要不去第一条有特殊防疫要求的场所,核酸可以不做了,但是场所码还是要扫的

最近谁要请我吃饭,最好提前打个招呼,不然被拦在饭店外面就尴尬了 😂


什么是 Benotes ?

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

软件特点:

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

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

准备工作

建数据库

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

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

.env 文件

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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,上面数据库设置部分用下面的替换就可以了

1
2
3
4
5
6
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_HOST smtp协议邮件主机地址
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 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 新建文件夹 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 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 新建文件夹 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