blossom:一个支持私有部署、云端存储的双链笔记软件

blossom:一个支持私有部署、云端存储的双链笔记软件

阅读量:
评论数:

blossom:一个支持私有部署、云端存储的双链笔记软件

见官网教程,本文版本已落后

介绍

blossom是一个支持私有部署、云端存储的双链笔记软件。

作者认为目前世面上的一些Markdown编辑器各有优缺点,但很难有一款编辑器完全符合个人的习惯,再加上软件官方对于产品价格策略的改变常常令老用户诟病(当然商业角度上无可厚非)。所以作者自己开发一款应用的想法应运而生,Blossom 就这样开发出来了。

该项目包含后端、PC客户端以及一个博客页面,博客页面仅作为公网查看文章的入口,并没有太多功能。

希望可以更新个网页版的🥰

官网:Blossom 文档 (wangyunf.com)

GitHub:blossom-editor/blossom: 支持私有部署的云端存储双链笔记软件 (github.com)

预览

还是很好看的😋

应该先新建文章再写的😅

部署

后端有打包好的docker镜像,自然是用docker部署啦😋

先把数据库搞定

MySQL-docker部署

好像不能用MariaDB,再搞个MySQL吧😇

端口、root密码、数据卷自行修改;

最好也映射下/etc文件夹,后续有个报错要改下my.cnf文件

docker run -d \
  --name mysql \
  -p 192.168.5.5:3306:3306 \
  -v /mnt/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=password \
  mysql

创建数据库

# 进入容器
docker exec -it mysql bash

# 连接
bash-4.4# mysql -u root -p

# 输入root密码
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.1.0 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# 创建blossom数据库
mysql> create DATABASE blossom;
Query OK, 1 row affected (0.01 sec)

# 选择数据库
mysql> use blossom;
Database changed

复制sql命令:blossom/blossom-backend/script/sql/blossom.sql at dev · blossom-editor/blossom

粘贴进去,回车。

咱这种业余玩家更建议用adminer这种图像化的😋

后台部署

感谢另一位大佬写的dockerfile,直接用现成的镜像🥰

也可以先不部署后端,下载客户端可以试用。

自行修改端口、数据库配置、域名

后续上传的图片默认存放于容器/home/bl内

docker run -d \
  --name blossom-dev \
  -p 9988:9999 \
  -v ~/blossom:/home/bl \
  jasminexzzz/blossom:dev \
  --spring.profiles.active=prod \
  --project.iaas.blos.domain="http://192.168.5.5:9988/pic/" \
  --spring.datasource.url="jdbc:mysql://192.168.5.5:3306/blossom?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&&serverTimezone=GMT%2B8" \
  --spring.datasource.username=root \
  --spring.datasource.password=password 

客户端

PC客户端下载:Releases · blossom-editor/blossom (github.com)

这部分没啥好说的,首次登录账号密码为blos/blos

可以修改用户信息、字体、字体大小、注册新用户等,

博客页面部署

该项目可以公开文章至公网,可以部署博客页面来将其作为你的博客,或者通过接口来开发你自己的博客。

先在数据库中将博客域名填上

简单做了一个docker镜像

docker run -d --name blossom-web -p 7788:80 \
-e BLOSSOM_AB="公网安备号" \
-e BLOSSOM_ICP="ICP备案号" \
-e BLOSSOM_EMAIL="电子邮箱地址" \
-e BLOSSOM_LOC="http://192.168.5.5:9988/" \
-e BLOSSOM_PRD="https://example.com/" \
-e BLOSSOM_USER_ID="1" \
-e BLOSSOM_NAME="阅读文档" \
-e BLOSSOM_URL="https://www.wangyunf.com/blossom-doc/index" \
liwangsheng/blossom-web

说明:

备案号、邮箱啥的随意,可以不填

BLOSSOM_LOC应该是localhost

BLOSSOM_PRD填后端的外网地址

BLOSSOM_USER_ID填自己账号的id,默认为1,可在设置中查看

BLOSSOM_NAME和BLOSSOM_URL可以填一个自定义链接,不知道填啥,我把文档放上去了😅

文章公开:

写完后保存,右键文章点击编辑文档

点击公开访问

博客页面

文章页面

和风天气api(可选)

之前玩过这个玩意,当时写了一个python脚本发天气邮箱,就是用的和风天气api,见使用Python脚本定时发送天气通知 - MJ的博客

