"简介 [链接] 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的[链接],文章自动推送到社区后可以让很多人看到,产生丰富的交流互动。 安装 本地试用 [链接]最新的 Solo 包解压,进入解压目录执行: Windows: java -cp 'WEB-INF/lib/*;WEB-INF/classes .."

Solo 用户指南

简介

Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,文章自动推送到社区后可以让很多人看到,产生丰富的交流互动。

安装

本地试用

下载最新的 Solo 包解压,进入解压目录执行:

如果你有 Java 开发环境,可参考这里通过源码构建运行。

请注意:我们不建议通过 war 发布包或者源码构建部署,因为这样的部署方式在将来有新版本发布时升级会比较麻烦。 这两种方式请仅用于本地试用,线上生产环境建议通过 Docker 部署。

Docker 部署

获取最新镜像:

docker pull b3log/solo

启动参数说明:

完整启动参数的说明可以使用 -h 来查看。

Docker 升级

  1. 拉取最新镜像
  2. 重启容器

可参考这里编写一个重启脚本,并通过 crontab 每日凌晨运行来实现自动更新。

NGINX 反代

upstream backend {
    server localhost:8080; # Solo 监听端口
}

server {
    listen       80;
    server_name  88250.b3log.org; # 博客域名

    access_log off;

    location / {
        proxy_pass http://backend$request_uri;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;
        client_max_body_size  10m;
    }
}

初始化后

初始化成功后请务必查看自动发布的第一篇文章,里面有一些必要的操作,请务必完成。然后请到管理后台 -> 工具 -> 偏好设定中进行一下博客的细节配置。

信息配置

签名档

最多可以配置 3 个签名档,发布文章的时候选择一个使用,可以使用 HTML 和脚本进行配置。

参数设置

下面是一些比较有特色或重要的参数:

导入 Markdown

请参考 Solo 支持 Hexo/Jekyll 数据导入

备份

安全第一,血泪的教训 😢

其他一些特性

多用户

可以几个用户同时使用一个博客发布文章,主要用在团队博客这个场景。权限方面做了简单隔离,非管理员用户可以看到其他用户的博文 / 评论列表,但是不能进行操作。

RSS/Atom

提供两种订阅供稿:Atom 1.0、RSS 2.0:

浏览器直接打开可能会出现编码,可使用阅读器查看。

Sitemap

自动生成全站文章的 sitemap.xml,有利于 SEO。

前台皮肤切换

