在对于编程知识了解的还是一知半解的时候,类似于部署项目这种话术在我看来是陌生并且伴随着恐惧的,那种恐惧来源于未知。所以,在学会的现在,做一个总结记录。这篇博客自然也就是针对和当时的那个我水平差不多的同学的,大佬们可以略过了。
所谓项目部署,其实是分项目和部署两个部分,那么项目就是代码构建的一个系统,就像学生管理系统啊什么的,但是代码只能在你电脑上,也就是本地运行,并且还得打开对应的开发工具,那么部署就很好的解决并相对完美的解决了这么麻烦的问题。首先你要学会什么是客户端和服务器,然后明白,你平时访问就是客户端,那么你的代码就被打包放到了服务器上一直运行着,所以你才能访问到。废话结束。步骤如下(以springboot项目为例):
前后端不分离的项目:
手动部署:
1、通过maven 的 package命令,将项目打包成jar包
2、在linux服务器上,安装相应的软件,jdk,mysql,redis等等
3、将jar包放到服务器上。然后后台运行jar包。
4、客户端访问项目。结束!
自动部署:
这个就不是自己去做了,那么自动部署需要做的准备工作就是将自己的代码放到git上,并且在linux上安装git,然后在服务器上写一段自动部署的脚本。直接执行脚本就可以自动拉取代码、打包、运行。
前后端分离的项目:
除了服务器部署好之后,还需要用到nginx的反向代理。
安装部分:
安装包简介
二进制发布包
软件已经针对具体平台编译打包发布,开发人员拿到安装包之后只要解压,修改配置即可使用
源码包
此种安装包软件以源码工程的形式发布,需要程序员自行编译安装,它一般包含四个步骤:解压------>配置------->编译-------->安装
RPM包
这种包是redhat已经按照包管理规范对软件进行打包之后发布出来的一类包,对于rpm包的安装,有两种方式: 1 直接下载rpm包,然后使用rpm命令安装[A --> B--> C] 2 采用yum命令联网安装[它会自动联网下载rpm包]
rpm命令安装 语法: rpm 参数 安装包 参数: -v 显示指令执行过程 -h 表示显示进度 -q 查询包是否已经安装 -a 查看所有安装的软件 -i 安装软件 -U 更新升级 -e 卸载软件 --nodeps 不验证软件的相互关联性 常用命令: 安装:rpm -ivh rpm文件 [不重要 rpm -ivh reggie.rpm] 升级:rpm -Uvh rpm文件 [不重要 rpm -Uvh reggie.rpm] 卸载:rpm -e --nodeps 软件名 查看所有安装的软件:rpm -qa | grep 具体名
yum安装 软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上的rpm软件,并且会自动解决软件安装过程中的库依赖问题。 yum install 软件名 (yum install ksh) yum localinstall rpm包 使用yum安装本地rpm包[此过程会自动解决依赖]
安装JDK
官方提供的是二进制安装包
#1 解压
tar -zxvf /usr/local/src/jdk-8u181-linux-x64.tar.gz -C /usr/local/
#2 测试
/usr/local/jdk1.8.0_181/bin/java -version
#3 配置环境变量
# 如果想在系统的任何位置都能使用到java命令,就需要将其配置到环境变量文件,此文件位置在/etc/profile,
# 使用vim打开配置文件
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
#4 更新配置文件
source /etc/profile
#5 测试
java -version
安装MySQL
官方提供的是rpm包
#1 查看CentOS是否自带的mysql
rpm -qa | grep -i mysql
rpm -qa | grep -i mariadb
#2 卸载mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64#3 安装依赖包 [复制]
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
#4 升级包依赖 [复制]
yum install libgcc.i686 -y
#5 安装服务端
yum localinstall /usr/local/src/MySQL-server-5.5.49-1.linux2.6.i386.rpm -y
#6 安装客户端
yum localinstall /usr/local/src/MySQL-client-5.5.49-1.linux2.6.i386.rpm -y
#7 启动mysql服务器
systemctl start mysql
#8 设置root用户密码
/usr/bin/mysqladmin -u root password 'root'
#9 防火墙放行端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
#10 开启mysql的远程登录权限
#使用mysql客户端登录mysql,然后修改远程连接设置[下面的>不要复制 ,注意修改成自己windows中数据库的密码]
mysql -uroot -proot
> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
> FLUSH PRIVILEGES;
> exit;
#11 MySQL编码问题
# Mysql安装完毕后默认的字符集为ISO-8859-1,需要在配置文件中修改成UTF-8,并重启服务
# 查找mysql的配置文件
find / -name 'MySQL*'
# 将文件复制到/etc目录下,并重新命名为my.cnf(这是服务启动时默认读取的位置)
cp /usr/share/doc/MySQL-server-5.5.49/my-medium.cnf /etc/my.cnf
# 编辑/etc/my.cnf,在[mysqld]选项下添加字符集的设置
vim /etc/my.cnf
[mysqld]
character-set-server=utf8
# 重新启动mysql的服务
#12 服务重启
systemctl restart mysql
安装Redis
官方提供的是源码包
#1 安装需要的依赖[复制]
yum install gcc automake autoconf libtool make -y
#2 解压
tar -zxvf /usr/local/src/redis-3.0.7.tar.gz -C /usr/local/src/
#3 编译
cd /usr/local/src/redis-3.0.7/
make
#4 安装
make PREFIX=/usr/local/redis install
#5 添加配置文件, 将redis配置文件复制到redis的安装目录的bin目录下
cp /usr/local/src/redis-3.0.7/redis.conf /usr/local/redis/bin/
#6 修改配置文件, 编辑配置文件,将redis服务修改成后台运行
vim /usr/local/redis/bin/redis.conf
将daemonize no选项修改成daemonize yes
设置bind为 bind 0.0.0.0
#7 启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
#8 防火墙放行端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
#9 [非必要操作]关闭Redis
# 查看运行的redis进程
ps -ef | grep redis
# 杀掉redis的进程
kill -9 2738[此处是redis进程号]
项目部署
环境确认
现在我们已经安装好了项目运行所需要的所有软件,接下来就可以进行项目部署了,
在部署之前一定要再次确定,所有有的软件是否全部启动,这是可以使用查看端口的命令
netstat -an
。
数据库迁移
① 将本地数据导出成sql文件
② 将sql文件导入服务器中的数据库
后台运行jar包命令:
nohup java -jar /usr/local/reggie-web-manage-1.0-SNAPSHOT.jar --server.port=9090 > /opt/reggie-web-manage.log &
放行端口
使用下面命令,放行防火墙项目的tomcat端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload
在程序部署完毕之后,为了项目安全,应该关闭掉除了tomcat之外所有端口
[root@localhost opt]# firewall-cmd --zone=public --remove-port=3306/tcp --permanent
success
[root@localhost opt]# firewall-cmd --zone=public --remove-port=6379/tcp --permanent
success
[root@localhost opt]# firewall-cmd --reload
success
[root@localhost opt]# firewall-cmd --zone=public --list-ports
9090/tcp
安装git :
# 1. 安装git软件
yum install git -y
# 2. 尝试下载reggie代码(注意:这个代码必须是打jar包的版本)
cd /usr/local/
git clone https://gitee.com/xiaomingguo/reggie-parent.git -b dev
安装maven:
# 1. 解压软件
tar -zxvf /usr/local/src/apache-maven-3.5.4-bin.tar.gz -C /usr/local
# 2. 修改配置文件,在最后加入如下内容
vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$PATH:$MAVEN_HOME/bin
# 3. 更新配置
source /etc/profile
# 4. 修改maven配置文件settings.xml,配置本地仓库和中央仓库镜像
vim /usr/local/apache-maven-3.5.4/conf/settings.xml
配置settimg.xml中的仓库和镜像:
<localRepository>/usr/local/apache-maven-3.5.4/repo</localRepository>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
自动化部署脚本:
Shell脚本,是一种Linux系统中的脚本程序。
在
/usr/local/
下创建bootStart.sh
脚本,内容如下
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=reggie-web-manage-1.0-SNAPSHOT
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/reggie-parent
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd reggie-web-manage/target
echo 启动项目
nohup java -jar reggie-web-manage-1.0-SNAPSHOT.jar --server.port=9090 > /usr/local/reggie-parent/reggie-web-manage/reggie-web-manage.log &
echo 项目启动完成
为脚本添加执行权限,然后运行脚本 :
# 添加执行权限
chmod +x /usr/local/bootStart.sh
# 执行脚本
/usr/local/bootStart.sh
自动部署完成;
nginx反向代理:
详细的可以看这个博客,解释的非常详细:
那么在这里简单的说一下,就是将默认的跳转路径通过反向代理的方式访问服务器的就可以了。
具体操作方式:
客户端安装好nginx,也就是你的电脑上。
绿色版解压时候,打开文件夹,找到conf-->nginx.conf 这个文件,打开之后:
把location后面的东西改成这个熊样子:
location / {
proxy_pass 服务器项目地址,写全乎点,别丢三落四的
}
然后,访问nginx,默认是80端口,然后就发现能访问到你已经部署好,并且启动了的项目了。
项目部署就完事了。