[图片] 很早之前就开始关注 solo 了,非常喜欢这套精美的个人博客。所以当时将项目 Git 到本地搭建了一套本地的环境,出于工作原因也没有太多的时间去整理和记录一些东西到博客中来。这段时间计划把这个博客搞起来,以后多记录些用过的技术做回顾参考用。下面就我个人搭建 solo 的过程以及其中遇到的问题做个记录。 1.准 ..

个人 solo 博客搭建过程

很早之前就开始关注 solo 了,非常喜欢这套精美的个人博客。所以当时将项目 Git 到本地搭建了一套本地的环境,出于工作原因也没有太多的时间去整理和记录一些东西到博客中来。这段时间计划把这个博客搞起来,以后多记录些用过的技术做回顾参考用。下面就我个人搭建 solo 的过程以及其中遇到的问题做个记录。

1.准备工作

当然,如果只是单纯的想了解 solo 博客的话,可以在本地搭建一套环境即可使用。

服务器

最近阿里云在做活动,优惠力度非常大,可以购买一个自己觉得合适的服务器。配置的话如果只挂 Solo,买最低配 1G1 核 1M 即可。由于搭建 solo 需要用到 docker,建议在选择服务器的系统版本时勾选 CentOS7.0 以上的版本。购买服务器后,在服务器的安全组中添加配置规则。开放如下端口:80、443、3306、8080。
安全组规则.png
新增规则.png

域名

比起使用 ip 访问来讲,使用域名来访问的会显得比较专业。买域名可选择的服务商有很多,如果服务器是购买的阿里云的,这里域名也是首推阿里云,在后面的备案会比较方便。然后和服务器一起便于管理。
购买域名时挑选自己喜欢的就行。也是比较幸运,我买的时候发现我的。cn 域名还在。
购买域名后,域名需要进行 实名认证 ---> DNS 解析 ---> 域名备案。全部搞定之后,域名才能正常的使用。建议使用 https 安全协议来访问域名,还是那句话“显得更加专业”。这个时候就需要去申请 SSL 证书了。申请成功后即可下载对应的 SSL 证书,这里我们选择 Nginx。
SSL.png
SSL证书.png
SSL证书下载.png
PS:DNS 解析需要新增解析记录,一般进入之后会有指引按钮,点击创建即可。这一步没有做的话,会导致之后的 nginx 无法解析域名从而启动失败。
DNS解析.png

2.安装部署

准备工作都完成了之后,就可以进行 solo 博客的安装部署环节了。

Docker(已经安装 Docker 的可跳过该环节)

首先安装 Docker,前面要求系统版本一定是要在 CentOS7.0 以上的版本,就是因为 Docker 的环境必须使用高于 3.10 的内核版本,否则 Docker 无法正常运行。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
sudo yum install docker-ce
# 开机自启
sudo systemctl enable docker 
# 启动docker服务  
sudo systemctl start docker
docker version

创建或修改配置文件

vi /etc/docker/daemon.json
{ 
	"registry-mirrors": ["http://ef017c13.m.daocloud.io"],
	"live-restore": true
}

也可以使用命令直接更改(建议使用)

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
sudo systemctl restart docker
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Portainer.png
看着还不错,功能也蛮齐全的,安利一波。

至此 Docker 安装配置完成

安装 MySQL

MySQL 最新版本为 8.X,建议安装较为稳定的 5.6 或 5.7 的版本。这里我选择的是 Mysql5.7.28。

docker pull mysql:5.7.28
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:5.7.28
docker ps -a
docker exec -it mysql bash
# 进入数据库 p后面跟你的密码
mysql -uroot -pyourpassword
# 创建数据库(数据库名:solo;字符集utf8mb4;排序规则utf8mb4_general_ci) 
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;  
# 创建solo用户
CREATE USER 'solo'@'ip' IDENTIFIED BY 'password';
# 赋予solo用户solo数据库的所有权限
GRANT ALL ON solo.* to 'solo'@'ip' IDENTIFIED BY 'password';
flush privileges;
# 出现Query OK, 1 row affected (0.00 sec)表示成功
#退出数据库
exit
#退出容器
exit

至此 MySQL 安装配置完成。

安装 Solo

终于到主角了。直接运行以下命令会自动 pull solo 的镜像并启动。

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="password" \
--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=www.chenyangjie.com.cn

参数说明:

启动成功后即可通过域名或 ip:8080 访问 solo 博客了。首次访问 solo 博客会进行初始化。初始化完毕后即可使用,使用方法参照Solo用户指南

安装 Nginx

Nginx 这块我不太熟,这里参照下大佬的安装过程。建议查看从零开始安装 solo 博客

