参考链接 [链接] [链接] 搭建前提 购买服务器 购买域名(可不买) 域名解析与备案 为服务器安装系统 安装 docker 我的系统,Centos7.3 #使用yum更新仓库 yum update #安装docker yum -y install docker #启动 Docker 后台服务 service dock ..

利用 solo 搭建个人博客

参考链接 从零开始安装 solo 博客
solo github

搭建前提

安装 docker

我的系统,Centos7.3

#使用yum更新仓库
yum update

#安装docker
yum -y install docker

#启动 Docker 后台服务
service docker start

#测试运行 hello-world
docker run hello-world

出现 hello world 就证明安装正常了

安装 MySQL

版本随意,我这里选择的 5.6,你可以选择更高版本的,这个没关系,不影响使用

# 安装mysql:5.6,直接docker run 他会自动去官方镜想下载
# MYSQL_ROOT_PASSWORD=你的数据库密码
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

# docker安装的mysql默认允许远程连接,可以使用xshell等软件连接数据库
# 进入容器mysql
docker exec -it mysql bash

# 进入数据库 p后面跟你的密码
mysql -uroot -p123456

# 创建数据库(数据库名: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=www.rainsheep.top

上面的命令建议手敲,免得出错,参数说明

命令成功执行没有报错的话,通过docker ps查看执行的容器列表中是否存在 solo,存在这表示启动成功,直接访问你的域名加:8080 即可访问你的博客,http://www.rainsheep.top:8080
如果你尚在备案中,你可以收藏本帖,后面等备案通过了在研究后面的部分。
如果你不想使用 nginx 也不想升级 https,那么你可以先执行docker stop solo,然后将上面--listen_port=80808080换成80,然后去掉--rm,再执行一次就 ok。

进入网页可能会出现 Latke 配置错误,如果要配置 nginx 反代理的话不需要管,配完就好了
如果不配置反代理的话,在后面加上参数--server_port=8080或者--server_port=80,与前面监听端口一致

安装 nginx

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

上面的dockerData可以换成自己喜欢的名字

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

如果你没有备案,可以将上面的80:80换成8081:80,因为这个东西一会儿也要删掉,所以加上--rm参数,命令执行玩后通过docker ps查看 nginx 是否在运行,在运行的情况下访问你的域名加端口号查看是否正常安装,80直接省略。访问出现 Welcome to nginx!表示成功。

导出配置文件

docker run -d -p 80:80 --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/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

新建欢迎界面

# 打开项目文件 
cd /dockerData/nginx/www 
# 使用vim 创建并编辑文件
vim index.html 
# 此时我们会进入vim界面,按 i 插入,然后输入 
<h1>Hello Docker-Nginx</h1> 
# 输入完后,按 esc,然后输入 :wq  

访问域名,可看到 Hello Docker-Nginx

申请 ssl 证书,将 http 升级为 https(可跳过)

申请完 ssl 证书以后,下载证书
最后把Nginx下的两个文件上传至服务器/dockerDat/nginx/ssl目录下

我的两个证书名字为3118615_rainsheep.top.pem3118615_rainsheep.top.key

配置 nginx 配置文件

cd /dockerData/nginx/conf/conf.d 
vim default.conf

参考我的配置,配置自己的 default.conf 文件

