环境
- MySQL 5+
 - Tomcat 6+
 
2. 配置 JDBC 数据源
按照数据库连接配置修改 ${b3log-solo-mysql-x.×.x}/WEB-INF/classes/local.properties 文件里
#### JDBC database Configurations ####
区域中jdbc.URL=jdbc:mysql://localhost:3306/b3log?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=
另外,还必须配置表前缀# The specific table name prefix
jdbc.tablePrefix=b3_solo
可以配置为其他前缀,但不能留空。3. 修改应用路径
修改 ${b3log-solo-x.×.x}/WEB-INF/classes/latke.properties 中的 Server 区域,配置成部署路径。
serverScheme=http
serverHost=你自己的域名
serverPort=端口填 80
staticServerScheme=http
staticServerHost=你自己的域名
staticServerPort=端口填 80
contextPath=/部署包展开后的目录名,例如 /b3log
staticPath=/部署包展开后的目录名,例如 /b3log
4. 部署将 ${b3log-solo-mysql-x.x.x} 下的内容拷贝到部署目录下(tomcat/webapps/${contextPath}),例如 d:/tomcat/webapps/b3log
重启tomcat.
在浏览器中访问:http://${server}:${port}/${contextPath} 进行初始化.比如我的:
http://as3.brite.biz:8081/b3log
注 :
- ${server}:${port} 为你容器的访问地址与端口.
 
修改自https://github.com/b3log/b3log-solo/wiki/deploy_local_tomcat
b3log-solo-mysql-0.6.0.war的下载地址:
http://pan.baidu.com/share/link?shareid=541735&uk=3255126224#dir/path=%2Fb3log-solo%2F0.6.0
项目地址:
https://github.com/b3log/b3log-solo(已经删除)
https://github.com/luckypoem/b3log-solo
-----
https://github.com/88250/solo
--------------------------------
❤ 令人放心的全面免费服务
✅ 贴心的技术支持
- 有问必答的用户交流群,轻松气氛,社恐无惧
 - 舒心提问,耐心讲解,博客维护团队为你解答
 - 免费远程服务,解决疑难杂症
 - 菠萝博客及全部增值服务永久免费,永久更新
 
🌱 我是小白,装不好怎么办?
不用担心安装问题,我们提供完善的文档,提供所有部署方式的安装、升级方式,通过简单的几步就可启动。
如果你在跟随教程安装的过程中出现任何问题,菠萝博客用户群会有作者以及维护者随时待命,免费解答、远程帮助,QQ 用户群请点击最下方的链接。
为什么选择 Bolo
- 完整的教程文档,完善的交流答疑
 - 精美皮肤常更新
 - 支持将文章自动备份至 GitHub 仓库 示例
 - 超酷的数据统计表
 - 本地登录、评论,支持备案模式(隐藏登录、评论及搜索入口)
 - 支持 Tomcat、Docker 快速部署
 - 邮件提醒功能,不怕错过博客中的新评论,回复他人评论也会发邮件提醒他人
 - 强大的 Vditor 编辑器,支持 
所见即所得、即时渲染、分屏预览三种模式,额外支持通过 Lute_HTTP 渲染 - 支持自定义图床(阿里云、又拍云、七牛云、腾讯云)
 - 轻型防火墙功能,阻止恶意访问,保证博客正常运行
 - 强大的 Markdown 编辑器(使用 Vditor)支持大纲、数学公式、脑图、图表、流程图、甘特图、时序图、五线谱、多媒体、语音阅读、标题锚点、代码高亮及复制、graphviz 渲染
 - 支持黑暗模式,随系统设置自动切换,保护视力
 - 看板娘+,在线更新海量看板娘资源
 - 如果你是 Solo 用户,还可将 Solo 的数据一键迁移到 Bolo;如果你对 Bolo 不满意,还可以一键迁回至 Solo
 - Server 酱推送功能,在微信上接收你的博客动态
 - 自动生成“我在 GitHub 上的开源项目”文章功能,让博客的访客更好地了解你的 GitHub 履历
 
博客安装使用教程文档
👉 QQ用户群 | 安装教程 | 从Solo迁移 | Bolo介绍 | 常见问题
from https://github.com/adlered/bolo-solo
https://doc.stackoverflow.wiki/web/#/7/165
-----------------------------------------------------------
Solo 开发环境搭建详细说明
1. 环境搭建综述
- JDK:8 或更高的版本。我们就用当前最新的 JDK12 版本。
 - Maven:2 或更高的版本。我们就用当前最新的 Maven 3.6.1
 - MySQL:默认使用 MySQL,可选择使用内嵌的 H2 Database。我们就用当前最新的 MySQL8。
 