# 切换到服务器根目录
cd /
# 创建主目录
mkdir dockerData
# 创建文件
mkdir dockerData/nginx dockerData/nginx/conf dockerData/nginx/logs dockerData/nginx/www dockerData/nginx/ssl

启动 Nginx

docker run --name nginx -p 80:80 -d --rm nginx

Nginx 启动成功并能正常访问后导出配置文件

停止 Nginx 服务

docker stop nginx 
# 会自动删除现在的 nginx 容器,然后执行如下命令重新启动一个 nginx 容器

将之前下载的NginxSSL证书中的 pem 文件和 key 文件放至dockerData/nginx/ssl目录下。
然后配置 Niginx 文件

cd /dockerData/nginx/conf/conf.d
vim default.conf
server {
    listen       443 ssl;
    server_name  localhost;
    # ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    ssl_certificate /ssl/2998600_www.chenyangjie.com.cn.pem;  # ssl 证书目录
    ssl_certificate_key /ssl/2998600_www.chenyangjie.com.cn.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    # ......
}
server{
  listen 80;
  server_name localhost;
  rewrite ^(.*) https://$host$1 permanent;
}

启动新的 Nginx,并使用 https 协议访问

docker stop nginx  # 停止容器
docker rm nginx # 删除容器
# 启动新的
docker run -d -p 80:80 -p 443:443 --name nginx \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/ssl:/ssl/ \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

使用 Nginx 反向代理实现对 solo 的访问

停止 solo,并移除 solo 容器(同样可以通过 Portainer 进行操作)

docker stop solo
docker rm solo

配置 Nginx 配置文件实现 Nginx 反向代理

cd /dockerData/nginx/conf/conf.d
vim default.conf
location / {
        proxy_pass http://www.chenyangjie.com.cn:8080;
    }
# 替换上面部分即可
# 按esc,然后输入:wq保持退出

重启 solo 容器

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="password" \
--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=https --server_host=www.chenyangjie.com.cn --server_port=

重启 Nginx

docker restart nginx

如果每一步都成功了的话,个人的 solo 博客就搭建完成了。

后记

很早之前就开始关注 solo 了,非常喜欢这套精美的个人博客。所以当时将项目 Git 到本地搭建了一套本地的环境,出于工作原因也没有太多的时间去整理和记录一些东西到博客中来。这段时间计划把这个博客搞起来,以后多记录些用过的技术做回顾参考用。下面就我个人搭建 solo 的过程以及其中遇到的问题做个记录。

1.准备工作

当然,如果只是单纯的想了解 solo 博客的话,可以在本地搭建一套环境即可使用。

服务器

最近阿里云在做活动,优惠力度非常大,可以购买一个自己觉得合适的服务器。配置的话如果只挂 Solo,买最低配 1G1 核 1M 即可。由于搭建 solo 需要用到 docker,建议在选择服务器的系统版本时勾选 CentOS7.0 以上的版本。购买服务器后,在服务器的安全组中添加配置规则。开放如下端口:80、443、3306、8080。
安全组规则.png
新增规则.png

域名

比起使用 ip 访问来讲,使用域名来访问的会显得比较专业。买域名可选择的服务商有很多,如果服务器是购买的阿里云的,这里域名也是首推阿里云,在后面的备案会比较方便。然后和服务器一起便于管理。
购买域名时挑选自己喜欢的就行。也是比较幸运,我买的时候发现我的。cn 域名还在。
购买域名后,域名需要进行 实名认证 ---> DNS 解析 ---> 域名备案。全部搞定之后,域名才能正常的使用。建议使用 https 安全协议来访问域名,还是那句话“显得更加专业”。这个时候就需要去申请 SSL 证书了。申请成功后即可下载对应的 SSL 证书,这里我们选择 Nginx。
SSL.png
SSL证书.png
SSL证书下载.png
PS:DNS 解析需要新增解析记录,一般进入之后会有指引按钮,点击创建即可。这一步没有做的话,会导致之后的 nginx 无法解析域名从而启动失败。
DNS解析.png

2.安装部署

准备工作都完成了之后,就可以进行 solo 博客的安装部署环节了。

Docker(已经安装 Docker 的可跳过该环节)

首先安装 Docker,前面要求系统版本一定是要在 CentOS7.0 以上的版本,就是因为 Docker 的环境必须使用高于 3.10 的内核版本,否则 Docker 无法正常运行。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
sudo yum install docker-ce
# 开机自启
sudo systemctl enable docker 
# 启动docker服务  
sudo systemctl start docker
docker version

创建或修改配置文件

vi /etc/docker/daemon.json
{ 
	"registry-mirrors": ["http://ef017c13.m.daocloud.io"],
	"live-restore": true
}