key好像要去数据库里填,不会sql,我用adminer编辑的😋

将key编辑至param_value字段即可

城市代码点击前往搜索,填至设置-修改个人信息-天气预报城市即可

MySQL报错

表现如下:

blossom-1.webp

日志如下:

22:49:12.130 ERROR[999-exec-3] [DA.23] .c.b.e.AbstractExceptionAdvice 64 : http://192.168.5.5:9988/todo/list | BadSqlGrammarException(
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
### The error may exist in file [/application/BOOT-INF/classes/mapper/TodoMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select todo_id,todo_name,todo_type,todo_status,                count(*) as taskCount           from blossom_todo          where user_id = ?       group by todo_id       order by id desc
### Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by)
22:49:12.139 ERROR[999-exec-3] [DA.23] .c.b.e.AbstractExceptionAdvice 66 : 
异常类型: org.springframework.jdbc.BadSqlGrammarException
异常内容: ### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ### The error may exist in file [/application/BOOT-INF/classes/mapper/TodoMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: select todo_id,todo_name,todo_type,todo_status,                count(*) as taskCount           from blossom_todo          where user_id = ?       group by todo_id       order by id desc ### Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blossom.blossom_todo.todo_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
堆栈信息: 
 > com.blossom.backend.server.todo.TodoService.listTodo(TodoService.java:40)
 > com.blossom.backend.server.todo.TodoService$$FastClassBySpringCGLIB$$d9eead80.invoke(<generated>:-1)
 > com.blossom.backend.server.todo.TodoService$$EnhancerBySpringCGLIB$$44bc0a2f.listTodo(<generated>:-1)
 > com.blossom.backend.server.todo.TodoController.list(TodoController.java:28)
 > com.blossom.backend.base.auth.caffeine.CaffeineTokenAuthFilterProxy.doFilterInternal(CaffeineTokenAuthFilterProxy.java:104)
 > com.blossom.backend.base.auth.filters.AuthFilterProxy.doFilter(AuthFilterProxy.java:53)
 > com.blossom.backend.base.auth.filters.RequestWrapperFilter.doFilterInternal(RequestWrapperFilter.java:35)
 > com.blossom.expand.tracker.core.adapter.spring.TrackerFilter.doFilter(TrackerFilter.java:52)

看不懂😇通过半小时ChatGPT及谷歌勉强解决了这个问题

ChatGPT的回答:

这个错误表明在你的SQL查询中,SELECT列表中的第二个表达式(Expression #2)不在GROUP BY子句中,并且包含了非聚合的列 'blossom.blossom_todo.todo_name'。这与当前的SQL模式(sql_mode)设置为only_full_group_by不兼容。

建议我:

1.将列添加到GROUP BY子句中: 确保在SELECT列表中的每个非聚合列都包含在GROUP BY子句中。在你的情况下,将 'blossom.blossom_todo.todo_name' 列添加到GROUP BY子句中。

2.使用聚合函数: 将 'blossom.blossom_todo.todo_name' 列包装在一个聚合函数中,例如MAX()、MIN()或GROUP_CONCAT(),以确保它是函数依赖的。

3.修改SQL模式: 如果不想修改查询,你可以考虑修改MySQL的sql_mode,将其更改为不包含only_full_group_by。这样可以在MySQL配置中进行修改,但要注意这可能导致其他查询的行为发生变化。

前两种方法看得我头大😅使用chatgpt给我的命令SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));没有什么效果

谷歌了下第三种方法:

# 修改/etc/my.cnf文件最后一行加入:
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

MySQL容器里连vi都没有,建容器的时候又没映射/etc文件夹,我是用docker cp先把文件拉出来修改好再传上去的😇

改好之后确实没有再报错了,或者使用低版本的MySQL。

参考文档

[1]官方文档:Blossom 文档 (wangyunf.com)

[2]作者的视频介绍:我开源了一个私有部署Markdown双链笔记软件!让你全权掌握数据摆脱被软件绑架!

[3]MySQL报错解决参考:mysql5.6升级到5.7后 linux下修改mysql的sql_mode模式 - 高效码农 (xugj520.cn)

[4]感谢ChatGPT🥰ChatGPT (openai.com)

Licensed under CC BY-NC-SA 4.0
Built with Halo
主题 Stack Jimmy 设计 • 由Jiewen移植
📑共水了 93篇文章.
载入天数... 载入时分秒...
RSS Icon RSS订阅