"简介 [链接] 是一款小而美的开源博客系统,专为程序员设计。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 回帖    
请输入回帖内容...
  • alanfans      

    1l

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

    2L

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

    3l

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

    截图都没有一个,还指南呀?

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

    来来来,指点一下我的博客。超屌的

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

    请问下,这个支持从 github 上拉源码自己打包编译 war 包发布吗?另外,拉了源码之后,怎么本地启动 debug 模式呢?有这方面的文档吗?找了一段时间了,没看到相关的


    更新,找到了,https://hacpai.com/settings ,虽然还有问题,移步对应的帖子下。

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

    Solo 开发指南 开发在这里

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

    Tomcat(版本要求至少 9) 😂

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

    怎么实现全站 https ? 😶

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

    nginx 配置一下,七牛配置一下应该就行了

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

    我想把博客设置在一个路径下,比如 http://域名/blog

    我在 starter 里改成 root.setContextPath("/blog") 了, 然后访问域名时通过 nginx 直接转发到 /blog 下 但静态资源不能访问,然后对 nginx 里面对一些静态资源重新做了配置,还是有些冲突,有什么简单的解决办法吗? nginx 如下:

     location ~ .*\.(png|html|htm|ico|jpg|jpeg|bmp|gif|js|css)$ {
       proxy_pass  http://127.0.0.1:8088$request_uri;
     }
    
     location / {
       proxy_pass  http://127.0.0.1:8088/blog$request_uri;
       proxy_set_header  Host $host;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
       client_max_body_size 1000m;
     } 
    
    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    你用 /solo 试试。另外参考 Latke 配置剖析

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

    静态页面 nginx 转发没问题,但页面的链接有问题,看了下 ftl 文件,是 serverPath 的问题.
    独立容器启动的
    我是在 starter 类里面改 ContextPath 的:root.setContextPath(“/blog”); 然后 latke 配置文件没有设置 contextPath,设置的 servePath 为空,不知道怎么,没有起到作用。

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

    不用改代码的,通过配置 latke.props 或者 starter 带参都可以设置 contextPath

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

    不知道是不是 bug,启动代码里改 root.setContextPath(“/”) 没有问题,
    local.properties 里改 contextPath 总是出现静态资源无法访问问题 (不用 nginx),我也试了设置 staticPath 或者不设置各种情况,都出现问题。
    对了,我是直接 eclipse 启动 Starter 的 main 函数启动的。

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

    应该不是 bug,你再折腾看看

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

    话说楼主,能导出 sql 和 json,有导入功能吗?如果现在是 H2 数据库,想换成 mysql,sql 的应该不兼容吧?

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

    两者的 SQL 不兼容,估计要自己处理一下。

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

    [INFO]-[2017-11-24 08:48:41]-[org.b3log.solo.util.Markdowns:127]: [marked] is not available caused by [Connection refused: connect], uses built-in [flexmark] for markdown processing. Reads FAQ section in user guide (https://hacpai.com/article/1492881378588) for more details.

    这算不算 bug 😆

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

    不是 bug,你看下链接地址

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

    哦哦,貌似是看懂了😁

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

    订阅有问题呀 /blog-articles-rss.do

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

    有啥问题?

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

    你访问一下,这里输出一些代码 http://120.55.54.230/blog-articles-rss.do

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

    v2.5.0 将改进,具体请看 https://github.com/b3log/solo/issues/12361

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

    哦,谢谢,你的博客很棒,打算长期用😄

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

    谢谢支持,有问题随时交流。

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

    请问小编,数据库可以切换到自己 mysql 吗?有相应的 sql 文件吗?😂 求解

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

    可以使用 MySQL,你看下 local.props 就明白了。

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

    一样的情况求怎么解决

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

    INFO ]-[2018-01-14 00:20:18]-[org.b3log.solo.util.Markdowns:127]: [marked] is not available caused by [拒绝连接 (Connection refused)], uses built-in [flexmark] for markdown processing. Reads FAQ section in user guide (https://hacpai.com/article/1492881378588) for more details.
    求如何解决

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

    这个是正常的,细节可以看下日志里面的链接

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

    node js/marked/http.js /root/luos/app/bk/pkg/apache-tomcat-9.0.2/webapps/solo-2.5.0/js/marked/http.js:35 return <li class="task-item">${text}</li>; ^ SyntaxError: Unexpected token ILLEGAL at Module._compile (module.js:439:25) at Object.Module._extensions…js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3

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

    我想把数据库换成自己的 mysql,于是在后台把 sql 导出,然后在我自己的 mysql 里运行 报错运行不了 这是为什么?

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

    H2 导出的 SQL 没法直接导入 MySQL ,不兼容的。可能需要自己手动调整一下,多尝试折腾下应该可以的。

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

    谢谢大佬 那我再试试看

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

    还是 mysql 的问题 大佬有好的解决方案吗

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

    实在不行的话可以用 Markdown 导出

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

    嗯啊 。谢谢 我试试

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

    请问你现在解决了这个问题吗

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

    😰

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

    Solo 这个项目为什么配置好本地的 mysql 其实并没有用来存储相关的数据信息,还是存储在云端呢

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

    云端??

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

    这个我能确定已经切换成功了,因为我修改为不正确的登录口令是无法正常登录的。

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

    重启了么,如果切换到新库的话需要重新初始化的。

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

    嗯,好的!可能是因为最近内部服务器搬迁的原因,刷新有些延迟,现在正常了。谢谢!!!👍 👍 👍

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

    nginx 按照上述方法,搭建失败,配置会出错 我的是部署在 tomcat 上,端口是 8080,解决方法

    CRPTM580F7RFM2XFNDpng 修改配置后保存退出,重启 nginx

    V933XQYR3184MCRIDNpng

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

    mysql 应该是安装在云主机上,你的项目可以部署到云主机,也可以放在本地

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

    请问如何切换为 markdown 作为默认的编辑器呀?

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

    默认就是 Markdown 啊….

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