blossom:一个支持私有部署、云端存储的双链笔记软件
见官网教程,本文版本已落后
介绍
blossom是一个支持私有部署、云端存储的双链笔记软件。
作者认为目前世面上的一些Markdown编辑器各有优缺点,但很难有一款编辑器完全符合个人的习惯,再加上软件官方对于产品价格策略的改变常常令老用户诟病(当然商业角度上无可厚非)。所以作者自己开发一款应用的想法应运而生,Blossom 就这样开发出来了。
该项目包含后端、PC客户端以及一个博客页面,博客页面仅作为公网查看文章的入口,并没有太多功能。
希望可以更新个网页版的🥰
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报错
表现如下:
日志如下:
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)