server {
    listen       443;
    server_name  localhost;
    ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    ssl_certificate /ssl/3118615_rainsheep.top.pem;			#两个证书文件的名字
    ssl_certificate_key /ssl/3118615_rainsheep.top.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;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
server{
	listen 80;
	server_name localhost;
	rewrite ^(.*) https://$host$1 permanent;
}

由于我们现在用的 nginx 容器并未监听 443 端口,所以需要删除现在的容器,重新启动一个新的 nginx 容器

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

访问查看,正常访问

访问不到的话,可能是配置文件错了,仔细核对,docker logs nginx查看日志,docker ps查看是否运行。

将 solo 通过 nginx 方向代理实现 https 访问

让 solo 还是跑在 8080 端口上,通过 nginx 代理到 443 端口即可,由于我们上面启动 solo 时添加了--rm参数,只需要docker stop solo即可自动删除 solo 容器,然后我们重新启动一个 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" \
b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.rainsheep.top --server_port=

然后我们去配置 nginx 配置文件,实现 nginx 反向代理

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

重启 nginx,docker restart nginx
访问成功。
此处附上我最后的配置文件
default.zip

启用 Lute

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=https --server_host=www.rainsheep.top --server_port= --lute_http=http://127.0.0.1:8249

测试代码是否高亮。
教程结束。

solo 自动更新脚本

利用 crontab 运行脚本自动更新,脚本名 docker-solo-update.sh

#!/bin/bash
isUpdate=$(docker pull b3log/solo|grep "Downloaded")
if [ -z  $isUpdate ]
then
	echo This is the latest version
else
	docker stop solo
	docker rm 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" \
	b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.rainsheep.top --server_port= --lute_http=http://127.0.0.1:8249
fi

使用方法:
chmod 777 docker-solo-update.sh
crontab -e
写入
0 3 * * * bash /root/docker-solo-uodate.sh
运行
crontab -l
查看是否插入成功


#使用yum更新仓库
yum update

#安装docker
yum -y install docker

#启动 Docker 后台服务
service docker start

#测试运行 hello-world
docker run hello-world

出现 hello world 就证明安装正常了

安装 MySQL

版本随意,我这里选择的 5.6,你可以选择更高版本的,这个没关系,不影响使用

# 安装mysql:5.6,直接docker run 他会自动去官方镜想下载
# MYSQL_ROOT_PASSWORD=你的数据库密码
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

# docker安装的mysql默认允许远程连接,可以使用xshell等软件连接数据库
# 进入容器mysql
docker exec -it mysql bash

# 进入数据库 p后面跟你的密码
mysql -uroot -p123456

# 创建数据库(数据库名: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=www.rainsheep.top

上面的命令建议手敲,免得出错,参数说明

命令成功执行没有报错的话,通过docker ps查看执行的容器列表中是否存在 solo,存在这表示启动成功,直接访问你的域名加:8080 即可访问你的博客,http://www.rainsheep.top:8080
如果你尚在备案中,你可以收藏本帖,后面等备案通过了在研究后面的部分。
如果你不想使用 nginx 也不想升级 https,那么你可以先执行docker stop solo,然后将上面--listen_port=80808080换成80,然后去掉--rm,再执行一次就 ok。

进入网页可能会出现 Latke 配置错误,如果要配置 nginx 反代理的话不需要管,配完就好了
如果不配置反代理的话,在后面加上参数--server_port=8080或者--server_port=80,与前面监听端口一致

安装 nginx

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

上面的dockerData可以换成自己喜欢的名字

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

如果你没有备案,可以将上面的80:80换成8081:80,因为这个东西一会儿也要删掉,所以加上--rm参数,命令执行玩后通过docker ps查看 nginx 是否在运行,在运行的情况下访问你的域名加端口号查看是否正常安装,80直接省略。访问出现 Welcome to nginx!表示成功。

导出配置文件

docker run -d -p 80:80 --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/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

新建欢迎界面

# 打开项目文件 
cd /dockerData/nginx/www 
# 使用vim 创建并编辑文件
vim index.html 
# 此时我们会进入vim界面,按 i 插入,然后输入 
<h1>Hello Docker-Nginx</h1> 
# 输入完后,按 esc,然后输入 :wq  

访问域名,可看到 Hello Docker-Nginx

申请 ssl 证书,将 http 升级为 https(可跳过)

申请完 ssl 证书以后,下载证书
最后把Nginx下的两个文件上传至服务器/dockerDat/nginx/ssl目录下

我的两个证书名字为3118615_rainsheep.top.pem3118615_rainsheep.top.key

配置 nginx 配置文件

cd /dockerData/nginx/conf/conf.d 
vim default.conf

参考我的配置,配置自己的 default.conf 文件

server {
    listen       443;
    server_name  localhost;
    ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    ssl_certificate /ssl/3118615_rainsheep.top.pem;			#两个证书文件的名字
    ssl_certificate_key /ssl/3118615_rainsheep.top.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;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
server{
	listen 80;
	server_name localhost;
	rewrite ^(.*) https://$host$1 permanent;
}

由于我们现在用的 nginx 容器并未监听 443 端口,所以需要删除现在的容器,重新启动一个新的 nginx 容器

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

访问查看,正常访问

访问不到的话,可能是配置文件错了,仔细核对,docker logs nginx查看日志,docker ps查看是否运行。

将 solo 通过 nginx 方向代理实现 https 访问

让 solo 还是跑在 8080 端口上,通过 nginx 代理到 443 端口即可,由于我们上面启动 solo 时添加了--rm参数,只需要docker stop solo即可自动删除 solo 容器,然后我们重新启动一个 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" \
b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.rainsheep.top --server_port=

然后我们去配置 nginx 配置文件,实现 nginx 反向代理

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

重启 nginx,docker restart nginx
访问成功。
此处附上我最后的配置文件
default.zip

启用 Lute

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=https --server_host=www.rainsheep.top --server_port= --lute_http=http://127.0.0.1:8249

测试代码是否高亮。
教程结束。

solo 自动更新脚本

利用 crontab 运行脚本自动更新,脚本名 docker-solo-update.sh

#!/bin/bash
isUpdate=$(docker pull b3log/solo|grep "Downloaded")
if [ -z  $isUpdate ]
then
	echo This is the latest version
else
	docker stop solo
	docker rm 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" \
	b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.rainsheep.top --server_port= --lute_http=http://127.0.0.1:8249
fi

使用方法:
chmod 777 docker-solo-update.sh
crontab -e
写入
0 3 * * * bash /root/docker-solo-uodate.sh
运行
crontab -l
查看是否插入成功


过程中需要用到的 docker 命令
docker ps 查看运行的容器
docker ps -a 查看所有容器
docker stop id||name 停止容器
docker rm id||name 移除容器
docker logs 容器名 查看容器日志

  • Solo

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

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

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

    924 引用 • 7008 回帖 • 664 关注
2 回帖
请输入回帖内容...
  • csfwff

    🤔 🤔 🤔 亲,按你的 nginx 配置真的能访问到你的博客咩

  • yanglongqi

    额 我今天刚配完 留个教程。.....主要自己看