2. 安装 JDK12
2.1 安装之前先 rpm -qa |grep java 检查一下系统有没有低版本的 java
[root@localhost ~]# rpm -qa |grep java
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-devel-1.8.0.212.b04-0.el7_6.x86_64
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2019a-1.el7.noarch
java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
java-1.8.0-openjdk-headless-1.8.0.212.b04-0.el7_6.x86_64
2.2 用 yum -y remove java* 方法卸载低版本的 java
[root@localhost ~]# yum -y remove java*              
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 java-1.8.0-openjdk.x86_64.1.1.8.0.212.b04-0.el7_6 将被 删除
---> 软件包 java-1.8.0-openjdk-devel.x86_64.1.1.8.0.212.b04-0.el7_6 将被 删除
---> 软件包 java-1.8.0-openjdk-headless.x86_64.1.1.8.0.212.b04-0.el7_6 将被 删除
---> 软件包 javapackages-tools.noarch.0.3.4.1-11.el7 将被 删除
--> 解决依赖关系完成
依赖关系解决
==========================================================================================================================================================================================
 Package                                                架构                              版本                                                  源                                   大小
==========================================================================================================================================================================================
正在删除:
 java-1.8.0-openjdk                                     x86_64                            1:1.8.0.212.b04-0.el7_6                               @updates                            529 k
 java-1.8.0-openjdk-devel                               x86_64                            1:1.8.0.212.b04-0.el7_6                               @updates                             40 M
 java-1.8.0-openjdk-headless                            x86_64                            1:1.8.0.212.b04-0.el7_6                               @updates                            104 M
 javapackages-tools                                     noarch                            3.4.1-11.el7                                          @base                               156 k
事务概要
==========================================================================================================================================================================================
移除  4 软件包
安装大小:145 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : 1:java-1.8.0-openjdk-devel-1.8.0.212.b04-0.el7_6.x86_64                                                                                                               1/4 
  正在删除    : 1:java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64                                                                                                                     2/4 
  正在删除    : 1:java-1.8.0-openjdk-headless-1.8.0.212.b04-0.el7_6.x86_64                                                                                                            3/4 
  正在删除    : javapackages-tools-3.4.1-11.el7.noarch                                                                                                                                4/4 
  验证中      : 1:java-1.8.0-openjdk-devel-1.8.0.212.b04-0.el7_6.x86_64                                                                                                               1/4 
  验证中      : 1:java-1.8.0-openjdk-headless-1.8.0.212.b04-0.el7_6.x86_64                                                                                                            2/4 
  验证中      : 1:java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64                                                                                                                     3/4 
  验证中      : javapackages-tools-3.4.1-11.el7.noarch                                                                                                                                4/4 
删除:
  java-1.8.0-openjdk.x86_64 1:1.8.0.212.b04-0.el7_6       java-1.8.0-openjdk-devel.x86_64 1:1.8.0.212.b04-0.el7_6       java-1.8.0-openjdk-headless.x86_64 1:1.8.0.212.b04-0.el7_6      
  javapackages-tools.noarch 0:3.4.1-11.el7               
完毕!
[root@localhost ~]# rpm -qa |grep java
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2019a-1.el7.noarch
[root@localhost ~]# yum -y remove python-javapackages-3.4.1-11.el7.noarch
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 python-javapackages.noarch.0.3.4.1-11.el7 将被 删除
--> 解决依赖关系完成
依赖关系解决
==========================================================================================================================================================================================
 Package                                              架构                                    版本                                           源                                      大小
==========================================================================================================================================================================================
正在删除:
 python-javapackages                                  noarch                                  3.4.1-11.el7                                   @base                                   65 k
事务概要
==========================================================================================================================================================================================
移除  1 软件包
安装大小:65 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : python-javapackages-3.4.1-11.el7.noarch                                                                                                                               1/1 
  验证中      : python-javapackages-3.4.1-11.el7.noarch                                                                                                                               1/1 
删除:
  python-javapackages.noarch 0:3.4.1-11.el7                                                                                                                                               
完毕!
[root@localhost ~]# yum -y remove tzdata-java-2019a-1.el7.noarch
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 tzdata-java.noarch.0.2019a-1.el7 将被 删除
--> 解决依赖关系完成
依赖关系解决
==========================================================================================================================================================================================
 Package                                       架构                                     版本                                             源                                          大小
==========================================================================================================================================================================================
正在删除:
 tzdata-java                                   noarch                                   2019a-1.el7                                      @updates                                   366 k
事务概要
==========================================================================================================================================================================================
移除  1 软件包
安装大小:366 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : tzdata-java-2019a-1.el7.noarch                                                                                                                                        1/1 
  验证中      : tzdata-java-2019a-1.el7.noarch                                                                                                                                        1/1 
删除:
  tzdata-java.noarch 0:2019a-1.el7                                                                                                                                                        
