Docker 方式部署 Solo 博客系统全流程

本贴最后更新于 1954 天前,其中的信息可能已经沧海桑田

今天新搭建了博客系统,作为自己的主页,用于记录所见所闻所学。Solo 是 t 专为程序员提供的开源博客系统,可在自己的服务器中部署和维护,同时拥有大量精美皮肤可拱选择,无广告下载源码后可以进行二次开发。界面样式可参考这个博客进行预览。想了解具体的博客系统也可以去 Solo 官网了解!官方的部署文档。下面是我以 Docker 方式部署 Solo 系统的总结以及流程。

一、步骤概述

1、部署环境;
2、下载 Xshell 工具;
3、服务器安装配置 MySQL 数据库;
4、服务器安装 Docker;
5、通过 Docker 获取镜像并创建运行;
6、配置 Nginx 反向代理;

二、具体内容

1. 搭建简介

本教程是基于阿里云香港服务器通过 Docker 方式部署,操作系统使用 CentOS,数据库使用的是 MySQL(国内服务器需要备案,否则不可以部署网页)。为了方便部署使用了 xshell 工具,所有操作都可以用该工具完成。

2. 购买云服务并配置

本人选择的是阿里云轻量服务器,相对来说便于维护,系统也能一建装好。腾讯云、阿里云、华为云服务器的部分的部分都可以部署。购买好云服务器后需要安装 CentOS7 系统。

3. 本地电脑安装 XShell 软件

XShell 是功能强大的终端模拟器,这里是下载地址。下载完成后一路安装,新建会话填入 IP 地址,连接服务器输入账号密码时建议点保存。

##4. 安装配置 MySQL 8
首先我们通过 wget 下载 MySQL 官网提供的安装包,这里可以直接使用 wget 命令进行下载。
$ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
下载完成后,使用 yum 方式进行安装。yum 命令是 Linux 中的一种安装软件的方式,-y 表示在安装所遇到所有的询问,都默认选择“是”。install 表示安装动作。
安装 MySQL 命令:
$ yum -y install mysql80-community-release-el7-3.noarch.rpm
注册 MySQL 服务命令:
$ yum -y install mysql-community-server
执行启动服务命令:
$ systemctl start mysqld.service
此时 MySQL 已经开始运行,但是想要进入 MySQL 需要找出 root 用户随机初始化的密码,通过如下命令可以找出密码:
$ grep "password" /var/log/mysqld.log
获得的信息为
2019-08-12T09:06:30.715432Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: FatS0b%vhoM>
提取出密码 FatS0b%vhoM>
下面根据 Root 用户名和密码登陆服务(建议直接复制粘贴,自己输入容易输错,linux 下输入密码时,不会显示出字符,但是实际已经输入,输入完毕后按 Enter 登陆:
$ mysql -u root -p
此时已经登陆成功,输入一下命令更改初始密码,切记输入所有 sql 命令时不要忘记分号,且新密码需要满足:同时包含大小写字母、数字、符号,将 新密码 替换为你的密码。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
更改完服务密码后,新建一个数据库用户:
username:创建的用户名
password:创建的密码
host:指定该用户在哪个主机上可以登陆,使用通配符 %
创建用户命令:
mysql> CREATE USER 'username'@'host' IDENTIFIED BY 'password';
默认新建用户的加密规则是 caching_sha2_password 方式,有些客户端不支持,所以修改为 mysql_native_password 方式:
mysql> alter user 'username'@'host' identified with mysql_native_password by 'password';
完成以上操作后推出 MySQL 并重启服务:


mysql> \q // 退出SQL
$ service mysqld restart // 重启SQL服务

重复上面的登陆命令步骤,用新用户登录 MySQL 并手动建库(库名 solo,字符集使用 utf8mb4,排序规则 utf8mb4_general_ci)。
CREATE DATABASE solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
到此,数据库部分已完成。

4. 服务器安装 docker

Docker 要求 CentOS 系统内核版本高于 3.10,查看本页面的前提条件来验证你的 CentOS 内核是否支持 Docker。
通过 uname -r 命令查看你当前的内核版本 root 权限登陆 CentOS。若内核版本过低,执行命令 yum update 确保 yum 包更新到最新。(阿里云自带是最新的)
下面是安装所需要的软件包
yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的命令。
$ yum install -y yum-utils device-mapper-persistent-data lvm2
设置 yum 源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装最新稳定版 Docker
$ yum install docker-ce
启动 Docker
$ systemctl start docker
加入开机启动
$ systemctl enable docker
验证安装是否成功,如果跳出版本信息则成功
$ docker version

5. 通过 Docker 获取 Solo 镜像

$ docker pull b3log/solo

6. 创建容器并运行

下面的代码按行输入 \ 未输入完,可分行输入。
--listen_port:进程监听端口(如果是小白就填 8080)
--server_scheme:最终访问协议,如果反代服务启用了 HTTPS 这里也需要改为 https
--server_host:最终访问域名或公网 IP,不要带端口(有域名就填域名)
--server_port:最终访问端口,使用浏览器默认的 80 或者 443 的话值留空即可(http 为 80,https 为 443,小白建议不填)

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" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=

如果想要查看 docker 是否运行,可以使用命令 docker ps

7. nginx 安装配置

使用 yum 安装 nginx:
$ yum install nginx
开启 nginx 服务:
$ service nginx start
查看 nginx 状态:
$ systemctl status nginx

切换到/etc/nginx/conf.d/ 目录下:
$ cd /etc/nginx/conf.d/
新建一个 blog.conf 配置文件:
$ touch blog.conf
进入 blog.conf 编辑状态:
$ vim blog.conf
insert 键输入内容*****替换为你的网址

server {
  listen 80;
  server_name www.*******.com;

  location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

Esc 键后,键盘直接输入 :wq 保存并退出。
输入 vim /etc/nginx/nginx.conf 在 http 块下,insert 加入一行
include /etc/nginx/conf.d/*.conf; 保存并退出 :wq
检查配置文件是否正确:
nginx -t
重载 nginx 配置文件
service nginx reload
配置 host 解析后即可通过域名访问,如果配置 nginx 出错会报 Latke 配置错误的信息。

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 3 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • jnuff-u

    [root@instance-u9qp3u5c docker]# docker run --detach --name solo --network=host \

    --env runtime_db="MYSQL"
    --env jdbc_username="root"
    --env jdbc_password="*****"
    --env jdbc_driver="com.mysql.cj.jdbc.Driver"
    --env jdbc_url="jdbc:
    b3log/solo --listen_port=8099 --server_scheme=http --server_host=localhost --server_port=8099
    efe161ac24ecbf779d39322ae399f431bf59db284ee9c8222deba06faf561510

    [root@instance-u9qp3u5c docker]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    [root@instance-u9qp3u5c docker]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    efe161ac24ec b3log/solo "java -cp WEB-INF/..." 10 seconds ago Exited (255) 9 seconds ago solo

    [root@instance-u9qp3u5c docker]# docker logs efe161ac24ec
    [ERROR]-[2019-08-31 18:15:09]-[org.b3log.solo.Starter:128]: Latke init failed, please configure latke.props or run with args, visit https://hacpai.com/article/1492881378588 for more details

    latke 启动配置有了,启动不成功...