Linux 平台下部署管理 Java Web(war包) / J2SE(jar包) 项目的工具包。
- 如果你所在的公司是一个创业公司。
- 如果你所在的团队是公司里的一个小团队,公司并没有一个统一且完善的运维平台供各团队(部门)使用。
- 你是一个运维,每天有大量的重复性工作:
- 安装一个基础的 Java 运行环境。
- 将 Java 发布包(jar/war)包上传至服务器,并部署启动。
- 一台机器上部署多个 Java 项目,你经常要处理不同的项目之间相互影响的问题。
- 在某些糟糕的情况下,你需要回退至某个历史版本。
- 如果你自己尝试做一个小项目(或者是一个测试项目,或个人项目),需要快速部署到 Linux 下。
如果你处在以上情况(不仅限于此),但是没有容器化 docker 的想法或技术能力,那么你可以尝试一下 kael 来帮助你摆脱烦恼。
kael 由几个不同作用的主要组件构成,以下为不同组件的基本功能介绍:
- kael-pre-install。安装软件包的基础运行环境,如安装程序 nginx、tomcat、jdk,创建程序运行用户,规划程序运行的环境目录(程序包发布目录、日志运行目录、常用工具包目录等)。
- update。软件运维全生命周期:打包、上传、分发、发布、启停。
- package.sh。用于 java 打包。支持从 svn 更新代码,并打包。
- deploy.sh。将打好的包,部署至程序运行的正确目录。
- restart.sh。重启程序。若程序未运行,直接启动。
- mservice。独立 jar 包启停工具。(最初是团队转向微服务架构时,为了管理使用spring boot/spring cloud开发的jar包)
- bin/mservice.sh。启动、重启、停止 jar 包程序。
部署软件采用 nginx + java 的方式来运行。一台 Linux 主机上部署一个 nginx,但是可以同时部署多个 java 应用,每个 java 应用之间使用 linux 用户隔离。
多数情况下,工具包里的各个小工具(脚本),既可以在 linux 非root用户下执行操作,也可以在 root下执行操作,在 root 下控制指定用户下 java 应用的行为。
安装基础运行环境。在发布项目包之前,需要 Linux 用户以及 Java 环境。
下载 kael 安装包,必须使用 root 用户下载,建议目录:/root/kael。
git clone https://github.com/zenfery/kael.git
sh kael/kael-pre-install/init.sh
安装命令如下:sh kael/kael-pre-install/install.sh [type]
type 的可取值范围如下:
- -。即不带参数的情况,安装基础的用户环境。
- nginx。单独安装 nginx 应用。
- mservice。安装 jar 包类型应用环境,比如 SpringBoot 类应用。
- web。安装 Tomcat 应用环境。
不同的 type 需要将对应的安装包上传至
kael-pre-install/src/
目录下。所需要的安装包如下:
type | 安装包 |
---|---|
nginx | nginx-1.10.1.tar.gz pcre-7.9.tar.gz zlib-1.2.3.tar.gz ngx_cache_purge-2.3.tar.gz |
mservice | jdk-8u77-linux-x64.tar.gz |
web | jdk-8u77-linux-x64.tar.gz apache-tomcat-8.0.30.tar.gz |
注:安装包版本根据实际需要选择。
安装示例:
cd kael/kael-pre-install/
sh install.sh mservice
- jre/jdk 。执行命令
java -version
检查。
配置文件为:kael/mservice/conf/mservice.conf
配置参数含义:
- JAVA_HOME : (可选) JAVA_HOME,默认为当前环境配置。
- ENV_HOME : (可选) 项目部署的根目录,与 update 中的 ENV_HOME 一致。默认为 $HOME。
- JAVA_OPTS : (可选) JAVA运行参数。
- DOCS_HOME : (可选) 程序包最终运行部署的目录。默认为 $ENV_HOME/apps/docs。
- LOG_ENABLE : (可选) 是否使用脚本收集控制台日志输出。默认为开启,如需关闭设置为 false。
- LOG_FOLDER : (可选) 日志打印目录。默认为 $ENV_HOME/apps/logs。
-
LOG_FILENAME : (可选) 日志打印的文件。默认为
$LOG_FOLDER/logs/$ {APP_NAME}.log - APP_NAME : (可选) 应用程序名称。默认从发布目录中自动探测。
配置示例:
ENV_HOME=$HOME
LOG_ENABLE=false
JAVA_OPTS=" -Dspring.profiles.active=test -Dserver.port=9700 "
注意: 安装完 mservice 环境,记得根据实际情况修改这两个运行参数:spring.profiles.active、server.port。
目前只支持运行用户(非root)运行。
语法:sh kael/mservice/bin/mservice.sh start|stop|restart|status [<version>]
## 以下命令均在 test 用户下执行
# 启动服务 test
sh mservice.sh start
# 启动服务 test 的 1.0 版本
sh mservice.sh start 1.0
# 停止服务 test
sh mservice stop
# 重启服务 test
sh mservice.sh restart
sh mservice.sh restart 1.0
# 查看服务状态
sh mservice.sh status
某些工具需要一些依赖才能正常执行。
- (package.sh 依赖)svn 客户端工具。此工具为 package.sh 工具从 svn 上下载最新代码时使用。 执行命令
svn --version
检查是否正常安装。若未安装可参考以下命令:# centos yum install subversion -y
- (package.sh 依赖)maven客户端。此工具为 package.sh 工具构建打包java项目时使用。
配置文件为 kael/update/conf/env.conf
。
配置参数解释:
- EVN_HOME : 项目部署运行环境的根目录,多数情况下设置为运行用户的 HOME 目录。
- PROJECT_NAME : 项目的名称,多数情况下与用户的名称一致。
- SVN_DIR : 项目的 SVN 地址。(package.sh 依赖)
- SVN_USER : 项目的 SVN 用户。(package.sh 依赖)
- SVN_ENABLED : 项目是否启用SVN。(package.sh 依赖)
- GIT_DIR : 项目的 GIT 地址。(package.sh 依赖)
- GIT_BRANCH : 项目的 GIT 分支。(package.sh 依赖)
- GIT_USER : 项目的 GIT 用户。(package.sh 依赖)
- GIT_PASS : 项目的 GIT 密码。(package.sh 依赖)
- GIT_ENABLED : 项目是否启用GIT。(package.sh 依赖)
- MVN_PROFILE : mvn 命令打包时,使用的 Profile,若设置为 test,则
mvn clean package -Ptest
。 - EXEC_SLEEP_INTERVAL : 多步执行时,时间停顿,方便执行人员查看。
示例:
ENV_HOME="$HOME"
PROJECT_NAME=project-name
SVN_DIR="https://192.168.2.100/svn/trunk/test"
SVN_USER="user"
SVN_PASS="password"
MVN_PROFILE="common"
EXEC_SLEEP_INTERVAL=1
命令位置:kael/update/
。
-
package.sh 打包。打好的程序包会置于运行用户的目录
~/kael/update/release
下:# 项目用户执行 sh package.sh
-
deploy.sh 部署,运行部署后,程序包将会部署至运行用户的
~/apps/docs
目录下:-
root 用户执行语法:
sh deploy.sh <user> [<version>]
,user为 linux 用户,version 为 程序版本。执行此命令前,程序包应该上传至
/root/upload
或~<user>/kael/update/release/
目录下。# 部署项目 test sh deploy.sh test # 部署项目 test 的 1.0 版本 sh deploy.sh test 1.0
-
非 root 用户执行语法:
sh deploy.sh [<version>]
# 部署项目 test,在 test 用户下执行 sh deploy.sh # 部署项目 test 的 1.0 版本,在 test 用户下执行 sh deploy.sh 1.0
-
-
restart.sh 启停。
- root 用户执行语法:
sh restart.sh <user> [<version>]
。# 重启项目test sh restart.sh test # 重启项目 test 的 1.0 版本 sh restart.sh test 1.0
- 非root用户执行语法:
sh restart.sh [<version>]
#重启项目test,在test用户执行 sh restart.sh #重启项目 test的 1.0 版本,在test用户下执行 sh restart.sh 1.0
- root 用户执行语法:
基于 nginx 的灰度发布,一般会采用根据 cookie 或 ip 来进行灰度发布;如果每次上线都由运维来修改配置文件来进行灰度的话,不方便,并且增加了出错的概率。此灰度工具,仅仅是将修改配置文件的工作交由脚本来完成,避免手动带来的风险。
配置文件为 kael/gray/nginx/config
。
配置参数解释:
- NGINX_HOME : nginx 的安装目录。如: /usr/local/nginx。
- NGINX_SITES_DIR : nginx 的所有配置文件目录。如: ${NGINX_HOME}/conf/sites。
- NGINX_SBIN : nginx 的执行文件。如: ${NGINX_HOME}/sbin/nginx。
命令执行: kael/gray/nginx/gray.sh <cmd> <conf_name> [<gray_name>]
。
- cmd : 取值范围 start | recover | clear 。
- start : 开始灰度。
- recover : 结束灰度。恢复到原始状态。
- clear : 程序为了保险起见,会生成一些强制的备份文件。如果确定是安全的话,可以执行此命令,将其删除。
在使用灰度工具之前,需要提前准备发即将要灰度的配置文件。比如,需要灰度的配置文件为: nginx/conf/sites/test.conf,灰度配置文件可以有多个,如:nginx/conf/sites/test.gray.0,nginx/conf/sites/test.gray.import。那么 conf_name 则为 test,gray_name 即为 0 和 import。
命令示例:
# 针对 test 灰度 0
sh gray/nginx/gray.sh start test 0
# 针对 test 灰度 import
sh gray/nginx/gray.sh start test import
# 结束灰度
sh gray/nginx/gray.sh recover test
# 清理强制备份的配置文件
sh gray/nginx/gray.sh clear test
kael 工具包从 2.4 开始支持一鍵升级新版本。升级请先升级 root 用户下的 kael 工具包,再升级相应用户下。
# 查看当前版本
sh kael/version.sh
# 升级root下的版本
su - root
sh kael/upgrade.sh
# 升级用户 test 下的版本(在root用户下执行)
su - root
sh kael/upgrade.sh test