完毕!
[root@localhost ~]# rpm -qa |grep java
[root@localhost ~]# 
2.3 清理完旧的 Java 环境就可以开始安装新版本的 JDK 了。
2.3.1 先用命令搜索一下服务器镜像上的 JDK 版本
[root@localhost ~]# yum search jdk
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirror01.idc.hinet.net
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
==================================================================================== N/S matched: jdk ====================================================================================
copy-jdk-configs.noarch : JDKs configuration files copier
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without audio and video support
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8
java-1.8.0-openjdk-accessibility.i686 : OpenJDK accessibility connector
java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.8.0-openjdk-accessibility-debug.i686 : OpenJDK accessibility connector for packages with debug on
java-1.8.0-openjdk-accessibility-debug.x86_64 : OpenJDK 8 accessibility connector for packages with debug on
java-1.8.0-openjdk-debug.i686 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment 8 with full debug on
java-1.8.0-openjdk-demo.i686 : OpenJDK Demos
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos 8
java-1.8.0-openjdk-demo-debug.i686 : OpenJDK Demos with full debug on
java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos 8 with full debug on
java-1.8.0-openjdk-devel.i686 : OpenJDK Development Environment
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment 8
java-1.8.0-openjdk-devel-debug.i686 : OpenJDK Development Environment with full debug on
java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment 8 with full debug on
java-1.8.0-openjdk-headless.i686 : OpenJDK Runtime Environment
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 8
java-1.8.0-openjdk-headless-debug.i686 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation
java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK 8 API documentation for packages with debug on
java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed in single archive
java-1.8.0-openjdk-javadoc-zip-debug.noarch : OpenJDK 8 API documentation compressed in single archive for packages with debug on
java-1.8.0-openjdk-src.i686 : OpenJDK Source Bundle
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle 8
java-1.8.0-openjdk-src-debug.i686 : OpenJDK Source Bundle for packages with debug on
java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle 8 for packages with debug on
java-11-openjdk.i686 : OpenJDK Runtime Environment 11
java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11
java-11-openjdk-debug.i686 : OpenJDK Runtime Environment 11 with full debug on
java-11-openjdk-debug.x86_64 : OpenJDK Runtime Environment 11 with full debug on
java-11-openjdk-demo.i686 : OpenJDK Demos 11
java-11-openjdk-demo.x86_64 : OpenJDK Demos 11
java-11-openjdk-demo-debug.i686 : OpenJDK Demos 11 with full debug on
java-11-openjdk-demo-debug.x86_64 : OpenJDK Demos 11 with full debug on
java-11-openjdk-devel.i686 : OpenJDK Development Environment 11
java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11
java-11-openjdk-devel-debug.i686 : OpenJDK Development Environment 11 with full debug on
java-11-openjdk-devel-debug.x86_64 : OpenJDK Development Environment 11 with full debug on
java-11-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 11
java-11-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 11
java-11-openjdk-headless-debug.i686 : OpenJDK Runtime Environment with full debug on
java-11-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-11-openjdk-javadoc.i686 : OpenJDK 11 API documentation
java-11-openjdk-javadoc.x86_64 : OpenJDK 11 API documentation
java-11-openjdk-javadoc-debug.i686 : OpenJDK 11 API documentation for packages with debug on
java-11-openjdk-javadoc-debug.x86_64 : OpenJDK 11 API documentation for packages with debug on
java-11-openjdk-javadoc-zip.i686 : OpenJDK 11 API documentation compressed in single archive
java-11-openjdk-javadoc-zip.x86_64 : OpenJDK 11 API documentation compressed in single archive
java-11-openjdk-javadoc-zip-debug.i686 : OpenJDK 11 API documentation compressed in single archive for packages with debug on
java-11-openjdk-javadoc-zip-debug.x86_64 : OpenJDK 11 API documentation compressed in single archive for packages with debug on
java-11-openjdk-jmods.i686 : JMods for OpenJDK 11
java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11
java-11-openjdk-jmods-debug.i686 : JMods for OpenJDK 11 with full debug on
java-11-openjdk-jmods-debug.x86_64 : JMods for OpenJDK 11 with full debug on
java-11-openjdk-src.i686 : OpenJDK Source Bundle 11
java-11-openjdk-src.x86_64 : OpenJDK Source Bundle 11
java-11-openjdk-src-debug.i686 : OpenJDK Source Bundle for packages with debug on
java-11-openjdk-src-debug.x86_64 : OpenJDK Source Bundle 11 for packages with debug on
java-latest-openjdk.x86_64 : OpenJDK Runtime Environment 12
java-latest-openjdk-debug.x86_64 : OpenJDK Runtime Environment 12 with full debug on
java-latest-openjdk-demo.x86_64 : OpenJDK Demos 12
java-latest-openjdk-demo-debug.x86_64 : OpenJDK Demos 12 with full debug on
java-latest-openjdk-devel.x86_64 : OpenJDK Development Environment 12
java-latest-openjdk-devel-debug.x86_64 : OpenJDK Development Environment 12 with full debug on
java-latest-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 12
java-latest-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-latest-openjdk-javadoc.x86_64 : OpenJDK 12 API documentation
java-latest-openjdk-javadoc-debug.x86_64 : OpenJDK 12 API documentation for packages with debug on
java-latest-openjdk-javadoc-zip.x86_64 : OpenJDK 12 API documentation compressed in single archive
java-latest-openjdk-javadoc-zip-debug.x86_64 : OpenJDK 12 API documentation compressed in single archive for packages with debug on
java-latest-openjdk-jmods.x86_64 : JMods for OpenJDK 12
java-latest-openjdk-jmods-debug.x86_64 : JMods for OpenJDK 12 with full debug on
java-latest-openjdk-src.x86_64 : OpenJDK Source Bundle 12
java-latest-openjdk-src-debug.x86_64 : OpenJDK Source Bundle 12 for packages with debug on
ldapjdk-javadoc.noarch : Javadoc for ldapjdk
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser plug-in and Web Start implementation
ldapjdk.noarch : The Mozilla LDAP Java SDK
openprops.noarch : An improved java.util.Properties from OpenJDK
  名称和简介匹配 only,使用“search all”试试。
