如何优雅的部署前后端项目?

1,656 阅读4分钟

前言

部署作为项目上线中的一道重要工序,随着CI/CD技术的成熟和兴起,正在变得越来越高频。这部分工作在一些大点的公司通常是由专门的运维工程狮或者项目主管负责。但是作为向往全栈实际全干的本狮来说,这方面的工作自然是少不了的啦!但是CI/CD那一套目前还没完全掌握(Tips: 哪位大佬要是会的话,希望互相交流一下。)那么问题来了:如何在不会CI/CD的情况下,优雅而快速的部署我们的前后端项目呢?下面我来讲讲我目前在用的一套方案,可能不是最好的,但也是我目前能总结出来的最好的方案了,如有纰漏欢迎斧正!

工具选择

  1. VS Code
  2. Alibaba Cloud Toolkit(插件,支持VSCode、IDEA、WebStrom等)
  3. 宝塔

项目技术

这套方案基本适用于各种前后端项目

部署流程

因为我日常开发主要使用Vuejs技术栈,所以这里就以Vue项目为案例介绍,其他项目流程也是一样的。

搭建环境

1. 首先,本地电脑需要安装VS Code

我日常开发用的是这个,你们就用自己最适合的编辑器就行

2. 在VS Code中安装Alibaba Cloud Toolkit插件

这个插件本质就是FTP+SSH服务,不过配置好可以简化流程就是了

3. 服务器需要安装宝塔系统

BT主要是为了项目管理方便,如果CentOS操作足够6的话,不安也没事

前端部署实操

1. 配置Alibaba Cloud Toolkit

Alibaba-cloud-toolkit配置

2. 配置Alibaba Cloud ToolkitDeployments

配置Alibaba Cloud Toolkit的Deployments

3. 如何添加Shell脚本

添加Shell脚本

4. 上面配置好后,以后想打包只需要点击运行Deployments中配置好的脚本即可

点击运行Deployments

点击运行Deployments输出

你以为到这里就结束了?No! No! No! 全栈(干)工程狮是不会止步于此滴!因为这才是真正的打工人!

后端部署实操

后端的开发工具IDEA也支持Alibaba Cloud Toolkit插件,配置一模一样,就不赘述了,不会的直接Google一下。下面重点说一下怎么利用Shell脚本来提高我们运行、停止、日志查看的操作

1. 配置Shell脚本eladmin

#!/bin/bash
# 把本脚本文件命名为你项目名,放在/root/bin目录下,则可以直接通过 项目名 [start|stop|restart|status|log]

# 这里可以替换为你项目的根目录
ROOT_PATH="/www/wwwroot/eladmin"
# 这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=eladmin-system-2.6.jar
# 这里可以替换为你想要输出的运行日志文件名
LOG_OUT=nohup.out

# 使用说明,用来提示输入参数
usage() {
	echo "Usage: sh 脚本名.sh [start|stop|restart|status|log]"
	echo "Tips: 把此脚本件命名为项目名[tip: eladmin ],放在/root/bin目录下,则可以直接通过 项目名[eladmin] [start|stop|restart|status|log]"
	exit 1
}

# 检查程序是否运行
is_exist() {
	PID=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' `
	# 如果不存在则返回1,存在返回0
	if [ -z "${PID}" ]; then
		return 1
	else
		return 0
	fi
}

# 启动方法
start() {
	is_exist
	if [ $? -eq "0" ]; then
		echo "${APP_NAME} is already running. PID=${PID} ."
	else
		nohup java -jar $ROOT_PATH/$APP_NAME > $ROOT_PATH/$LOG_OUT 2>&1 &
		echo "${APP_NAME} start successful!"
	fi
}
# 停止方法
stop() {
	is_exist
	if [ $? -eq "0" ]; then
		kill -9 $PID
	else
		echo "${APP_NAME} is not running."
	fi
}
# 输出运行状态
status() {
	is_exist
	if [ $? -eq "0" ]; then
		echo "${APP_NAME} is running. PID is ${PID}"
	else
		echo "${APP_NAME} is NOT running."
	fi
}
# 输出运行日志
log() {
	is_exist
	if [ $? -eq "0" ]; then
		tail -f $ROOT_PATH/$LOG_OUT
	else
		echo "${APP_NAME} is NOT running."
	fi
}
# 重启
restart() {
	stop
	start
}
# 根据输入参数选择对应方法执行,不输入则执行使用说明
case "$1" in
	"start")
		start
		;;
	"stop")
		stop
		;;
	"status")
		status
		;;
	"log")
		log
		;;
	"restart")
		restart
		;;
	*)
		usage
		;;
esac

2. 放置脚本到/root/bin目录下

这里讲讲为啥放到这里

主要是环境变量中配置了/root/bin,放到这个目录下就可以直接在全局命令行中执行我们脚本了。当然还有种曲线救国的办法,就是自建目录,然后在~/.bash_profile修改PATH,添加新建的目录。不过,我个人还是觉得直接放到/root/bin中方便。

3. 日常应用

由于我直接把上面的脚本命名为我的项目名eladmin,所以就直接可以用eladmin start启动项目;用eladmin stop停止项目;用eladmin log查看项目运行日志;用eladmin status查看运行状态。

小结

好像没有咋介绍BT啊?!

好吧,还是简单介绍一下宝塔控制面板吧。其实主要是觉得用BT管理数据库,部署项目,运行Shell啥的比较方便。

文件管理 Shell命令行 文本编辑器

其他的功能,有兴趣可以自行探索,不过有的同学还是喜欢直接用Shell操作,算是各有所爱吧,咱也不争辩。

小小结

今天的这个总结只是我之前开发中常用的一套流程。当然,后面还打算结合Git、GitLab、Docker等工具继续优化整个流程的效率。中间再加上git commit校验、Unit Test、ESList等等就很完美了,哈哈。。