前言

陌溪这次和小伙伴们来聊一聊蘑菇博客的部署,在经过项目的不断更新迭代,部署方式也是经历了多个阶段。分别是:手动部署Docker部署Docker-Compose部署。而在这两天,陌溪应小伙伴们的要求,继续简化部署流程,完成了使用 一条命令部署蘑菇博客 。下面,让我们一起来看看蘑菇博客部署方式的变化。

图片

手动部署

手动部署方式,指的就是在购买的云服务器上,手动安装 NginxElasticSearchRedisTomcatMysqlRabbitMQ 等软件。如下图所示,就是之前为了帮助小伙伴们快速搭建环境时写的一些文章。

图片

在Linux服务器手动安装中间件

能够看到在部署蘑菇博客的时候,需要安装的东西还是挺多的,因此在这个阶段小伙伴们也会遇到各种的疑难杂症,同时对于小白用户的体验也不太好,因此这种方式在使用过一段时间后就被抛弃了。

Docker部署

后面开始转向 Docker 方式部署,Docker 是一个虚拟环境容器,可以将开发环境,代码,配置文件等一并打包然后生成镜像,并发布到Docker对应的中央仓库 DockerHubDockerHub 有点类似于 Github,只不是一个是托管镜像的,另外一个是托管代码的平台。

Docker 部署,则是陌溪提前制作了一个具有蘑菇博客完整运行环境的 CentOS 镜像,也就是说我已经帮你把上面提到的 NginxRedis 等软件都手动安装好了,最后在做成一个完整可运行的镜像。

图片

DockerHub托管的蘑菇博客镜像

Docker 部署方式相比于手动部署,省去了用户在安装中间件的繁琐过程,同时也保证了运行环境的统一,小伙伴们用的环境和陌溪的是一样的,因此就算出现问题也非常容易排查。在 Docker 部署中,用户需要下载蘑菇博客源码,然后进行编译和打包,生成对应的 可执行 jar 包,然后发布到 Docker 容器中。同时还需要启动容器中已经安装好的软件即可。

使用Docker快速搭建蘑菇博客:

http://moguit.cn/#/info?blogOid=224

Docker-Compose部署

Docker 部署方式是采用单个Docker镜像来进行部署的,每次拉取一个超大型的镜像【大概 5G 】,如果在拉取镜像的时候,遇到网络卡顿等外界影响,很容易导致拉取失败,同时因为这种部署方式不太符合微服务架构的思想。

因此,后面我们将所有的服务制作成单个的镜像,然后通过docker compose 进行容器编排,来协调每个容器同时对外提供服务,同时提供了 Docker 容器的可视化管理工具 Portainer 进行管理,同时达到对服务容器化的目的,也为以后使用 K8S 集群管理蘑菇博客做了很好的铺垫~。

在使用 Docker-Compose 部署后,小伙伴只需要在具备 DockerDocker-Compose 环境的机器上,将部署脚本拖拽到服务器上即可。

图片

部署脚本目录

首先我们来查看一下 docker-compose 的目录结构,主要包含以下内容

  • bin:相关一键启动脚本的目录

  • completeStartup.sh:完整版启动脚本

  • completeShutdown.sh:完整版关闭脚本

  • kernStartup.sh:核心版启动脚本【只包含必要的组件】

  • kernShutdown.sh:核心版关闭脚本

  • update.sh:用于更新镜像【同步最新代码时使用】

  • config:存放配置文件

  • data:存放数据文件

  • log:存放日志文件

  • yaml:存放docker compose的yaml文件

在将部署脚本放到服务器上后,只需要给对应的脚本配置权限,然后执行 sh kernStartup.sh ,即可完成安装。

图片

下载的镜像

Docker-Compose 部署方式,陌溪已经将每个服务都单独制作成 Docker 镜像,同时托管在阿里容器镜像服务平台,小伙伴们在使用的时候只需要拉取镜像,然后运行即可,相比于第二种 Docker 部署方式,降低了源码编译和打包时消耗的时间,同时也能够更方便支持扩展。

DockerCompose一键部署蘑菇博客:

http://moguit.cn/#/info?blogOid=565

一条命令部署

最近有些小伙伴觉得用 Docker-Compose 在部署的时候还是有些麻烦。因为需要把部署脚本拷贝到服务器,同时还要安装 DockerDocker-Compose,以及在内存不够的时候,配置虚拟内存。这些能不能在精简一些,我想用一行命令就能搞定,然后我的表情就是…

图片