2.3.2 选择 java-latest-openjdk-devel.x86_64 安装。
java-latest-openjdk-devel.x86_64 : OpenJDK Development Environment 12 就是最新版的 openjdk12。另外 java-latest-openjdk.x86_64 这个是 JRE 运行时环境,只有 java 命令,没有 javac 命令。[root@localhost ~]# yum -y install java-latest-openjdk-devel.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
epel/x86_64/primary_db                                                                | 6.8 MB  00:02:44     
正在解决依赖关系
--> 正在检查事务
---> 软件包 java-latest-openjdk-devel.x86_64.1.12.0.1.12-1.rolling.el7 将被 安装
--> 正在处理依赖关系 java-latest-openjdk(x86-64) = 1:12.0.1.12-1.rolling.el7,它被软件包 1:java-latest-openjdk-devel-12.0.1.12-1.rolling.el7.x86_64 需要
--> 正在检查事务
---> 软件包 java-latest-openjdk.x86_64.1.12.0.1.12-1.rolling.el7 将被 安装
--> 正在处理依赖关系 java-latest-openjdk-headless(x86-64) = 1:12.0.1.12-1.rolling.el7,它被软件包 1:java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64 需要
--> 正在检查事务
---> 软件包 java-latest-openjdk-headless.x86_64.1.12.0.1.12-1.rolling.el7 将被 安装
--> 正在处理依赖关系 tzdata-java >= 2015d,它被软件包 1:java-latest-openjdk-headless-12.0.1.12-1.rolling.el7.x86_64 需要
--> 正在处理依赖关系 javapackages-tools,它被软件包 1:java-latest-openjdk-headless-12.0.1.12-1.rolling.el7.x86_64 需要
--> 正在检查事务
---> 软件包 javapackages-tools.noarch.0.3.4.1-11.el7 将被 安装
--> 正在处理依赖关系 python-javapackages = 3.4.1-11.el7,它被软件包 javapackages-tools-3.4.1-11.el7.noarch 需要
---> 软件包 tzdata-java.noarch.0.2019a-1.el7 将被 安装
--> 正在检查事务
---> 软件包 python-javapackages.noarch.0.3.4.1-11.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=============================================================================================================
 Package                              架构           版本                              源               大小
=============================================================================================================
正在安装:
 java-latest-openjdk-devel            x86_64         1:12.0.1.12-1.rolling.el7         epel            4.5 M
为依赖而安装:
 java-latest-openjdk                  x86_64         1:12.0.1.12-1.rolling.el7         epel            201 k
 java-latest-openjdk-headless         x86_64         1:12.0.1.12-1.rolling.el7         epel             39 M
 javapackages-tools                   noarch         3.4.1-11.el7                      base             73 k
 python-javapackages                  noarch         3.4.1-11.el7                      base             31 k
 tzdata-java                          noarch         2019a-1.el7                       updates         187 k