也可以使用命令直接更改(建议使用)

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
sudo systemctl restart docker
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Portainer.png
看着还不错,功能也蛮齐全的,安利一波。

至此 Docker 安装配置完成

安装 MySQL

MySQL 最新版本为 8.X,建议安装较为稳定的 5.6 或 5.7 的版本。这里我选择的是 Mysql5.7.28。

docker pull mysql:5.7.28
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:5.7.28
docker ps -a
docker exec -it mysql bash
# 进入数据库 p后面跟你的密码
mysql -uroot -pyourpassword
# 创建数据库(数据库名:solo;字符集utf8mb4;排序规则utf8mb4_general_ci) 
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;  
# 创建solo用户
CREATE USER 'solo'@'ip' IDENTIFIED BY 'password';
# 赋予solo用户solo数据库的所有权限
GRANT ALL ON solo.* to 'solo'@'ip' IDENTIFIED BY 'password';
flush privileges;
# 出现Query OK, 1 row affected (0.00 sec)表示成功
#退出数据库
exit
#退出容器
exit

至此 MySQL 安装配置完成。

安装 Solo

终于到主角了。直接运行以下命令会自动 pull solo 的镜像并启动。

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="password" \
--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=www.chenyangjie.com.cn

参数说明:

启动成功后即可通过域名或 ip:8080 访问 solo 博客了。首次访问 solo 博客会进行初始化。初始化完毕后即可使用,使用方法参照Solo用户指南

安装 Nginx

Nginx 这块我不太熟,这里参照下大佬的安装过程。建议查看从零开始安装 solo 博客

# 切换到服务器根目录
cd /
# 创建主目录
mkdir dockerData
# 创建文件
mkdir dockerData/nginx dockerData/nginx/conf dockerData/nginx/logs dockerData/nginx/www dockerData/nginx/ssl

启动 Nginx

docker run --name nginx -p 80:80 -d --rm nginx

Nginx 启动成功并能正常访问后导出配置文件

停止 Nginx 服务

docker stop nginx 
# 会自动删除现在的 nginx 容器,然后执行如下命令重新启动一个 nginx 容器

将之前下载的NginxSSL证书中的 pem 文件和 key 文件放至dockerData/nginx/ssl目录下。
然后配置 Niginx 文件

cd /dockerData/nginx/conf/conf.d
vim default.conf
server {
    listen       443 ssl;
    server_name  localhost;
    # ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    ssl_certificate /ssl/2998600_www.chenyangjie.com.cn.pem;  # ssl 证书目录
    ssl_certificate_key /ssl/2998600_www.chenyangjie.com.cn.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    # ......
}
server{
  listen 80;
  server_name localhost;
  rewrite ^(.*) https://$host$1 permanent;
}

启动新的 Nginx,并使用 https 协议访问

docker stop nginx  # 停止容器
docker rm nginx # 删除容器
# 启动新的
docker run -d -p 80:80 -p 443:443 --name nginx \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/ssl:/ssl/ \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

使用 Nginx 反向代理实现对 solo 的访问

停止 solo,并移除 solo 容器(同样可以通过 Portainer 进行操作)

docker stop solo
docker rm solo

配置 Nginx 配置文件实现 Nginx 反向代理

cd /dockerData/nginx/conf/conf.d
vim default.conf
location / {
        proxy_pass http://www.chenyangjie.com.cn:8080;
    }
# 替换上面部分即可
# 按esc,然后输入:wq保持退出

重启 solo 容器

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="password" \
--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=https --server_host=www.chenyangjie.com.cn --server_port=

重启 Nginx

docker restart nginx

如果每一步都成功了的话,个人的 solo 博客就搭建完成了。

后记

该文章仅供他人参考以及自身回顾作用,如有问题请指出,即刻进行修改。
技术参考:
Docker(一)Linux开启你的Docker之旅
linux安装docker
从零开始安装 solo 博客

  • Solo

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

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

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

    924 引用 • 7008 回帖 • 664 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    281 引用 • 667 回帖 • 576 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    479 引用 • 484 回帖 • 826 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    231 引用 • 440 回帖 • 601 关注
5 回帖
请输入回帖内容...
  • LetmeQuadrakill

    没有搭建成功。..我太笨了 😰

  • chips

    是在哪一步出了问题吗?

  • chips

    也有可能文档写得还不够详细。..

  • LetmeQuadrakill

    也没显示什么错,就是打开网页不显示

  • chips

    看日志吧,如果你配置了 Nginx 反向代理的话,页面不显示应该是 Nginx 启动出现了问题。如果是按照我这上面用 docker 搭建的,通过 Portainer 可以查看各个容器的日志。