
视频地址: https://www.bilibili.com/video/BV1xz4y1k783/
下面的文档为上面的视频笔记;可以配合视频教程使用。
个人博客:https://lupf.cn
CSDN : https://lupengfei.blog.csdn.net/
本教程的最终目的,就是带大家解决搭建过程中的会遇到的问题;从0开始的一步步去构建;详细的讲解每一个步骤的创建过程。不管你是在校大学生、前端开发、后端开发。都可以轻松的将个人博客搭建起来。
gitbub地址:https://github.com/88250/solo
docker仓库地址:https://hub.docker.com/r/b3log/solo
solo是一个很轻量级的博客框架,搭建起来容易,一个服务,一个mysql就够了;
个人用了一年多,使用起来也比较的方便;
项目从10年开源,且作者对外宣称的是永久免费维护下去。所以也不用担心,用着用着,项目死了。
本教程所有的笔记,我会在个人博客里面整理成一篇文章;大家通过:https://lupf.cn 进入到博客;搜索 “ solo ”关键词即可看到;下面涉及到的每行指令;都会整理进去,方便大家自行搭建的时候使用。

image-20201122222723484
详细教程:基于VirtualBox搭建Linux(CentOS)虚拟机环境(学习必备技能)
详细教程:https://lupf.cn/articles/2019/11/23/1574503815568.html
创建目录
mkdir -p /opt/docker/mysql
下载镜像
docker pull mysql:5.7.13创建目录
mkdir -p /opt/docker/solo下载镜像
docker pull b3log/solo由于后面配置ssl证书的时候需要使用到一个朋友定制增强的一个nginx 所以这里一并给下载下来
创建目录
mkdir -p /opt/docker/nginx/conf/conf.d
mkdir -p /opt/docker/nginx/html
mkdir -p /opt/docker/nginx/logs
mkdir -p /opt/docker/ohttps-nginx/conf/conf.d
mkdir -p /opt/docker/ohttps-nginx/html
mkdir -p /opt/docker/ohttps-nginx/logs
下载镜像
docker pull nginx
docker pull ohttps/ohttps-nginx
查看下载的镜像
docker images
准备nginx的默认配置
docker run --name my-nginx -p 80:80 -d nginx
docker ps
docker cp f79:/etc/nginx/nginx.conf /opt/docker/nginx/conf/nginx.conf
docker cp f79:/etc/nginx/conf.d /opt/docker/nginx/conf
docker cp f79:/usr/share/nginx/html /opt/docker/nginx
docker cp f79:/etc/nginx/nginx.conf /opt/docker/ohttps-nginx/conf/nginx.conf
docker cp f79:/etc/nginx/conf.d /opt/docker/ohttps-nginx/conf
docker cp f79:/usr/share/nginx/html /opt/docker/ohttps-nginx
docker stop f79
docker rm f79
准备docker-compose.yml
version: "2"
services:
mysql:
container_name: solo-mysql
image: mysql:5.7.13
restart: always
volumes:
- /opt/docker/solo/mysql/data:/var/lib/mysql
- /opt/docker/solo/mysql/logs:/logs
- /opt/docker/solo/mysql/conf:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: "Asia/Shanghai"
command: --max_allowed_packet=32505856
solo:
container_name: solo
image: b3log/solo:latest
restart: always
ports:
- "8080:8080"
environment:
RUNTIME_DB: "MYSQL"
JDBC_USERNAME: "root"
JDBC_PASSWORD: "123456"
JDBC_DRIVER: "com.mysql.jdbc.Driver"
JDBC_URL: "jdbc:mysql://solo-mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"
command: --listen_port=8080 --server_port= --server_scheme=http --server_host=192.168.1.232
nginx:
container_name: solo-nginx
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/docker/nginx/html:/usr/share/nginx/html
- /opt/docker/nginx/logs:/var/log/nginx
启动服务
此时的启动肯定会报错 因为数据库还没有,还没有创建
docker-compose -f docker-compose.yml up
docker ps | grep mysql
docker exec -it 容器id /bin/bash
mysql -uroot -p
create database solo default character set utf8mb4 collate utf8mb4_general_ci;
create user 'root'@'127.0.0.1' identified by '123456';
grant all privileges on *.* to 'root'@'127.0.0.1';
flush privileges;
调整服务为后台进程
docker-compose -f docker-compose.yml up -d
停止并关闭服务
docker-compose -f docker-compose.yml down
测试本地方位
http://192.168.1.231:8080
上面运行的服务通过自身监听的端口已经可以访问了;由于默认是监听的8080端口;通常情况下我们是希望通过80或者443端口进行访问的;因此,在这里就部署一个nginx,并监听80或者443端口;然后通过反向代理代理到solo服务去;
进入配置文件目录
cd /opt/docker/nginx/conf/conf.d
添加配置文件
vim default.conf
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://solo:8080;
}
注册账号
添加chame记录
参考视频
生成证书
配置域名解析
参考视频
// 刷新dns指令
ipconfig /flushdns
添加部署节点(nginx)
调整docker-compose
第一处修改 solo服务,--server_scheme修改为https;--server_host=blog.writee.cn 第二处修改;nginx的镜像修改为ohttps/ohttps-nginx 第三处修改;设置nginx自动更新证书的id和token;上面步骤申请到的 第四处修改;修改持久化文件映射的路径
version: "2"
services:
mysql:
container_name: solo-mysql
image: mysql:5.7.13
restart: always
volumes:
- /opt/docker/solo/mysql/data:/var/lib/mysql
- /opt/docker/solo/mysql/logs:/logs
- /opt/docker/solo/mysql/conf:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: "Asia/Shanghai"
command: --max_allowed_packet=32505856
solo:
container_name: solo
image: b3log/solo:latest
restart: always
ports:
- "8080:8080"
environment:
RUNTIME_DB: "MYSQL"
JDBC_USERNAME: "root"
JDBC_PASSWORD: "123456"
JDBC_DRIVER: "com.mysql.jdbc.Driver"
JDBC_URL: "jdbc:mysql://solo-mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"
command: --listen_port=8080 --server_port= --server_scheme=https --server_host=blog.writee.cn
nginx:
container_name: solo-nginx
image: ohttps/ohttps-nginx
restart: always
ports:
- "80:80"
- "443:443"
environment:
PUSH_NODE_ID: "push-1xlpm40g5p85n9gz"
PUSH_NODE_TOKEN: "16d2e1584b25bf22888586a51ff86dcf"
volumes:
- /opt/docker/ohttps-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/docker/ohttps-nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/docker/ohttps-nginx/html:/usr/share/nginx/html
- /opt/docker/ohttps-nginx/logs:/var/log/nginx
重启服务
docker exec -t 容器id nginx -t
docker exec -t 容器id nginx -s reload
查看证书
docker ps | grep nginx
docker exec -it 容器id /bin/bash
cd /etc/nginx/certificates
ls
nginx配置域名及证书
vim blog.conf
server {
listen 80;
server_name blog.write.cn;
return 301 https://$server_name$request_uri;
}
server {
server_name blog.write.cn;
listen 443 ssl http2;
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate_key /etc/nginx/certificates/cert-9dxel0446w04j7o1/cert.key;
ssl_certificate /etc/nginx/certificates/cert-9dxel0446w04j7o1/fullchain.cer;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://solo:8080;
}
}