事务概要
=============================================================================================================
安装  1 软件包 (+5 依赖软件包)
总下载量:44 M
安装大小:190 M
Downloading packages:
(1/6): python-javapackages-3.4.1-11.el7.noarch.rpm                                    |  31 kB  00:00:00     
(2/6): javapackages-tools-3.4.1-11.el7.noarch.rpm                                     |  73 kB  00:00:00     
(3/6): tzdata-java-2019a-1.el7.noarch.rpm                                             | 187 kB  00:00:00     
warning: /var/cache/yum/x86_64/7/epel/packages/java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64.rpm 的公钥尚未安装
(4/6): java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64.rpm                         | 201 kB  00:00:12     
(5/6): java-latest-openjdk-devel-12.0.1.12-1.rolling.el7.x86_64.rpm                   | 4.5 MB  00:03:01     
(6/6): java-latest-openjdk-headless-12.0.1.12-1.rolling.el7.x86_64.rpm                |  39 MB  00:09:44     
-------------------------------------------------------------------------------------------------------------
总计                                                                          77 kB/s |  44 MB  00:09:44     
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 检索密钥
导入 GPG key 0x352C64E5:
 用户ID     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 指纹       : 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 软件包     : epel-release-7-11.noarch (@extras)
 来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : tzdata-java-2019a-1.el7.noarch                                                           1/6 
  正在安装    : python-javapackages-3.4.1-11.el7.noarch                                                  2/6 
  正在安装    : javapackages-tools-3.4.1-11.el7.noarch                                                   3/6 
  正在安装    : 1:java-latest-openjdk-headless-12.0.1.12-1.rolling.el7.x86_64                            4/6 
  正在安装    : 1:java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64                                     5/6 
  正在安装    : 1:java-latest-openjdk-devel-12.0.1.12-1.rolling.el7.x86_64                               6/6 
  验证中      : 1:java-latest-openjdk-12.0.1.12-1.rolling.el7.x86_64                                     1/6 
  验证中      : python-javapackages-3.4.1-11.el7.noarch                                                  2/6 
  验证中      : 1:java-latest-openjdk-headless-12.0.1.12-1.rolling.el7.x86_64                            3/6 
  验证中      : tzdata-java-2019a-1.el7.noarch                                                           4/6 
  验证中      : javapackages-tools-3.4.1-11.el7.noarch                                                   5/6 
  验证中      : 1:java-latest-openjdk-devel-12.0.1.12-1.rolling.el7.x86_64                               6/6 
已安装:
  java-latest-openjdk-devel.x86_64 1:12.0.1.12-1.rolling.el7                                                 
作为依赖被安装:
  java-latest-openjdk.x86_64 1:12.0.1.12-1.rolling.el7                                                       
  java-latest-openjdk-headless.x86_64 1:12.0.1.12-1.rolling.el7                                              
  javapackages-tools.noarch 0:3.4.1-11.el7                                                                   
  python-javapackages.noarch 0:3.4.1-11.el7                                                                  
  tzdata-java.noarch 0:2019a-1.el7                                                                           
完毕!
2.3.3 装完后查看一下 JDK 版本:(也是验证 java 和 javac 命令)
[root@localhost ~]# java -version
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment 19.3 (build 12.0.1+12)
OpenJDK 64-Bit Server VM 19.3 (build 12.0.1+12, mixed mode, sharing)
[root@localhost ~]# javac -version
javac 12.0.1
3. 安装 Maven
3.1 先检查本机是否已经安装了 maven
[root@localhost ~]# mvn -v
-bash: mvn: 未找到命令
3.2 去 Maven 官网下载二进制文件。
3.2.1 我们先访问 apache-maven 网站的下载界面
右键点击
apache-maven-3.6.1-bin.tar.gz 复制链接地址 http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz3.2.2 用 wget 下载 apache-maven-3.6.1-bin.tar.gz 到本地:
[root@localhost ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
--2019-06-23 20:45:21--  http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:9136463 (8.7M) [application/octet-stream]
正在保存至: “apache-maven-3.6.1-bin.tar.gz”
100%[===================================================================>] 9,136,463   3.32MB/s 用时 2.6s   
2019-06-23 20:45:23 (3.32 MB/s) - 已保存 “apache-maven-3.6.1-bin.tar.gz” [9136463/9136463])
3.3 解压缩 apache-maven-3.6.1-bin.tar.gz 文件:
[root@localhost ~]# tar -zxf apache-maven-3.6.1-bin.tar.gz 
[root@localhost ~]# 
3.4 设置 maven 的路径
.bash_profile 文件(vi .bash_profile),添加 maven 路径:$HOME/apache-maven-3.6.1/bin 到 PATH 环境变量。# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:$HOME/apache-maven-3.6.1/bin
export PATH
3.5 切换一下用户,使 PATH 生效
su - 命令重新切换到 root 用户,可使 PATH 生效[root@localhost ~]# su -
上一次登录:日 6月 23 21:02:56 CST 2019pts/0 上
3.6 查看 mvn 版本(顺便测试一下 mvn 是否可用)
[root@localhost ~]# mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /root/apache-maven-3.6.1
Java version: 12.0.1, vendor: N/A, runtime: /usr/lib/jvm/java-12-openjdk-12.0.1.12-1.rolling.el7.x86_64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.21.2.el7.x86_64", arch: "amd64", family: "unix"
4. 安装 MySQL
4.1 centos7 上安装并启动 MySQL8 的命令步骤
- 1)
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm - 2)
yum -y install mysql80-community-release-el7-3.noarch.rpm - 3)
yum -y install mysql-community-server(从 oracle 官网下载 mysql 速度较慢,耐心等) - 4)
systemctl start mysqld.service(启动 mysql) 
5. 配置 MySQL8
5.1 获取 root@localhost 的初始密码
root@% 和本地连接 root@locahost 提供了不同的密码验证方式)。MySQL8 将本地连接的初始密码放到了/var/log/mysqld.log 文件中;我们可以用 cat /var/log/mysqld.log | grep password 命令查看初始密码。[root@VM_0_11_centos solo]# cat /var/log/mysqld.log | grep password
2019-06-23T03:35:57.941668Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: n=Ti,P4?J(uE
n=Ti,P4?J(uE 就是初始密码。5.2 使用初始密码登录 mysql
[root@VM_0_11_centos solo]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
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.
5.3 修改 root 密码
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)
5.3.1 修改密码策略
mysql> SHOW VARIABLES LIKE 'validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
mysql> set global validate_password.check_user_name=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | OFF   |
| validate_password.dictionary_file    |       |
| validate_password.length             | 4     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 1     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
5.3.2 修改密码
mysql> alter user'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
5.4 建库 solo
mysql> create database solo;
Query OK, 1 row affected (0.01 sec)
6. solo 项目配置
注:没有装 git 命令请先用
yum -y install git 命令安装。6.1 克隆 solo 项目
git clone --recurse-submodules https://gitee.com/b3logos/solo.git(国内通过码云下载较快):[root@VM_0_11_centos ~]# git clone --recurse-submodules https://gitee.com/b3logos/solo.git
Cloning into 'solo'...
remote: Enumerating objects: 44272, done.
remote: Counting objects: 100% (44272/44272), done.
remote: Compressing objects: 100% (13923/13923), done.
remote: Total 44272 (delta 24766), reused 44214 (delta 24708)
Receiving objects: 100% (44272/44272), 88.66 MiB | 2.85 MiB/s, done.
Resolving deltas: 100% (24766/24766), done.
Submodule 'src/main/webapp/skins' (https://github.com/b3log/solo-skins) registered for path 'src/main/webapp/skins'
Cloning into 'src/main/webapp/skins'...
remote: Enumerating objects: 1193, done.
remote: Counting objects: 100% (1193/1193), done.
remote: Compressing objects: 100% (732/732), done.
remote: Total 11743 (delta 845), reused 767 (delta 460), pack-reused 10550
Receiving objects: 100% (11743/11743), 23.59 MiB | 256.00 KiB/s, done.
Resolving deltas: 100% (8803/8803), done.
Submodule path 'src/main/webapp/skins': checked out 'ca0de62bddd9e3bb8732e46b4239001d7f238303'
[root@VM_0_11_centos ~]# 
6.2 启动 solo 博客系统
[root@VM_0_11_centos ~]# cd solo
[root@VM_0_11_centos ~]# mvn jetty:run
6.3 登录 solo 博客系统
http://【你的服务器IP】:8080/ 登录系统,初始化博客,大功告成。简介
Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。
这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
欢迎到 Solo 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源:
- Markdown 编辑器支持三种编辑模式:所见即所得 / 即时渲染 / 分屏预览
 - 标签聚合分类
 - 自定义导航链接
 - 随机文章 / 相关文章 / 置顶 / 更新提醒
 - 自定义文章永久链接 / 签名档
 - 配置站点 SEO 参数 / 公告 / 页脚
 - 代码高亮 / 数学公式 / 流程图 / 五线谱
 - 多皮肤,多端适配
 - 多语言 / 国际化
 - 友情链接管理
 - 多用户写作,团队博客
 - Hexo / Jekyll / Markdown 导入
 - SQL / JSON / Markdown 导出
 - Atom / RSS / Sitemap
 - CDN 静态资源分离,可配置 jsDelivr CDN 分发
 - 拉取 GitHub 仓库和自动备份
 - 内置 HTTPS+CDN 文件存储
 - 支持生成导出静态站点,用于发布 GitHub Pages
 
皮肤
目前内置的皮肤如下,可点击进行预览:
- Bubble
 - Casper
 - Pinghsu
 - Jane
 - nijigen
 - Medium
 - 9IPHP
 - Andrea
 - Bruce
 - Community
 - favourite
 - Finding
 - i-nove
 - metro-hot
 - NeoEase
 - next
 - owmx-3.0
 - timeline
 - tree-house
 - yilia
 
欢迎在这里推荐好看的皮肤,我们会尽量进行制作。
Solo 支持“动静两用”:
- 动态博客:在服务器上搭建,进程常驻内存运行,在线使用
 - 静态博客:在本地电脑运行,写作完成后生成导出静态站点
 
更多视频教程陆续制作中,欢迎到 B 站关注我:报废程序员D。
本地运行主要用于试用或者生成静态站点,生成静态站点的用法请参考这里。
(视频演示教程请看这里)
下载最新的 Solo 包解压,进入解压目录执行:
- Windows: 
java -cp "lib/*;." org.b3log.solo.Server - Unix-like: 
java -cp "lib/*:." org.b3log.solo.Server 
如果你有 Java 开发环境,可参考这里通过源码构建运行(视频演示教程请看这里)。
Docker 方式部署是动态博客用法,主要用于在服务器上部署动态博客。
(视频演示教程请看这里)
docker pull b3log/solo
注意:对于如下命令,如果你不确定如何使用 \ 来进行换行,就不要换行了,一行内写完整条命令。
- 
使用 MySQL
手动建库(库名
solo,字符集使用utf8mb4,排序规则utf8mb4_general_ci):create database solo default character set utf8mb4 collate utf8mb4_general_ci; create user 'root'@'127.0.0.1' identified by '123456'; grant all privileges on *.* to 'root'@'127.0.0.1'; flush privileges;
 
启动容器:
docker run --detach --name solo --network=host \
    --env RUNTIME_DB="MYSQL" \
    --env JDBC_USERNAME="root" \
    --env JDBC_PASSWORD="123456" \
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=为了简单,使用了主机网络模式来连接主机上的 MySQL。
使用 H2 Database
docker run --detach --name solo --volume ~/solo_h2/:/opt/solo/h2/ --publish 8080:8080 \
    --env RUNTIME_DB="H2" \
    --env JDBC_USERNAME="root" \
    --env JDBC_PASSWORD="123456" \
    --env JDBC_DRIVER="org.h2.Driver" \
    --env JDBC_URL="jdbc:h2:/opt/solo/h2/db;MODE=MYSQL" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=启动参数说明:
--listen_port:进程监听端口--server_scheme:最终访问协议,如果反代服务启用了 HTTPS 这里也需要改为https--server_host:最终访问域名或公网 IP,不要带端口--server_port:最终访问端口,使用浏览器默认的 80 或者 443 的话值留空即可
完整启动参数的说明可以使用 -h 来查看。
默认通过 log4j2 将日志打印到标准输出流,可以通过 docker logs solo 进行查看。如果需要覆盖 log4j 配置,可通过挂载文件实现:
--volume ~/log4j2.xml:/opt/solo/log4j2.xml如果需要使用第三方皮肤,可以挂载目录 skins,目录结构请参考原版 skins:
--volume ~/skins/:/opt/solo/skins/- 拉取最新镜像
 - 重启容器
 
可参考这里编写一个重启脚本,并通过 crontab 每日凌晨运行来实现自动更新。
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 $http_host; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 10m; } }
请务必配置:
proxy_set_header  Host $http_host;
proxy_set_header  X-Real-IP $remote_addr;否则访问页面可能会出现“Latke 配置错误”或者样式异常;统计在线访客功能会不正常。
Solo 使用 木兰宽松许可证, 第2版 开源协议。
- jQuery:前端 JavaScript 工具库
 - Vditor:浏览器端的 Markdown 编辑器
 - Highlight.js:前端代码高亮库
 - pjax:pushState + AJAX = pjax
 - jsoup:Java HTML 解析器
 - flexmark:Java Markdown 处理库
 - Apache Commons:Java 工具库集
 - Latke:以 JSON 为主的 Java Web 框架
 