本着让小伙伴们少动手的原则,陌溪再次对脚本进行了改造,写下来一个终极部署脚本 moguInit.sh

终极部署脚本的原理也是比较简单,就是对用户的软件环境进行检测,如果某个所需的运行环境不存在的话,就会帮我们自动安装,下面是截取的 moguInit.sh 中的一部分代码。

#!/usr/bin/env bash

echo "############判断是否安装了docker##############"
if ! type docker >/dev/null 2>&1; then
    echo 'docker 未安装';
    echo '开始安装Docker....';  
    yum -y install docker-ce
    echo '配置Docker开启启动';
    systemctl enable docker
    systemctl start docker  
else
    echo 'docker 已安装';
fi

echo "############判断是否安装了dos2unix##############"
if ! type dos2unix >/dev/null 2>&1; then
    echo 'dos2unix 未安装';
    echo '开始安装dos2unix....';    
    yum -y install dos2unix*

else
    echo 'dos2unix 已安装';
fi

echo "############判断是否安装了docker-compose##############"
if ! type docker-compose >/dev/null 2>&1; then
    echo 'docker-compose 未安装';
    echo '开始安装docker-compose....';      
    wget https://mogublog-v2.oss-cn-guangzhou.aliyuncs.com/software/docker-compose-Linux-x86_64
    mv docker-compose-Linux-x86_64  docker-compose
    chmod +x docker-compose
    mv docker-compose /usr/local/bin/
    docker-compose -v
else
    echo 'docker-compose 已安装';
fi

在所有的环境都安装完成后,就会拉取我们的docker-compose 部署脚本。对,没错,就是上面提到的那个docker-compose 文件夹,只不过我已经将其打包放在阿里云OSS了,然后通过 wget 命令进行拉取,下面的命令其实就和第三种部署方式一样了,进行一系列的初始化后,执行一键部署脚本。

echo '创建docker网络';
docker network create mogu

echo '正在拉取一键部署脚本';
wget https://mogublog-v2.oss-cn-guangzhou.aliyuncs.com/software/docker-compose.zip
unzip docker-compose.zip

# 进入目录
cd docker-compose
# 添加执行权限
chmod +x bin/kernStartup.sh
chmod +x bin/kernShutdown.sh
chmod +x bin/update.sh
chmod +x bin/wait-for-it.sh

# 进入到bin目录
cd bin
# 修改编码
echo "修改编码...."
dos2unix kernStartup.sh
dos2unix kernShutdown.sh
dos2unix update.sh
dos2unix wait-for-it.sh

# 执行脚本
python2 replaceIp.py
sh kernStartup.sh

最后,陌溪把终极部署脚本放到了阿里云 OSS 上,因此,小伙伴在需要部署的时候,只需要在服务器执行下面这条命令即可。

wget https://mogublog-v2.oss-cn-guangzhou.aliyuncs.com/software/moguInit.sh && chmod +x moguInit.sh && sh moguInit.sh

该命令将自动执行陌溪写的 终极部署脚本 moguInint.sh,首先,开始检测运行所需的软件环境,如果不具备的话,将会安装对应的环境。然后,在下载对应的部署脚本,使用 docker-compose 进行容器编排,最后,完成博客的部署。

图片

开始进行环境检测

在所有操作都执行完成后,等待一段时间即可访问对应的服务了,如果服务器配置较低的话,可能等待时间会比较长。

图片

部署成功,耐心等待

同时也可以打开 nacos 页面,查看每个服务的启动情况。

Nacos图形化地址:http://your_ip:8848/nacos

图片

Nacos图形化界面

在所有服务都启动完成后,即可访问下面地址,完成蘑菇博客的部署

图片

前台地址:http://your_ip:9527

图片

后台地址:http://your_ip:9528

好了,到这里为止,我们使用一条命令就轻松完成了蘑菇博客的部署,我叫陌溪,我们下期再见~

图片

往期推荐

结语

陌溪是一个从三本院校一路摸滚翻爬上来的互联网大厂程序员。独立做过几个开源项目,其中蘑菇博客在码云上有 2K Star 。目前就职于字节跳动的Data广告部门,是字节跳动全线产品的商业变现研发团队。本公众号将会持续性的输出很多原创小知识以及学习资源。如果你觉得本文对你有所帮助,麻烦给文章点个「赞」和「在看」。同时欢迎各位小伙伴关注陌溪,让我们一起成长~
在这里插入图片描述
原作者:陌溪

原文链接:如何使用一条命令完成蘑菇博客的部署?

原出处:公众号-陌溪教你学编程

侵删

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