社区中 docker 部署 solo 的教程已经非常详尽,但是我之前部署的时候由于部分内容理解不够透彻,走了不少弯路。并且在社区中貌似找不到一个完善的将静态资源分离的教程,阿里云 1M 带宽跑起来是非常吃力的,特别是使用图片资源丰富的皮肤!因此,本文旨在帮助各位同僚分离静态资源,并给予使用静态文件部署博客的同僚一个启发。
关于安装 docker 这些暂时就不讲了,关于 docker 的操作命令可以看我另一篇文章。直接上 docker 部署的配置:

#!/bin/bash

#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
docker pull b3log/solo #拉取最新镜像
docker stop solo #停止容器,容器的名字必须和下文中的名字对应
docker rm solo #删除容器

# 下面这条命令的作用是创建并启动容器
# 加入--restart=always 参数可以在开机启动服务后自动启动容器 只需要设置开机自启docker服务即可实现开机自启docker容器。此脚本设置定时任务可以实现定时更新。
docker run --restart=always --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \	#数据库用户
--env JDBC_PASSWORD="root123" \ #数据库密码
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://localhost:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \ #数据库的连接地址,问号后面那一坨在jdbc驱动版本8以上是必须的
--volume ~/latke.properties:/opt/solo/latke.properties \ #此参数表示把docker容器内部的latke.properties文件挂载到当前用户家目录下,作用在于以后不管怎么升级镜像,都使用当前家目录下的配置文件中的配置。这些配置也可以直接用在docker参数中,个人比较懒,直接挂载
b3log/solo --listen_port=8080 --server_scheme=https --server_host=blog.jiangqiang.xin --server_port=

#如果不需要分离静态资源,下面几行都可以不需要
rm -rf /root/tmp/solo #删除之前备份的静态资源

docker cp solo:/opt/solo /root/tmp/solo &&./ossutil64 cp -rf /root/tmp/solo oss://blog--resource/solo-blog #前半句表示把容器内部的静态资源复制到宿主机,后半句表示把宿主机上的文件复制到对象存储中。在镜像更新后可以自动把静态资源更新到oss中。

使用方式:把上面内容保存到一个文本文件中,我取名为autoUpgrade.sh,然后添加执行权限chmod +x autoUpgrade.sh,最后设置定时任务即可,设置定时任务的方法百度搜索crontab。注意:ossutil64 是需要单独下载的一个工具,下载地址以及详细使用说明见这里

最后给出我挂载的latke.properties的配置作为参考:

#### Server ####
# Browser visit protocol
serverScheme=https #https协议,具体怎么添加证书配置,可以看我另一篇文章关于NGINX的配置
serverHost=blog.jiangqiang.xin #博客最后访问的域名
serverPort=80 

#### Runtime Mode ####
#runtimeMode=DEVELOPMENT
runtimeMode=PRODUCTION

#staticserverScheme=https
staticServerHost=resource.jiangqiang.xin/solo-blog #静态资源上传到oss之后的访问路径
staticServerPort=443 #访问静态资源的端口号

Q.E.D.


擅长前端的Java程序员