初始化成功后请务必查看自动发布的第一篇文章,里面有一些必要的操作,请务必完成。然后请到管理后台 -> 工具 -> 偏好设定中进行一下博客的细节配置。
- 博客基本信息:标题、子标题、SEO 信息
 - HTML head:可以配置脚本,比如百度统计
 - 公告:可以使用 HTML 和脚本进行配置
 - 页脚:主要用来放备案信息,也可以使用 HTML 和脚本进行配置
 
最多可以配置 3 个签名档,发布文章的时候选择一个使用,可以使用 HTML 和脚本进行配置。
下面是一些比较有特色或重要的参数:
- 列表显示方式:仅标题/标题 + 摘要/标题 + 正文
 - 各种分页参数
 - 文章更新提示:启用后一旦某篇文章更新过,则会在文章标题处显示“有更新”的提示,并且排序靠前
 - 允许同步 GitHub 仓库:将文章数据自动导出到 GitHub 仓库,用于展示和备份
 
安全第一,血泪的教训 😢
- H2:备份 home 目录下的 solo_h2 文件夹
 - MySQL:使用 MySQL 相关备份工具
 
可在工具 - 偏好设定 - 参数设置中勾选“备份所有文章到社区”,开启后将每隔 24 小时自动备份所有文章(包括草稿和加密文章)到社区,具体细节请参考 Solo 拉取 GitHub 仓库和自动备份。
可在工具 - 偏好设定 - 参数设置中填写 GitHub token,填写后将每隔 24 小时自动备份公开文章(不包括草稿和加密文章)到你的 GitHub  仓库 solo-blog,具体细节请参考 solo-blog 仓库同步功能回来了。
可以几个用户同时使用一个博客发布文章,主要用在团队博客这个场景。权限方面做了简单隔离,非管理员用户可以看到其他用户的博文/评论列表,但是不能进行操作。
提供两种订阅供稿:Atom 1.0、RSS 2.0:
- Atom: /rss.xml
 - RSS: /atom.xml
 
