solo开源个人博客搭建记录

部署概述

安装docker --> docker安装mysql --> docker安装solo --> docker安装nginx -->docker安装lute如果不做https的话,只在本地测试,那么其实又MySQL和solo就够了,不需要nginx,nginx的作用只是将https请求代理至solo

solo开源个人博客搭建记录_第1张图片
架构大概就上面这样,访问流量通过公网到系统网络,再到docker网桥,然后访问nginx 443端口,nginx将流量转到本地的80端口,solo监听在80端口,然后solo通过JDBC协议访问MySQL数据库,nginx,solo,MySQL都是用的主机网络,所以在主机上都会监听对应端口。

安装docker
docker分为企业版(docker-ee)和社区版(docker-ce),阿里的Centos镜像源默认是docker-1.13,我们使用的是docker社区版,docker-ce-18.06是18年6月发布的,目前大多数企业都使用的这个版本,或者是docker-ce-18.09.

  • 添加docker镜像源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 查看所有docker-ce版本
    yum list all --showduplicates docker-ce

  • 安装docker-ce-18.06

yum install docker-ce-18.06.1.ce-3.el7
  • 启动docker并设置为开机自启动
systemctl start docker
systemctl enable docker
  • 准备镜像
docker pull b3log/solo
docker pull mysql:5.6
docker pull nginx
docker images   #查看

安装MySQL

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

-p 8306:3306:8306是宿主机监听的端口,3306是MySQL容器监听的端口,因为我机器上有WordPress,所以80``3306是被占用的,所以换了一个,如果你本机3306端口没有被占用,就都写成3306就好

  • 创建数据库
# 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

docker安装solo

  • 如果你本机的80端口被占用了,可以用下面命令启动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:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"  \
b3log/solo --listen_port=8088 --server_scheme=http --server_host=192.168.16.4 --server_port=8088

参数说明

--env JDBC_PASSWORD="123456" 将 123456 换成你的密码
--listen_port=8088 容器监听的端口
--server_scheme=http 请求方式,暂时使用 http,后面我们会换成 https
--server_host=192.168.16.4 你云主机的IP,如果你有域名可以写域名
--server_port=8088 云主机监听的端口
注意:listen_port的端口要和server_port端口一致,不然进入网页可能会出现 Latke 配置错误
命令成功执行没有报错的话,通过docker ps查看执行的容器列表中是否存在 solo,存在这表示启动成功,直接访问你的公网IP加:8088 即可访问你的博客,http://180.76.112.111:8088
  • 如果要使用https,就需要修改一下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:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"  \
solo \
--listen_port=8080 \
--server_scheme=https \
--server_host=vlog.issue98.com \
--server_port=

–server_scheme=https使用https协议,因为使用了https协议,所以就要配置nginx代理

docker安装nginx

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

dockerData/nginx 用于存放 docker 下 nginx 自定义文件
dockerData/nginx/conf存放 nginx 配置文件
dockerData/nginx/log 存放 nginx 日志文件
dockerData/nginx/www 存放 nginx 访问的资源文件
dockerData/nginx/ssl 存放 ssl 证书

  • 启动 nginx
docker run --name nginx -p 8001:80 -d --rm nginx
由于solo使用了宿主机的80端口,所以这里使用宿主机的8001端口
  • 导出配置文件
docker cp nginx:/etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf 
#导出配置文件 nginx.conf
docker cp nginx:/etc/nginx/conf.d /dockerData/nginx/conf/conf.d 
#导出配置文件 nginx.conf

执行docker stop nginx,会自动删除现在的 nginx 容器,然后执行如下命令

  • 启动一个 nginx 容器
docker run -d -p 80:80 -p 443:443 --name nginx-1 \
-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配置文件
server {
    listen       443;
    server_name  vlog.issue98.com;
    ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    ssl_certificate /ssl/vlog.pem;          #两个证书文件的名字
    ssl_certificate_key /ssl/vlog.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 / {
        proxy_pass http://vlog.issue98.com:8080;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
server{
    listen 80;
    server_name vlog.issue98.com;
    rewrite ^(.*) https://$host$1 permanent;
}

下载证书,nginx类型,然后放到dockerData/nginx/ssl目录下,名字和nginx配置文件里的匹配
docker 启用LUTE

  • 获取最新镜像
docker pull b3log/lute-http
  • 启动容器
docker run --detach --rm --network=host b3log/lute-http
  • 停止 solo
docker stop solo
  • 删除 solo
docker rm solo

运行下列命令,重启 solo,注意最后添加–lute_http=http://127.0.0.1:8249
如果你已经修改了solo的配置,添加了自己的文章等,不想丢失数据,可以用docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]命令来保存solo镜像到本地

例如

docker commit e044f5c083cc solo-vlog:0.1
# 然后启动的时候将b3log/solo换成solo-vlog:0.1就行,CONTAINER可以通过docker ps来查看

启动LUTE

docker run --detach --name solo-lute --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:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
solo-sibo:0.2 \
--listen_port=8080 --server_scheme=https --server_host=vlog.issue98.com \
--server_port= \
--lute_http=http://127.0.0.1:8249

你可能感兴趣的:(杂谈)