应用系统自动化部署
本次自动化建设是以官网系统重构的契机,实现公司J2EE应用服务统一标准化,自动化的初次尝试,希望借此推进公司各应用的标准化。
介绍
不规范不统一的部署,会给应用服务版本发布以及系统运维带来一些额外的成本,而故障恢复也需要一个统一且简单的操作以减少恢复时间,因此,规范应用服务的部署,并实现自动化是对项目的维护有至关重要的作用。
本次规范化包括:
“一服务”对应“一用户一运行环境”:应用服务目录,文件备份,日志生成,运行环境,运维用户,统一化和标准化。保证各个服务之间互相独立,互不影响。
应用服务自动化部署,实现持续集成,持续交付并通过自动化构建
软件包括:Gitlab、JDK、Maven、Jenkins、MySQL、Tomcat
机器规划如下:
机器IP | 软件 |
---|---|
1.110 | Git、Gitlab、Jdk、Maven、Git、Jenkins、MySQL |
1.111 | Tomcat、Jdk |
基础工具安装
unzip、zip、wget、tar、telnet、lrzsz
部署机器1.110
新建目录
文件夹 | 安装版本 | 说明 |
---|---|---|
/data/root/java | jdk-8u77-linux-x64.tar.gz | jdk安装目录,是tomcat运行环境 |
/data/root/jenkins | - | jenkins工作目录 |
/root/.jenkins | - | jenkins用户文档目录,该目录下plugins目录为插件安装目录,存放hpi安装插件 |
/data/root/maven | apache-maven-3.3.9-bin.tar.gz | maven安装目录,是jenkins构建maven项目必要支持软件 |
/data/root/tomcat | apache-tomcat-8.5.61.zip | tomcat安装目录,是jenkins运行环境 |
/data/root/tomcat/jenkins | Jenkins v2.276 | Jenkins安装目录 |
Git的安装
安装命令
yum install git
新建git用户
git config --global user.name "Jenkins"
git config --global user.email "[email protected]"
配置访问公钥
ssh-keygen -t rsa -C "[email protected]"
公钥位置:/root/.ssh/id_rsa.pub
Gitlab的安装
介绍
版本:gitlab-ce-10.7.1-ce.0.el6.x86_64.rpm
安装基础依赖
yum install -y curl policycoreutils-python openssh-server cronie
lokkit -s http -s ssh
安装gitlab
yum install gitlab-ce-10.7.1-ce.0.el6.x86_64.rpm
修改配置文件
vi /etc/gitlab/gitlab.rb
相关命令
gitlab-ctl stop //停止服务
gitlab-ctl reconfigure //刷新配置
gitlab-ctl restart //重启服务
配置用户
Jenkins/Jenkins1234/[email protected]
root/root1234
配置用户凭证
cat /root/.ssh/id_rsa.pub
将查询结果配置到gitlab的jenkins用户ssh上
配置Gitlab用户
导入项目,创建Jenkins
分支,并将Jenkins用户设置为stport项目的开发者:
http://192.168.1.110:9999/root/stport.git
Jdk的安装
介绍
版本:jdk-8u77-linux-x64.tar.gz
安装目录:/data/root/java
配置环境变量
vi /etc/profile
export JAVA_HOME=/data/root/java
export PATH=$PATH:$JAVA_HOME/bin
刷新系统环境配置
source /etc/profile
Maven的安装
介绍
版本:apache-maven-3.3.9-bin.tar.gz
安装目录:/data/root/maven
解压压缩包
tar -vxf apache-maven-3.3.9-bin.tar.gz
配置环境变量
vi /etc/profile
export MAVEN_HOME=/data/root/maven/apache-maven-3.3.9
export PATH=${PATH}:${MAVEN_HOME}/bin
刷新系统环境配置
source /etc/profile
修改maven配置文件
settings.xml
,修改仓库文件存在位置
GIT的安装
介绍
版本:version 1.7.1
安装命令
yum install git
Tomcat的安装
介绍
版本:apache-tomcat-8.5.61.zip
安装目录:/data/root/tomcat
MySQL的安装
介绍
版本:mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
安装目录:/data/root/mysql
数据库存放目录:/data/root/mysql/data
添加用户组
groupadd mysql
添加用户
添加用户mysql 到用户组mysql
useradd -g mysql mysql
用户授权
chown -R mysql:mysql /data/root/mysql/
安装依赖
yum install -y numactl yum install -y libaio-devel.x86_64
解压安装包
tar -vxf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.22-linux-glibc2.12-x86_64/ mysql
初始化数据库
/data/root/mysql/bin/mysqld --initialize --user mysql --basedir=/data/root/mysql --datadir=/data/root/mysql/data/
A temporary password is generated for root@localhost: icQrb-;Q8>>r
警告
初始化的过程会启动服务,但是由于采用默认配置,访问是有问题的
此处先关闭服务
ps -ef | grep mysqld kill -9 1987
[client] # 客户端设置,即客户端默认的连接参数
port = 3306 # 默认连接端口。默认是3306,可更改
socket=/data/root/mysql/data/mysql.sock # 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
character-set-server=utf8 # 设置mysql服务端默认字符集
[mysqld]
port = 3306 # MySQL监听端口。默认是3306,可更改
socket=/data/root/mysql/data/mysql.sock # 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
basedir=/data/root/mysql/ # MySQL安装根目录
datadir=/data/root/mysql/data # MySQL数据文件所在位置
default-storage-engine=INNODB # 默认存储引擎INNODB
max_connections=1400 # 最大连接数
collation-server=utf8_general_ci # 数据库默认字符集
lower_case_table_names=1 # 是否对sql语句大小写敏感,1表示不敏感
max_allowed_packet=128M # SQL数据包发送的大小,如果有BLOB对象建议修改成1G
explicit_defaults_for_timestamp=true # TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
skip-name-resolve # 解决远程访问慢的问题,必须等安装完成后才配置上(打开注释),否则第一次登陆会登陆不上
character-set-server=utf8 # 设置mysql服务端默认字符集
# 日志设置
#log_error = /data/root/mysql/data/error.log # 数据库错误日志文件
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
/data/root/mysql/bin/mysqld
/data/root/mysql/bin/mysql -uroot -p
alter user user() identified by "root";
update mysql.user set authentication_string=password('root1234'),password_expired='N' where user='root';
grant all on *.* to root@'%' identified by 'root1234' with grant option;
flush privileges;
ps -ef | grep mysqld
kill -9 1987
提示
解决远程访问慢
编辑配置文件
vi /etc/my.cnf
打开skip-name-resolve配置
# 解决远程访问慢的问题,必须等安装完成后才配置上(打开注释),否则第一次登陆会登陆不上
skip-name-resolve
重启服务
/data/root/mysql/bin/mysqld
提示
设置开机自启
cp /data/root/mysql/support-files/mysql.server /etc/init.d/mysql3306
修改参数
vim /etc/init.d/mysql3306
basedir=/data/root/mysql
datadir=/data/root/mysql/data
conf=/etc/my.cnf
$bindir/mysqld_safe --defaults-file=$conf --datadir=$datadir --pid-file=$server_pid_file
设置开机启动
chkconfig --add mysql3306
chkconfig --list
如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则键入
chkconfig --level 345 mysql3306 on
启动mysql服务
systemctl start mysql3306
检查端口是否被监听
netstat -na | grep 3306
注意
防火墙开放3306端口
编辑防火墙配置文件
vi /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<!-- 最主要添加下面这句 -->
<port protocol="tcp" port="3306"/>
</zone>
重启防火墙
systemctl restart network
其他
找到mysql.sock,放到/data/root/mysql/data
目录下 新建软连接:
ln -s /data/root/mysql/data/mysql.sock /tmp/mysql.sock show variables like '%lower_case_table_names%';
部署机器1.111
Tomcat的安装
介绍
版本:apache-tomcat-8.5.61.zip
目录文件:/data/stport/tomcat
配置文件:/data/stport/tomcat/settings.xml
Jdk的安装
介绍
版本:jdk-8u77-linux-x64.tar.gz
目录文件:/data/stport/java
应用规范化部署
规划
用户与组
组名称 | 组ID | 备注 | |
---|---|---|---|
staff | 600 | ||
用户名称 | 用户ID | 组 | 用户目录 |
601 | staff | /home/ | |
cxwh | 602 | staff | /home/cxwh |
应用目录结构
目录 | 属主/组 | 备注 |
---|---|---|
/data/ | {应用用户名}:staff | 应用存放目录 |
/data/{应用用户名}/java | {应用用户名}:staff | Jdk软件安装包存放目录 |
/data/{应用用户名}/tomcat | {应用用户名}:staff | tomcat安装包存放目录 |
/data/{应用用户名}/config | {应用用户名}:staff | 项目环境相关配置文件,一般是xxx.properties |
/data/{应用用户名}/application | {应用用户名}:staff | 当前运行版本的版本目录,采用软链接到release对应版本 |
/data/{应用用户名}/deploy | {应用用户名}:staff | 发版时文件存放位置 |
/data/{应用用户名}/release | {应用用户名}:staff | 应用文件发版后存放的位置 |
/data/{应用用户名}/tools | {应用用户名}:staff | 应用相关工具存放位置,例如版本发布脚本 |
/data/{应用用户名}/logs | {应用用户名}:staff | 应用,脚本日志目录 |
/data/{应用用户名}/temp | {应用用户名}:staff | 临时文件目录 |
/data/{应用用户名}/resource | {应用用户名}:staff | 数据文件等资源存放位置 |
/data/{应用用户名}/backup | {应用用户名}:staff | 备份目录 |
创建用户
结果
包名规范
包部署命名规范
所有的应用打包命名为:应用简称-版本号-日期-环境标识.war
应用简称:一般与应用用户名一致
版本号:x.x.x,x是整数,可以是两位
日期:格式是yyyymmdd
环境标识:与maven上的profile的id一致,一般是dev/sit/uat/prod,分别表示开发/集成测试/用户验收测试/生产
日志规范
包部署命名规范
基于tomcat的应用
Tomcat日志文件名:tomcat.应用简称.YYYYMMDD.log,以天为单位存储切割
应用日志文件名:应用简称.YYYYMMDD.log,以天为单位存储切割
应用部署
Jenkins持续集成、持续交付、自动化构建
方案说明
介绍
应用服务采取人工部署的方式,会使得运维工作开展时,需要了解不同应用的具体部署细节。为了提高效率和准确性,搭建一套自动化部署平台,将应用系统的部署发布流程做成自动化模式。这样在产线投产时,避免人工部署的情况,降低出错几率,加速发布流程。同时流程得以标准化,便于系统管理与日常运维。最后在应用系统的部署发布流程中,可以做到即使没有对应的应用系统的研发人员,运维人员也可自行发包,提高运维效率。
Jenkins搭建
Jenkins是一个标准的J2EE项目,使用tomcat进行部署运行即可,这里修改tomcat的配置文件server.xml,将jenkins作为默认的root项目
启动Tomcat并访问192.168.1.110:8888
创建用户:Jenkins/Jenkins
安装插件:/root/.jenkins/plugins
登录界面:
设置开机自启
export JAVA_HOME=/data/root/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/root/tomcat
export CATALINA_HOME=/data/root/tomcat
/data/root/tomcat/bin/startup.sh
配置工具
配置构建节点
配置项目构建的远程机器节点,首页-构建执行状态-新建节点:
配置运行节点
配置Publish over SSH
项目构建配置
说明
按照以下截图,新建Jenkins参数化构建项目,自动化构建将完成以下任务
- 项目指定分支代码拉取更新和构建
- 构建完成上传项目到指定机器进行部署
进行构建
进行构建,并自动完成项目的发布
工作空间自动生成结果
构建包被自动传到目标服务器上,执行自动化部署,项目的正常访问
批量删除构建
Jenkins可以通过脚本行批量删除历史构建,打开Jenkins-系统管理-脚本命令行,输入以下代码
def jobName = "10.14_sttb_sit" // 删除的项目名称
def maxNumber = 80 // 小于等于该编号的构建都将被删除
Jenkins.instance.getItemByFullName(jobName).builds.findAll {
it.number <= maxNumber
}.each {
it.delete()
}
其他
提示
- Jenkins新版本启动半英文半中文的解决方法,在tomcat的catalina.sh新增启动参数指定中文运行
JAVA_OPTS="$JAVA_OPTS -Duser.language=C.UTF-8"
应用系统
设置开机自启
vi /etc/rc.d/rc.local
,添加代码
export JAVA_HOME=/data/stport/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/stport/tomcat
export CATALINA_HOME=/data/stport/tomcat
su - stport -c /data/stport/deploy/autostart.sh
/bin/su - stport -c "/data/stport/deploy/autostart.sh"
centos7需要修改rc.local
为可执行chmod +x /etc/rc.d/rc.local
,若Linux环境重启,则应用系统将以stport
用户启动
提示
当Linux环境重启,若应用系统重启时遇到问题:
java.lang.IllegalStateException: Cannot run without an instance id.解决:
[root@streport ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 streport
克隆系统之后的修改:
[root@sttb data]# vi /etc/hosts
[root@sttb data]# vi /etc/rc.d/rc.local
修改目录权限:
chown -R 777 dirname
修改目录用户组:
chown -R root:root dirname
修改密码:
passwd user
删除用户:userdel -r stport
cat /etc/sysconfig/iptables
查询占用大小
du -sh /data/datascreen
恢复域名解析
iptables -D OUTPUT -m state --state NEW -j DROP
关闭域名解析
iptables-restore < /etc/sysconfig/iptables
1 系统运行脚本
autostart.shcatLog.shclear.shdeploy.shpsTomcat.shrestart.shstop.sh
2 系统tomcat替换文件
tomcat 400页面隐藏版本号信息
修改server.xml文件:context中添加
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
kkfileview,服务器本机启动需要访问openoffice,openoffice需要访问自身的2001和2002端口,否则无法启动,或者启动后上传文件预览异常
解压kkFileView-4.1.0-SNAPSHOT.tar.gz
tar -xvf kkFileView-4.1.0-SNAPSHOT.tar.gz
执行install.sh全自动安装
./install.sh
设置开机自启
vim /etc/rc.d/rc.local,内容为:
rm -rf /data/kkFileView/bin/kkFileView.pid
export JAVA_HOME=/data/root/java
export PATH=.:/data/root/tools:$JAVA_HOME/bin:$PATH
/data/kkFileView/bin/startup.sh
系统历史执行过的命令增加时间记录
vi ~/.bash_profile
HISTTIMEFORMAT="%F %T "
export HISTTIMEFORMAT
source ~/.bash_profile
history