不要用浏览器直接打开,请通过阅读器查看。另外,Solo 也能生成全站文章的 sitemap.xml。
通过 URL 带参(比如 http://88250.b3log.org/?skin=Finding )来确定渲染使用的皮肤。
使用场景举例:
- 只有在首页( 
/)会取参数skin=xxx - 如果带有就记录到 Cookie 里面,如果带有 
skin=default或皮肤不存在则清空 Cookie - 如果要切换成后台默认的皮肤,在首页带参 
skin=default 
“站外相关文章”指的是其他人使用 Solo 发布的文章,该文章含有与你的文章相同的标签。该功能主要是为了加强各个 Solo 博客之间的互动性,让博客访问者可以更有效地访问到相关的内容。
这是 B3log 构思的一部分实现,请大家积极参与进来 🙏
Solo 和 Pipe 的定位是 B3log 分布式社区的博客端节点,并不是通常意义上的独立博客,所以账号体系需要进行统一,否则带来的问题会很多,这也是一路下来探索的,具体经历细节请看这里。
在 Solo v3 之前一直是独立账号体系,但经过长时间验证效果并不理想:
- 不方便,用户需要在社区端和博客端配置账号关联关系
 - 不安全,账号的关联关系需要双向验证,如果不验证账号归属,会被冒名
 
这两个问题是矛盾的,所以为了解决它需要将账号在 B3log 网络中进行唯一化。一开始的设计方案是通过公私钥(类似区块链的钱包原理),但这个方案在现阶段过于复杂,用户使用门槛有点高所以暂时放弃了。公私钥的方案在星火项目里进行过测试验证,技术上应该没问题,以后的鱼塘项目可能会采用这个方案。
所以再次重申一下,Solo 和 Pipe 是 B3log 分布式社区的博客端节点。举个最容易理解的例子,这就好比某些厂商的软件,没有这个厂商的账号是用不了的。打通其他网络的方案是在博客端或者社区端接入其他网络的账号,目前已经在链滴社区上接入 GitHub 登录(可在账号设置中绑定),Solo 可通过 GitHub token 来将文章同步到自己的仓库,避免整个 B3log 网络过度封闭内卷。
最后,希望目前加入到 B3log 的用户是认可这个设计的,如果不认可的话其实就没必要加入使用了,节省自己时间同时也能保护 B3log。当然,不排除以后设计还会有所变化,欢迎参与思考讨论,谢谢。
可考虑使用 Solo 的静态站点支持,本地写作完成后导出静态站点,发布 GitHub Pages 等服务。
如果还是想使用动态博客的话,可使用内嵌的 H2 数据库代替 MySQL。但建议还是进行内存升级,然后使用 Docker 和 MySQL 部署,这样不仅可以通过更新镜像进行平滑升级,还能使用 MySQL 相关工具更方便地进行数据库运维。
请在 pom.xml 中搜索 maven-assembly-plugin 的注释进行配置即可。请注意:使用 jar 运行不支持:
- 静态站点生成
 - 可能存在其他未知问题
 
建议尽量不要打 jar 部署,服务器上请通过 Docker 部署。
请参考这里进行配置。
请通过 NGINX 反代静态资源实现。
Solo 默认是使用内建的 flexmark 进行 md 渲染,可能对有的场景下的渲染效果不是很好。如果你想要获得更好的 md 渲染效果请参考这里。
在线访问计数是通过访问者 IP 去重的,每 10 分钟定时刷新一次。如果用了反向代理,请在代理配置部分加入客户端地址标头。比如 NGINX 需要加入如下配置:
proxy_set_header  X-Real-IP  $remote_addr;
可通过签名档、公告栏中插入 HTML、JS 代码来实现。
可通过在页脚配置中插入 HTML、JS 代码来实现。
启动时加入命令行参数:
--static_server_scheme=https
--static_server_host=cdn.jsdelivr.net
--static_server_port=
--static_path=/gh/88250/solo/src/main/resources请注意:
- 以上配置仅支持内置皮肤,如果挂载了第三方皮肤的话请按需调整
 - 中国大陆地区可能无法访问 jsDelivr CDN
 
Solo 的第一个版本发布于 2010 年,永不断更 😼
Solo 从第一版开始就支持平滑升级,从 v3.0.0 开始支持跨版本升级。在程序升级、数据兼容迁移方面我们做了很多工作。另外,Solo 还支持将数据导出成多种格式,所有的这些努力为的就是让大家能够免去后顾之忧,将精力更多放在创作和分享上。
如果你在使用 Solo 过程中碰到问题或者有需求要提,欢迎跟帖,我们会在第一时间回复;如果你对 Solo 开发方面感兴趣,请参考 Solo 从设计到实现。from https://github.com/88250/solo
(https://ld246.com/article/1579053576274 ,Solo 生成导出静态站点 )


