Solo 博客搭建之路

森屿的博客 书富如入海,百货皆有! 本文由博客端 https://www.taosugar.com 主动推送

  开始正题

一、搭建方式概述

  本文介绍两种搭建方式,基于阿里云服务器通过 Tomcat 使用 war 包实现部署跟 Docker 部署(作者推荐)。为了方便部署和提高效率,我还使用了 Xshell 和 winScp 工具,基本所有的操作任务在这两个工具中都可以完成。下面将对两种方式分别介绍。

二、部署步骤概述

  1. 购买服务器
  2. 购买域名及备案
  3. 本地安装 XshellwinScp 工具;(部分网友推荐的 Xftp 也可以,我推荐使用 winScp 主要是免费)
  4. 安装依赖程序
  5. 安装博客程序
  6. 通过 GitHub 登录博客后台设置网站信息

三、具体内容

  1.购买云服务器并配置

  本人使用的是阿里云的服务器,相对来说维护比较方便,也无须自己去安装系统云服务器都是提供系统的,购买的时候选择需要的系统即可。因为云服务器的选择比较多此处就不在赘述具体购买过程,大家可以去详细咨询云服务商。假设你已经有服务器了并且系统为 Ubuntu18.04 那么请继续看下面。
  需要注意的是云服务器需要添加安全组规则,就是添加外部可以访问的端口。默认只开启了 22 端口。对于搭建网站,你必须要开通 80 端口,否则网站将无法访问。你可以开通其他端口,比如 MySQL 的端口,以便以后远程登录数据库查看数据。

  2.购买域名及备案

  服务器购买好后,你需要选择一个域名。这个不用多说,去阿里云旗下万网或者去腾讯旗下 DNSPod 购买一个。
  购买后,你需要进行备案。备案对于中国大陆的服务器是必须的,否则就算你域名解析成功了,也是会被和谐掉的,所以去阿里或者腾讯备案吧!建议谁家买服务器在谁家买域名!

  3.本地电脑安装 XShell 和 winScp 软件

  本地安装软件过程省略
  这里简单说一下工具的使用,这两个工具都是需要服务器打开 22 端口的,本人使用的阿里云服务器默认是打开的所以不需要在配置,如果是物理服务器则需要进行相关的配置点击查看具体操作方法
  首次连接时,建议记住密码,否则后期使用时,会经常让输入密码,很麻烦。

  4.安装依赖软件

  由于 Solo 是基于 Java 的开源博客系统,安装 Solo 之前,我们需要先安装如下依赖软件:

  1. Java

  2. MySQL

  3. Nginx

  4.1 安装 Java

  Java JDK 在 Linux 系统有两个版本,一个开源版本 OpenJDK,还有一个 Oracle 官方版本 JDK,Oracle JDK 既可以通过添加 ppa 源命令行安装,也可以去官网下载 JDK 压缩包安装。本文不着重介绍,只介绍手动下载压缩包安装 Oracle Java JDK。
  因为 Solo 是用 Java 开发的,我们要运行 Solo 必须的安装 Java 运行环境。在 Oracle 官网下载页面下载 Linux 版的 JDK 压缩包,然后上传到服务器。

	#此处我是在根目录下创建的文件夹你也可以选择其他目录创建
	sudo mkdir java

  将下载好的 JDK 压缩包用 winScp 上传到新创建的文件夹下

	sudo tar -zxvf jdk-8u241-linux-x64.tar.gz -C java
	sudo vi ~/.bashrc

  在文件末尾追加下面内容:

	#set oracle jdk environment
	export JAVA_HOME=/root/java/jdk1.8.0_241  #这里要注意目录要换成自		己解压的jdk 目录
	export JRE_HOME=${JAVA_HOME}/jre  
	export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
	export PATH=${JAVA_HOME}/bin:$PATH  
	sudo update-alternatives --install /usr/bin/java java /root/java/jdk1.8.0_241/bin/java 300
	java -version
  4.2 安装 MySQL

  Solo 使用两种持久层数据源 H2 内存 DB 跟 MySQL 个人建议使用 MySQL 数据库。如要使用 H2 内存 DB 请参考此处
  MySQL 建议使用 8.0 以上版本,当然 5.7-8.0 以上的版本都是是可以的。我个人使用 5.7 版本安装的时候出现了密码不正确的问题,经过确认是驱动类的问题,所以建议使用 8.0 避免出现驱动类的问题,因为 Solo 驱动类版本使用的较高低版本数据库可能因为驱动类的问题导致无法连接数据库。此问题在 docker 中的 5.7 数据库版本中未出现,问题比较玄学,以下介绍以 8.0 版本为主,稍后在 docker 安装数据库中再介绍 5.7 版本。

  4.2.1 进入官网下载

  进入官网点击 Downloads 进入下载页面,截止目前最新的版本为:mysql-apt-config_0.8.15-1_all.deb 。然后点如下图所示,就可以免登陆下载。
