"简介 [链接] 是一款小而美的开源博客系统,专为程序员设计。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 从设计到实现

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    605 引用 • 4673 回帖 • 721 关注
  • 安装

    你若安好,便是晴天。

    49 引用 • 746 回帖
  • 文档
    51 引用 • 905 回帖 • 1 关注
感谢    关注    收藏    赞同    反对    举报    分享
233 回帖    
请输入回帖内容...
  • Vanessa            

    in commonmark, \符号 会被转译,因此需要需再多一个斜杠即可。

    $$
    P(w_i|w_{i-1}) = \begin{cases} 
    f(w_i|w_{i-1}) \\,\\,\\,\qquad \\, \\#(w_{i-1}, w_i) \ge T \\\\
    f_{gt}(w_i|w{i-1}) \quad \, 0 \lt \\#(w_{i-1, w_i}) \lt T \\\\
    Q(w_{i-1}) \cdot f(w_i) \\,\\,\\, 其它
    \end{cases}
    $$
    

    $$ P(w_i|w_{i-1}) = \begin{cases} f(w_i|w_{i-1}) \,\,\,\qquad \, \#(w_{i-1}, w_i)\ge T \\ f_{gt}(w_i|w{i-1}) \quad , 0 \lt \#(w_{i-1, w_i}) \lt T \\ Q(w_{i-1}) \cdot f(w_i) \,\,\, 其它 \end{cases} $$

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

    除了这个,还有其他的解决办法吗?如果这样操作的话,我要将之前的公式都这样改一遍😭

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

    写个程序批量替换下?

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

    doge

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

    0 点的时候,博客突然挂了。。。

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

    有报错日志么?

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

    请问使用 Docker 安装的话,然后更换皮肤与导入 hexo 的文档,路径是哪个?

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

    容器 Solo 的路径是 /opt/solo,这个目录下是按原有结构的,可以把卷挂载到对应目录下。

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

    QQ201904021115492x.png并没有发现。。。

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

    我指的是容器进程里的目录,可以 attach 上去看看。

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

    额,没明白怎么操作,请问是这样操作么?没反应。。卡主了。。。QQ201904021128462x.png

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

    1. 容器启动的时候需要带参数
    2. 启动后再 attach

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

    1. 容器启动的时候需要带参数 docker start 13b5700abda7 参数是哪些参数?
    2. 启动后在 attach 是这个操作么:docker attach 13b5700abda7

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

    参考这里写个重启脚本,这样就方便多了。启动后再 attach 进程。

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

    使用了,但还是无法 attach 进去,一直卡主。
    ps:想换个 amaze 皮肤真难😂 😭

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

    不好意思,我说错了。用 exec 进入容器:

    docker exec -it solo /bin/sh
    
    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • MisterBooo            

    谢谢,进去了, 成功替换了 ~

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

    发现自己有点蠢

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

    我下载的源码,用 idea 启动服务,总是报错呢,[markdown-http] is not available, uses built-in [flexmark] for markdown processing. Please read FAQ section in user guide (https://hacpai.com/article/1492881378588) for more details 这个是什么问题呢

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

    这个没报错,只是提示要获得更好的 Markdown 渲染效果的话请参考列出的文档链接。

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

    页面上报 500 了,freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
    at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
    at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:85)

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

    麻烦把日志打个压缩包上传。

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

    我怎么没找到日志文件呢

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

    使用 docker 的话可以用 docker logs 命令查看。

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

    不是用的 docker,在 idea 中直接启动的 starter 这个类的 main 方法

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

    配置一下 log4j.props 可以输出到文件。

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

    该内容仅作者和楼主可见。

    感谢    赞同    反对    举报    分享       评论    回复
    可以通过 Docker 安装。
    88250
       感谢    @
  • Myqcookie          

    该内容仅作者和楼主可见。

    感谢    赞同    反对    举报    分享       评论    回复
    先学习一下 Docker,这是很好的一个工具,网上很多教程。
    88250
       感谢    @
  • Myqcookie          

    该内容仅作者和楼主可见。

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

    mysql 的 solo 库是在本地建吗? 怎么建了之后,docker 启动失败?Caused by: java.net.ConnectException: Connection refused (Connection refused)
    [ERROR]-[2019-05-17 20:01:46]-[org.b3log.solo.service.InitService:186]: Check tables failed, please make sure database existed and database configuration [jdbc.*] in local.props is correct [msg=Communications link failure 感觉应该是在容器里面的 mysql 建吗?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
    yang2yang 在 2019-05-17 20:16:51 更新了该回帖
    yang2yang 在 2019-05-17 20:17:21 更新了该回帖
  • 88250            

    MySQL 本地或者 docker 都行。这个问题估计是 docker 网络配置不对引起的。

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