通过 URL 带参(比如 http://88250.b3log.org/?skin=Finding)来确定渲染使用的皮肤。

使用场景举例:

  1. 只有在首页(/)会取参数skin=xxx
  2. 如果带有就记录到 Cookie 里面,如果带有skin=default或皮肤不存在则清空 Cookie
  3. 如果要切换成后台默认的皮肤,在首页带参skin=default

站外相关文章

“站外相关文章”指的是其他人使用 Solo 发布的文章,该文章含有与你的文章相同的标签。该功能主要是为了加强各个 Solo 博客之间的互动性,让博客访问者可以更有效地访问到相关的内容。

这是 B3log 构思 的一部分实现,请大家积极参与进来 💓

FAQ

服务器内存太小?

可以考虑使用内嵌的 H2 数据库代替 MySQL。如果一台服务器上要部署多个 Solo,可以考虑通过 war 包方式将它们部署到同一个 Tomcat/Jetty 中运行。

如何引入自定义静态资源,比如 .mp3?

请通过 NGINX 反代静态资源实现。

如何获得更好的 Markdown 渲染效果?

Solo 默认是使用内建的 flexmark 进行 md 渲染,可能对有的场景下的渲染效果不是很好。如果你想要获得更好的 md 渲染效果请参考这里

如何指定移动端皮肤

可在 solo.props 中配置 mobile.skin 来指定移动端访问时的皮肤。请配置成目录名,区分大小写。

结语

如果你在使用 Solo 过程中碰到问题或者有需求要提,欢迎跟帖,我们会在第一时间回复。另外,如果你想对 Solo 进行定制开发,请参考 Solo 从设计到实现

感谢    关注    收藏    赞同    反对    举报    分享
228 回帖    
请输入回帖内容...
  • 88250            

    看日志

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • mogiihu            

    今天发现默认的渲染主题是 next,把 next 删了所以显示 404,D 大,请问这个可以更改吗。前端小白服务器这边有好多不懂的。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    看下文档,路面有换肤相关说明。

    感谢    赞同    反对    举报    分享       评论    回复
  • xzy0725      

    D 神,如何生成 mysql 脚本? 😄 ( 修正)

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    虽然错别字有点多,但并不影响阅读。 建表自动的,没有脚本。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • xzy0725            

    设置数据库为 Mysql,启动就会自动生成表结构吗? 找到方法了JdbcRepositories.initAllTables

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    手动建库,会自动建表。

    感谢    赞同    反对    举报    分享       评论    回复
  • sadsadasdas      

    如何让首位缩进啊,总是顶头的

    2 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    Markdown 好像没这个功能..

    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    对了,可以试试插入 HTML 代码  (半角)或者  (全角)。

    HTML空格符号 nbsp; ensp; emsp; 介绍以及实现中文对齐的方法 - 风雨后见彩虹 - 博客园

    感谢    赞同    反对    举报    分享       评论    回复
  • mojie126   1 感谢      

    不知道编辑器是不是可以像 sym 那样,一边儿编辑一边儿预览的那种...

    感谢    赞同    反对    举报    分享       评论    回复
  • someone API      

    D 神,你好,我想请问一下 solo 对于常用配置是如何处理的,从数据库读出来所有的配置信息后,配置信息是怎么处理,放 session 还是用 properties 文件的方式存放,我是将配置文件处理为了一个 Javabean,准备放 session,但是感觉不方便!如果加入缓存机制如 redis 的话,感觉上也只是不用重复读取数据,读取出来的数据也不知道怎么放!麻烦你了,谢谢

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    propers 还有数据库都可能有配置,不一定非要统一形式。propers JDK 自带内存缓存,数据库读取的自己管理缓存。另外,不要过早考虑性能优化。

    感谢    赞同    反对    举报    分享       评论    回复
  • wangwei10061 API      

    在 ImportService 类里边,有这么两句: final ServletContext servletContext = SoloServletListener.getServletContext(); final String markdownsPath = servletContext.getRealPath("markdowns"); 在本地运行时,debug 可以看到,markdownsPath 的路径为 src/main/webapps 下,所以应该把 markdowns 文件夹放在 src/main/webapps 下边

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    发现七牛的图片存储域名是临时的,30 天过期. Solo 能考虑之下下 aliyun OSS 么?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    麻烦到项目上提个 issue。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    提了。

    感谢    赞同    反对    举报    分享       评论    回复
  • limin      

    imagepng 发布文章报错 Table 'solo.b3_solo_article' doesn't exist,请问初始化完成应该有多少张表?我初始化完成有 12 张表

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    数据库删了重新初始化,注意观察日志。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • limin   1 感谢            

    好了,我 mysql 的 max_allowed_packet 有问题

    感谢    赞同    反对    举报    分享       评论    回复
  • luckygrass      

    sitemap.xml 如何生成?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250   1 感谢            

    直接访问 /sitemap.xml

    感谢    赞同    反对    举报    分享       评论    回复
  • luckygrass      

    sitemap.xml 中有一些连接是过期失效的,开源系统有写推送功能嘛?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    这个 XML 是根据你当前的数据库即时生成的。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • luckygrass            

    ,开源系统有写推送功能嘛?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    什么推送功能?

    感谢    赞同    反对    举报    分享       评论    回复
  • ick104      

    为什么我 maven 打包源码,src/test/skins 目录下的资源没有打进去?执行测试用例的时候报错了,说是没有找到 author-articles.ftl 文件,这个文件是在 skins 目录下的。

    imagepng

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    test 下面的资源本来就不会被打包嘛。

    感谢    赞同    反对    举报    分享       评论    回复
  • fennylv      

    Markdown 渲染效果 安装 marked:npm install marked --save 这个对目录有要求吗? 我在 /data 目录下 使用 npm install marked --g 全局安装了 marked [root@iZm5e0njylntwlby4wglimZ ROOT]# npm marked -v 6.4.1 这里显示的版本是这个 在 solo 的目录下:[root@iZm5e0njylntwlby4wglimZ ROOT]# npm ls /usr/tomcat/apache-tomcat-9.0.11/webapps/ROOT └── marked@0.5.0 然后我在 sole 的目录下执行 node js/marked/http.js 提示服务启动,重启了服务器之后 发表 markdown 的表格语法还是不能正常使用

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    重启服务之后看下 solo 的日志输出,看下是否是在用 marked 引擎。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • fennylv            

    启动日志里面没有看到任何 marked 相关的关键字,应该是没在用 marked 引擎

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    使用内建的 flexmark 也会打日志的,你留意看下。

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    imagepng 这段代码的事务的回滚的时机似乎是有问题的,应该在 finally{里面 判断是否需要回滚,确保一定会执行到。}

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    目前这么写没出现过问题,木已成舟懒得改了。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    嗯,后面写新代码的时候,注意下,因为异常类型不是Exception而是 Error 或者是非Exception子类的都会导致事务没有回滚。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    这个倒是考虑过,Error 情况打算放弃治疗,非 Exception 子类不会出现。

    感谢    赞同    反对    举报    分享       评论    回复
  • fennylv      

    请教楼主,文章右侧的目录展示是可以自己设置吗 还是需要二次开发?

    imagepng

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    1. 插件管理里启用 ToC 插件
    2. 目录多余 3 个才会显示

    感谢    赞同    反对    举报    分享       评论    回复
  • mxf      

    偏好设定中的博客地址怎么不能修改

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    latke.props 文件中配置的。

    感谢    赞同    反对    举报    分享       评论    回复
  • Parasomnia   1 感谢      

    应将启动命令从nohup java -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter >/dev/null 2>&1 &更改为nohup java -Djava.awt.headless=true -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter >/dev/null 2>&1 &以解决 linux 下 awt 的 NoClassDefFoundError 问题

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    麻烦确认一下验证码是否还能用。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • Parasomnia   1 感谢            

    亲身实践证明更改启动命令后可用

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    我都是直接从 git master 分支开始跑: mvn jetty:run 实际效果还不错: http://sigandou.com/

    感谢    赞同    反对    举报    分享       评论    回复
  • need      

    你好,请问我想修改页面的有关配置该在哪里找。。。找了半天没有找到配置文件请指教

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    什么配置?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • need            

    就是我想自定义一些页面效果,比如图标 头像等等,之前我用的 hexo 是可以 diy 到这里不知道该改哪个了

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250   1 感谢            

    哦,这样的话不用改模板,你在公告栏里面写代码就行了。

    感谢    赞同    反对    举报    分享       评论    回复
  • Jackson      

    imagepng 我的这个证书安装后 tomcat 报这错误?😭

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    证书最好配置在 NGINX 上,不要在容器上配置。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
请输入回帖内容...