QQ 截图 20200405154545.png

  4.2.2 开始安装

将下载好的文件通过 winScp 上传到服务器任意目录下,使用命令进入文件存放的目录。

	sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb

QQ 截图 20200405155638.png

QQ 截图 20200405155802.png

	sudo apt update
	sudo apt-get upgrade
	sudo apt install mysql-server
	#中间会进行一次选择,输入“Y”即可继续。
	mysql -u root -p #输入密码进行验证

至此 MySQL 安装完成。

  4.2.3MySQL 配置远程访问
	mysql -uroot -p  #登录MySQL
	use mysql;
	select host from user where user='root';
	update user set host = '%' where user ='root';
	flush privileges;
	quit;
  4.3 安装 nginx

  Solo 会在自带的 Jetty 中运行,并默认监听 8080 端口,然而我们希望通过默认的 80 访问我们的网站,所以我们需要安装一个 Web server 来做请求转发。如果不想通过 nginx 反代想直接运行可以跳过此步骤,然后通过 docker 的端口映射实现 80 端口的访问。

	sudo apt install nginx
	service nginx start	#启动nginx
	service nginx reload	#重新加载nginx配置文件
	nginx -s reopen		#重启 Nginx
	nginx -s stop		#停止 Nginx
server {
    listen 443;
    server_name www.taosugar.com; # 改为绑定证书的域名
    # ssl 配置
    ssl on;
    ssl_certificate /etc/nginx/conf.d/taosugar.com.crt; # 改为自己申请得到的 crt 文件的路径
    ssl_certificate_key /etc/nginx/conf.d/taosugar.com.key; # 改为自己申请得到的 key 文件的路径
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://localhost:8080; # 做端口转发
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

  这样就把 https 配置好了,但访问网站加 www 和不加 www 是存在跨域的,还需要做一些重定向,这样不管怎么访问都是 https://www 打头,在 ssl.conf 里再追加:

server {
    listen 80;
    server_name www.taosugar.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}
server {
    listen 80;
    server_name taosugar.com;
    rewrite ^(.*)$ https://www.${server_name}$1 permanent; 
}
server {
    listen 443;
    server_name taosugar.com;
    rewrite ^(.*)$ https://www.${server_name}$1 permanent; 
}

这样不管访问以下哪个域名

  http://www.taosugar.com

  http://taosugar.com

  https://taosugar.com

都会跳转到 https://www.taosugar.com

最后重加载一下 nginx 的配置,大功告成...

	sudo service nginx reload

此处需要注意请务必配置

	proxy_set_header  Host $http_host;
	proxy_set_header  X-Real-IP $remote_addr;

不然访问会出现 502。此处可参考这篇文章至此 nginx 的配置就完成了。

  5.安装 Solo 主程序

  千呼万唤始出来,现在开始安装此次的主角 Solo 博客。之前也自己造过轮子但终究没成就大业,这次在众多的开源博客程序中选择了一款 Java 开源博客系统:Solo
  前面谈到过 Solo 开源博客在本文中会介绍两种部署方式下面进行分别介绍。

  5.1 部署到 Tomcat
	cd /usr/local/
	mkdir tomcat/
	cd tomcat/

或者通过 winScp 将在官网下载的压缩包文件上传到服务器刚刚创建的 Tomcat 文件夹。

   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
	 cd /usr/local/tomcat/tomcat/bin/
	 ./startup.sh
	#一般情况下,ubuntu安装好的时候,iptables会被安装上,如果没有的话先安装
	sudo apt-get install iptables
	#添加开放端口
	# sudo iptables -I INPUT -p tcp --dport [端口号] -j ACCEPT
	sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
	# 临时保存配置,重启后失效
	sudo iptables-save
	#安装 iptables-persistent工具,持久化开放端口配置
	sudo apt-get install iptables-persistent
	sudo netfilter-persistent save
	sudo netfilter-persistent reload

  Tomcat 服务默认开机不自启,系统重启后需手动开启服务。如需要开机自启 Tomcat 服务请自行度娘、Google 或者参考此篇文章

否则会出现配置错误的页面,具体可以看这里
  配置完成之后进入 Tomcat 的 bin 目录下重新启动 Tomcat 服务,然后我们就可以通过访问 ip:8080/solo 就能访问到博客的主页了,如果你想直接设置 ip:8080 访问的话,那么接下在我们要把 Tomcat 的访问目录换为 solo,最简单的办法就是将原来的 ROOT 文件夹删除或者重命名,再将 solo 文件夹重命名为 ROOT,这样我们通过服务器 ip:8080 就能访问 Solo 了。如果想通过不加端口的方式访问就需要修改 Tomcat 的配置文件。找到 Tomcat 的 conf 目录下,找到 service.xml 文件如下图所示:
QQ 图片 20200405185012.png
邮件用记事本或者使用 notpad++ 来打开找到下图所示的代码:
QQ 截图 20200405185303.png
port 改为 80 即可,然后重启 Tomcat 就可以直接通过域名访问不需要加端口,或者使用上面 nginx 配置,安装 nginx 使用 nginx 反向代理。

	#运行命令开启服务
	cd /usr/local/tomcat/tomcat9/bin/
	./startup.sh

  本地浏览器访问出现 Solo 的开始界面说明你的 Solo 博客就部署成功了,你就可以登录绑定你的 GitHub 账号开始写文章了。

  5.2Dcoker 部署

  Docker 部署的话是 solo 博客系统最推荐的方式,而且作者也是希望部署博客的用户都使用这种方式,因为对于后续的更新比较方便。使用 Docker 部署的话主要是以下的步骤:

	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"
 	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

  安装完了 docker 之后,我们下一步需要的是安装数据库了,可能你就会有疑问了,我在服务器上安装了 MySQL 啊,怎么又要安装了,这么说吧,服务器上的 MySQL 是服务器上的,而 docker 中不使用服务器上的 MySQL,我们需要在 docker 上从官方仓库拉取 MySQL 下来,这两个地方的 MySQL 是不一样的,当然如果你选择用 docker 的方式安装 MySQL 的话,那么服务器上可以不装 MySQL,下面就是在 docker 上安装 MySQL:(我装的是 mysql5.7)
  (1)、拉取镜像 mysql:5.7
docker pull mysql:5.7
  (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: /opt/mysql/conf -v $PWD/logs:/opt/mysql/logs -v PWD/data:/opt/mysql/data -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
	docker run --detach --name solo --network=host \
	--env RUNTIME_DB="MYSQL" \
	--env JDBC_USERNAME="你的用户名" \
	--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" \
	b3log/solo --listen_port=8080 --server_scheme=http --server_host=你的域名 --server_port=

上面的命令仔细检查,免得出错,参数说明:

  --env JDBC_PASSWORD=“123456” 将 123456 换成你的密码
  --listen_port=8080 监听的端口
  --server_scheme=http 请求方式,如果使用 nginx 需要将请求方式换成 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 即可访问你的博客。
  如果使用 nginx 的话建议先安装 nginx 然后再运行 Solo 博客,避免重复启动关闭 Solo。

  6. 登录博客后台设置网站信息

  最后可以输入你的公网 ip 访问你的网站了。首次访问时,需要初始化网站。你需要设置你的管理员帐号,然后开始初始化,Solo 会自动在 MySQL 中建立数据库表。初始化成功后就自动进入你的网站了。
  进入 Solo 后台管理控制台,进入"工具"->“偏好设定”,你可以修改你的网站名称等其他基本网站信息。
  就这样,属于你的博客网站就已经基本搭建完成了。

  更多关于 Solo 博客系统的可以访问开源社区点击了解更多

欢迎一起讨论

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • lonuslan

    这起码写了几个小时吧!厉害了。辛苦辛苦,加油!👍

    1 回复
  • PeterChu 1 赞同

    感谢、收藏、赞同、回帖,素质四连走一波

    1 回复
  • someone9891 1 评论

    @88250 语音预览的时候,像这样的连接直接跳过了,算不算 BUG?image.png

    感谢反馈,稍后尝试修复 :)
    88250
  • Eli

    感谢支持一起加油 😄

  • Eli

    一起努力 😋

  • codenow

    你好,我用 docker 搭建到第三步运行镜像创建容器时报错 docker: invalid reference format. See 'docker run --help'.,查了很长时间没找出原因,请问怎么解决呢

    1 回复
  • Eli

    方便的话 把你报错跟输入的命令截图一下 帮你看一下 😳

请输入回帖内容 ...