在今年年初的时候,完成了自己的一个Fame博客系统的实现,当时也做了一篇博文Spring-boot+Vue = Fame 写blog的一次小结,作为记录和介绍。从完成实现到现在,也断断续续的根据实际的使用情况进行更新。
只不过每次上线部署的时候都觉得有些麻烦,因为我的服务器内存太小,每次即使只更新了前台部分(fame-front)的代码,在执行npm build的时候都还必须把我的后端服务(fame-server)的进程关掉,不然会造成服务器卡死(惨啊)。
而且这个项目是前后端分离的,博客前台页面还为了SEO用了Nuxt框架,假如是第一次部署或者要服务器迁移的话,麻烦的要死啊,部署一次的话要以下步骤:
- 安装mysql,修改相关配置文件,设置编码时区等,然后重启
- 下载安装java,配置java环境
- 下载安装maven,配置maven环境
- 下载安装nginx,修改配置文件,设计反向代理等
- 启动spring-boot项目
- 打包vue项目npm install,npm run build等
- 启动nuxt项目,npm install,npm run start等
如果能够顺利的完成这七个步骤算是幸运儿了,假如中间哪个步骤报错出了问题,可能还要回头查找哪个步骤出了问题,然后又重新部署。
在这些需求面前,Docker就是解决这些问题的大杀器。无论是其虚拟化技术隔离各个容器使其资源互不影响,还是一致的运行环境,以及docker-compose的一键部署,都完美的解决了上述问题。
项目地址:https://github.com/zzzzbw/Fame
Docker和Docker-compose安装
Docker和Docker-compose的功能和使用可以看线上的一个中文文档Docker — 从入门到实践
下面是Centos7安装和配置Docker以及Docker-compose的shell脚本,其他操作系统可以参考修改来安装。其中Docker版本为docker-ce,Docker-compose版本为1.22.0
#!/bin/sh### 更新 ###yum -y update### 安装docker #### 安装一些必要的系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新 yum 缓存sudo yum makecache fast# 安装 Docker-cesudo yum -y install docker-ce# 启动docker并设置为开机启动(centos7)systemctl start docker.servicesystemctl enable docker.service# 替换docker为国内源echo '{"registry-mirrors": ["https://registry.docker-cn.com"],"live-restore": true}' > /etc/docker/daemon.jsonsystemctl restart docker# 安装dokcer-composesudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose# 安装命令补全工具yum -y install bash-completioncurl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose### 安装docker结束 ###
Docker化改造
改造后目录结构
先看一下改造后的项目的结构
├─Fame│ │ .env // docker-compose环境参数配置文件│ │ docker-compose.yml // docker-compose文件│ ├─fame-docker│ │ │ fame-front-Dockerfile // fame-front的Dockerfile文件│ │ │ fame-server-Dockerfile // fame-server的Dockerfile文件│ │ │ │ │ ├─fame-admin│ │ │ fame-admin-Dockerfile // fame-admin的Dockerfile文件│ │ │ nginx.conf // fame-admin的nginx服务器配置文件│ │ │ │ │ ├─fame-mysql│ │ │ fame-mysql-Dockerfile // mysql的Dockerfile文件│ │ │ mysqld.cnf // mysql的配置文件mysqld.cnf│ │ │ │ │ └─fame-nginx│ │ nginx-Dockerfile // 整个项目的nginx服务器的Dockerfile文件│ │ nginx.conf // 整个项目的nginx的配置文件│ │ │ ├─fame-admin // 博客管理后台,基于Vue+elementui│ ├─fame-front // 博客前端,基于Nuxt│ └─fame-server // 博客服务端,基于spring-boot
为了不破坏原有项目的结构,无论前端还是后端的docker的相关配置文件全部提取出来,单独放在了fame-docker文件夹中。
docker-compose.yml放在项目根目录下,直接在根目录运行命令:docker-compose up -d
[root@localhost Fame]# docker-compose up -dStarting fame-front ... Starting fame-admin ... Starting fame-front ... doneStarting fame-admin ... doneStarting fame-nginx ... done
就启动项目了,再也不用重复繁琐的步骤!
网友留言: