最近想要尝试一下搭建一个个人博客来记录自己的学习和生活,因此选择了基于java的solo博客系统来尝试搭建一下,主要的步骤有:
-
购买服务器
-
购买域名及备案
-
安装博客程序
-
通过github登录博客后台设置网站信息
本文接下来将依次详细介绍每一个步骤:
购买服务器
因为有学生优惠,所以我购买的阿里云服务器ECS,操作系统镜像选择的Ubuntu系统。因为对于ubuntu系统使用的比较多,更加熟悉对应的命令。
如果你小于24周岁,点击这里可以通过阿里的云翼计划购买学生服务器,一年只要114。购买后,登录阿里云管理控制台,进入“云服务器ECS”就可以看到你的服务器实例。实例会自动启动,几分钟就运行起来了。当你看到状态是运行中,表明已经启动成功了。你也可以看到这个实例的公网IP,可以通过xshell6用远程SSH工具登录到这个IP进行服务器管理。
另外,很重要很重要的是,你需要添加安全组规则,就是添加外部可以访问的端口,默认只开启了22端口。对于搭建博客系统,你必须要开通80端口,否则网站将无法访问。你可以开通其他端口,比如MySQL的端口,以便以后远程登录数据库查看数据。
购买域名与备案
服务器购买好后,你需要选择一个域名,可以去阿里云旗下万网下购买一个。
购买后,需要进行备案。备案对于中国大陆的服务器是必须的,否则就算你域名解析成功了,也是会被和谐掉的,可以去阿里云下备案吧!
安装依赖软件
由于Solo是基于Java的开源博客系统,安装Solo之前,我们需要先安装如下依赖软件:
-
Java
-
MySQL
安装Java
因为Solo是用Java开发的,我们要运行Solo必须的安装Java运行环境。在Oracle官网下载页面下载Linux版的JDK压缩包,不过官网现在好像要注册了才能下载,不想麻烦的可以自己在百度上找一找,还是比较容易找到的,然后通过工具(下面有介绍两种方式,在通过war发布包构建博客系统小节下)在上传到服务器。
- 在服务器上创建了一个新目录/opt/java,然后将压缩包拷贝到这个目录,然后解压:
tar -zxvf jdk-8u171-linux-x64.tar.gz
- 接下来设置环境变量,用vi编辑器打开/etc/profile文件:
vi /etc/profile
在文件开头添加如下内容:
JAVA_HOME=/opt/java/jdk1.8.0_171
JRE_HOME=/opt/java/jdk1.8.0_171/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
然后保存别执行以下命令使其生效:
source /etc/profile
最后在任意目录执行下面命令来测试Java是否安装成功:
java -version
如果看到类似下面的输出,说明已经安装成功了:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
安装MySQL
Solo默认使用的H2内存DB,建议最好改用MySQL。
- 安装MySQL
首先分别执行下面三条命令:
sudo apt-get install mysql-server
sudo apt isntall mysql-client
sudo apt install libmysqlclient-dev
安装过程中,要求设置root用户的密码,请一定记住这个密码。
安装成功后可以通过下面的命令测试是否安装成功:
sudo netstat -tap | grep mysql
输出类似如下:
tcp6 0 0 localhost:mysql *:* LISTEN 19839/mysqld
也可以执行以下命令测试是否可以进入MySQL:
mysql -uroot -p你的密码
- 开启MySQL远程访问
MySQL安装后默认是没有打开远程访问的,从上面的输出可以看出,它只允许localhost也就是本机访问。
我们可以编辑/etc/mysql/mysql.conf.d/mysqld.cnf
文件:
vi /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address = 127.0.0.1注释掉:
#bind-address = 127.0.0.1
保存退出,然后执行如下命令进入MySQL:
mysql -uroot -p你的密码
然后执行以下命令进行授权:
grant all on *.* to root@'%' identified by '你的密码' with grant option;
flush privileges;
然后执行quit命令退出MySQL,执行以下命令重启MySQL服务:
service mysql restart
此时,再次运行ps命令:
sudo netstat -tap | grep mysql
输出如下,你会看到它已经不再只是监听localhost了:
tcp6 0 0 [::]:mysql [::]:* LISTEN 19839/mysqld
现在就可以使用MySQL客户端测试一下是否可以从你的电脑访问服务器上的MySQL服务了。
安装博客程序
接下来的步骤就是安装博客程序了。有很多的开源博客程序,这里选择了一款Java开源博客系统:Solo。
对于solo博客系统的安装的话,通过作者的文档可以看出来主要有两种方式来部署博客系统:
- 通过 war 发布包或者源码构建部署
- 通过tomcat使用war包实现部署
- Docker 部署(作者推荐)
这三种方式的主要区别的话,通过war发布包或者源码构建部署以及tomcat来实现博客系统的构建的话,对于未来的博客系统的更新内容需要自己去重新下载war包来实现更新,而且对于界面皮肤的更换也需要自己去下载,然后放到对应的目录下面,而通过Docker部署的话可以在docker的官方仓库更新最新版本的内容,而且可以在线更新皮肤。
通过war发布包构建博客系统
通过上面的官网再进入Github找到下载链接,下载到Solo的war包。然后通过传输工具上传到服务器,这里有两种推荐(使用的是xshell来连接服务器):
- 下载xftp工具来实现远程传输,在xshell上点击窗口选择新建传输文件就会让你去下载xftp工具,根据步骤下载安装后就可以实现本地和服务器传输文件。
- 在ubuntu系统中安装lrzsz,通过命令:
apt-get install lrzsz
实现安装,如果报错的话,更新一下软件源apt-get update
apt-get upgrade
,之后应该能成功安装,在终端敲rz
就是从本机复制文件了,敲sz 文件名
然后选择文件夹存放就可以从服务器中下载文件了。
上传Solo包后,创建一个新目录/opt/solo,将Solo war包拷贝到这个目录下,然后解压:
jar -xvf solo-2.9.1.war
解压后,进入latke.properties文件:
vi /opt/solo/WEB-INF/classes/latke.properties
修改serverHost和serverPort:
#### Server ####
# Browser visit protocol
serverScheme=http
# Browser visit domain name
serverHost=www.yglong.com //改成你的域名或者ip,ip地址是公网ip,比如47.96.137.27
# Browser visit port, 80 as usual, THIS IS NOT SERVER LISTEN PORT!
serverPort=80 //选择端口,一般80可以不填,但这一行不能注释
保存并退出,进入local.properties文件:
vi /opt/solo/WEB-INF/classes/local.properties
注释掉H2 DB的配置,并配置MySQL:
#### H2 runtime ####
#runtimeDatabase=H2
#jdbc.username=root
#jdbc.password=
#jdbc.driver=org.h2.Driver
#jdbc.URL=jdbc:h2:~/solo_h2/db
#jdbc.pool=h2
#### MySQL runtime ####
runtimeDatabase=MYSQL
jdbc.username=root
jdbc.password=123456 #你的MySQL密码
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.URL=jdbc:mysql://localhost:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
# The minConnCnt MUST larger or equal to 3
jdbc.minConnCnt=5
jdbc.maxConnCnt=10
# The specific table name prefix
jdbc.tablePrefix=b3_solo
保存退出。
接下来创建数据库,首先执行下面命令进入MySQL:
mysql -uroot -p你的密码
然后执行下面命令创建数据库,数据库名字与local.properties里配置的名字要一样:
CREATE DATABASE IF NOT EXISTS solo DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
退出MySQL,最后执行下面命令后台启动Solo:
nohup java -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter >/dev/null 2>&1 &
然后通过访问你的服务器公网ip就可以访问你的博客了,注意上面的配置一定不能配错,不然会提示你配置出错。
通过tomcat使用war包来实现博客网站部署
- 去solo的github下载war包,将其传上服务器;
- ubuntu安装tomcat,官网下载最新的tomcat9,或者通过wget下载:
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz
创建tomcat文件夹并进入
# cd /usr/local/
# mkdir tomcat/
# cd tomcat/
然后将压缩包传上服务器tomcat文件夹。
- 安装 tomcat9
# cd /usr/local/tomcat/
# tar -zxvf apache-tomcat-9.0.17.tar.gz
安装包会被解压到/usr/local/tomcat/apache-tomcat-9.0.17,将目录重命名为 tomcat9
# mv /usr/local/tomcat/apache-tomcat-9.0.17 /usr/local/tomcat/tomcat9
- 开启 Tomcat 服务
# cd /usr/local/tomcat/tomcat/bin/
# ./startup.sh
服务开启成功
Tomcat 服务关闭命令
# ./shutdown.sh
- 验证 Tomcat 是否安装成功
用本地浏览器访问tomcat务器 IP:8080/
如果能出现熟悉的 Tomcat 主页,就表示安装成功了,请确保服务器防火墙已关闭
linux系统关闭防火墙关命令
# systemctl stop firewaldd.service
linux系统开机禁用防火墙关命令
# systemctl disable firewalld
Tomcat 服务默认开机不自启,系统重启后需手动开启服务。或自行百度 Tomcat 服务开机自启教程。
- 博客网站部署
在tomcat9目录下的webapps/ROOT 是Tomcat 容器的网站根目录,也就是上面我们看到的 Tomcat 主页文件的目录,将前面下载的 war 包移动到 wenapps 目录后 Tomcat 会自动解压,在 tomcat9/webapps 目录下有 solo-v3.2.0 这个文件夹就说明解压成功,之后删除war包,将solo-v3.2.0文件夹重命名为solo,然后记得修改配置,否则会出现配置错误的页面,还是修改solo文件夹下WEB-INF/classes/latke.properties
和WEB-INF/classes# vim local.properties
下的配置内容,具体可以看这里,之后我们通过访问ip:8080/solo就能访问到博客的主页了,如果你想直接设置ip:8080访问的话,那么接下在我们要把 Tomcat 的访问目录换为 solo,最简单的办法就是将原来的 ROOT 文件夹删除或者重命名,再将 solo文件夹重命名为 ROOT,这样我们通过服务器 ip:8080 就能访问 Solo 了。
# mv /usr/local/tomcat/tomcat9/webapps/ROOT /usr/local/tomcat/tomcat9/webapps/ROOT-old
# mv /usr/local/tomcat/tomcat9/webapps/solo-v3.2.0 /usr/local/tomcat/tomcat9/webapps/ROOT
- 验证 Solo 博客是否部署成功
先打开 Tomcat 服务,然后通过本地浏览器访问服务器 IP:8080
# cd /usr/local/tomcat/tomcat9/bin/
# ./startup.sh
出现 Solo 的开始界面说明你的 Solo 博客就部署成功了,你就可以登录绑定你的 GitHub 账号开始写文章了。
Docker 部署
Docker部署的话是solo博客系统最推荐的方式,而且作者也是希望部署博客的用户都使用这种方式,因为对于后续的更新比较方便。使用Docker部署的话主要是以下的步骤:
- 配置java,前面介绍了,操作是一样的。
- 安装Docker,Docker 要求 Ubuntu 系统的内核版本高于 3.10,通过下面的命令查看内核版本安装
uname -r
确保你的内核版本要高于3.10,没有的话自己去更新内核。
安装docker的话也有两种方式:
- 直接安装,不过这种方式安装的docker可能不是最新版本,不是很推荐,通过命令:
apt-get install docker-io
来安装,通过命令service start docker
启动dockers,之后可以敲命令docker run hello-world
来去官方仓库下载hello-world镜像并运行,如果出现以下页面就表示成功:
- 通过添加官方源来安装最新版本的docker
(1)、首先卸载旧版本的docker,docker 的旧版本名称为:docker 、 docker-engine 或者 docekr-io。如果安装过旧版本的需要先卸载:
$ sudo apt-get remove docker docker-engine docker.io
(2)、安装最新版本的 Docker
最新版本的 Docker 分两个版本,docker-ce(Community Edition)和docker-ee(Enterprise Edition)。CE版本是免费的,如果我们学习或者一般应用,CE足够。我们安装社区版:由于docker安装需要使用https,所以需要使 apt 支持 https 的拉取方式。
(3)、安装 https 相关的软件包
$ sudo apt-get update # 先更新一下软件源库信息
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
(4)、 设置apt仓库地址
鉴于国内网络问题,强烈建议使用国内地址
添加 Docker 官方apt仓库(使用国外源)
执行该命令时,如遇到长时间没有响应说明网络连接不到docker网站,需要使用国内的
#添加 Docker 官方的 GPG 密钥(为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥)
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#设置稳定版本的apt仓库地址
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
添加 阿里云 的apt仓库(使用国内源)
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
( 5)、安装 Docker 软件
$ sudo apt-get update
$ sudo apt-get install docker-ce # 安装最新版的docker
如果要安装指定版本的docker,则使用下面的命令:
$ apt-cache policy docker-ce # 查看可供安装的所有docker版本
$ sudo apt-get install docker-ce=18.03.0~ce-0~ubuntu # 安装指定版本的docker
(6)、检查docker是否安装成功
$ docker --version # 查看安装的docker版本
$ docker run hello-world` #测试运行
- 安装完了docker之后,我们下一步需要的是安装数据库了,可能你就会有疑问了,我在服务器上安装了mysql啊,怎么又要安装了,这么说吧,服务器上的mysql是服务器上的,而docker中不使用服务器上的mysql,我们需要在docker上从官方仓库拉取mysql下来,这两个地方的mysql是不一样的,当然如果你选择用docker的方式安装mysql的话,那么服务器上可以不装mysql,下面就是在docker上安装mysql:(我装的是mysql5.6)
(1)、拉取镜像mysql:5.6
docker pull mysql:5.6
(2)、新建目录date,logs,conf用来映射docker上的mysql容器的一些配置,防止mysql容器占用内存过大。
mkdir -p /opt/mysql/data /opt/mysql/logs /opt/mysql/conf
data目录将映射为mysql容器配置的数据文件存放路径
logs目录将映射为mysql容器的日志目录
conf目录里的配置文件将映射为mysql容器的配置文件
(3)、运行镜像创建容器
$ cd /opt/mysql
$ docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.16
命令说明:
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
(4)、查看正在运行的容器
#通过命令检查mysql是否安装成功
docker images #这个命令会显示你docker上的所有镜像,比如现在估计你只有mysql和hello-world
#通过命令检查mysql是否在后台运行
docker ps #可以查看当前在运行的镜像
(5)、进入数据库,创建solo库
# docker安装的mysql默认允许远程连接,可以使用Navicat等软件连接数据库
# 进入容器mysql
docker exec -it mysql bash
# 进入数据库 p后面跟你的密码
mysql -uroot -pXXX
# 创建数据库(数据库名:solo;字符集utf8mb4;排序规则utf8mb4_general_ci)
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 出现Query OK, 1 row affected (0.00 sec)表示成功
#退出数据库
exit
#退出容器
exit
- 部署solo博客
直接运行以下命令
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" \
--rm \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=你的公网ip或域名 --server_port=
上面的命令仔细检查,免得出错,参数说明:
--env JDBC_PASSWORD=“123456” 将 123456 换成你的密码
--listen_port=8080 监听的端口
--server_scheme=http 请求方式,暂时使用 http,后面我们会换成 https
--server_host= 你的域名,如果你没有域名可以写 ip 地址
--server_port= 这里填你想映射的端口,http的话80和https的443可以不填,但不能注释,否则会导致静态资源无法加载。
--rm因为这个容器后面要删掉,带上rm 会省很多事,如果不带rm的话,那么后面你要删除这个镜像的话,首先你要删除它的容器,然后通过命令删除镜像:
docker rm 容器id #删除容器
docker rmi 镜像id #删除镜像
镜像id可以通过命令docker images
查看到。带上了rm的话,那么后面执行命令docker stop 镜像名
就会自动删除镜像,便于要修改配置。
命令成功执行没有报错的话,通过docker ps查看执行的容器列表中是否存在 Solo,存在这表示启动成功,直接访问你的域名加:8080 即可访问你的博客。
登录博客后台设置网站信息
最后可以输入你的公网ip访问你的网站了。首次访问时,需要初始化网站。你需要设置你的管理员帐号,然后开始初始化,Solo会自动在MySQL中建立数据库表。初始化成功后就自动进入你的网站了。
进入Solo后台管理控制台,进入"工具"->“偏好设定”,你可以修改你的网站名称等其他基本网站信息。
就这样,属于你的博客网站就已经基本搭建完成了。
拓展
因为写这博客的时候我还没有域名的申请,因此没有写出关于域名映射的内容,还有如果你想通过https的方式来配置你的博客的话,可以查看这篇文章:从零开始安装 solo 博客,因为我的这篇文章都是基于它的,它对于https方式的配置以及域名映射讲的比较详细。
最后,我的博客网站:http://47.96.147.37/(没有域名,么办法?)。