环境安装
安装软件一般有三种方式:rpm安装包、解压缩、yum在线安装
jdk安装
jdk我们采用rpm安装包的安装方式
jdk1.8 rpm下载地址(提取码3210)
下载到windows上之后使用Xftp进行传输,放到/home/huangyue文件夹下,即自己的用户目录(或者自己可以随便放)
linux下进入自己的用户目录
cd /home/huangyue/
检测当前系统是否存在Java环境,如果有则不能进行安装,需要卸载
java -version
-bash: java: command not found
使用以下命令进行卸载
rpm -qa|grep jdk
rpm -e --nodeps [上面语句查出来的信息]
卸载完毕后,即可安装jdk
rpm -ivh [rpm安装包]
过程如下:
查看当前java环境
java -version
可以看到java环境已经成功安装了
简单项目部署
准备项目
我们尝试以下部署一个SpringBoot项目
打开Idea,编写一个简单的SpringBoot程序
HelloHandler中处理一个请求,并直接返回一个数据
@RestController
public class HelloHandler {
@RequestMapping("/get/string/message")
public String getMessage(){
return "Hello SpringBoot";
}
}
SpringBootMainType主启动类
@SpringBootApplication
public class SpringBootMainType {
public static void main(String[] args) {
SpringApplication.run(SpringBootMainType.class, args);
}
}
现在idea环境运行,看能否启动并运行成功
打包项目
运行成功,现在将项目进行Maven打包,分别双击clean和package
打包完成后会在target目录下生成一个jar包
测试jar包能否运行,使用文件资源管理器打开
输入以下命令执行
java -jar SpringBootLinux-1.0-SNAPSHOT.jar
可以发现项目启动成功,并且网页浏览也正常
这时候可以确定jar包是可执行的了
也可以使用cmd命令行进行打包:
mvn clean package -Dmaven.test.skip=true
mvn clean install -Dmaven.test.skip=true
发布项目
将jar包使用Xftp发布到Linux服务器上
开放防火墙端口
如果有防火墙的话,需要开启防火墙的端口,然后在阿里云控制台上加入安全组端口,
开启防火墙端口,因为这里是8080端口,所以将8080端口打开
如果没有防火墙,先进行防火墙的安装(阿里云一般是安装了的)
yum install firewalld systemd -y
下面是防火墙功能的开启关闭指令
- systemctl status firewalld:查看防火墙状态
关闭状态如下:
开启状态如下:
- systemctl start firewalld:开启防火墙
- systemctl stop firewalld:关闭防火墙
查看已经开放的端口:
firewall-cmd --list-ports
如果输入为空行,那么当前防火墙没有开启任意端口
开放8080端口,使用如下语句
firewall-cmd --zone=public --add-port=8080/tcp --permanent
并重载一下防火墙端口
firewall-cmd --reload
开放后继续查看已经开放的端口
如果不开放指定SpringBoot项目所需要的端口,那么启动jar就会报错,如下图所示:
添加安全组
进入阿里云控制台的ECS实例管理,点击安全组标签,然后点击配置规则
点击入方向(出方向不用管)、点击手动添加
设置相应的规则:优先级可以和其他的一样都是100,端口范围是’8080/8080’,授权对象为’0.0.0.0’,描述可自己写,最后点击保存
启动项目
所有准备工作已做好,可以直接java -jar进行项目启动
java -jar SpringBootLinux.jar
浏览器访问,注意需要使用公网ip进行访问,我这里的地址为:http://120.77.146.211:8080/get/string/message,可以看到浏览器可以正常输出字符串
上传完毕的项目直接购买自己的域名,备案解析过去即可(可选)
域名解析后,如果端口是80或443的话可以直接访问,如果是其他如8080 8888等,就需要通过Apache或者Nginx做一下反向代理即可,配置一下文件,十分简单,大家如果想要上线一个网站,到目前为止,那么你可以如愿以偿了。
Tomcat安装
Tomcat 9 下载地址:
war包是需要在Tomcat运行的,因此安装Tomcat是有必要的
上传至服务器,使用**tar -zxvf [压缩包路径]**即可
启动Tomat测试
进入Tomcat的bin目录
cd /opt/software/apache-tomcat-9.0.43/bin/
执行shartup.sh启动Tomcat(Linux中绿色的文件代表可执行文件)
./startup.sh
如果防火墙8080开启了,并且阿里云的安全组也开放了,这个时候可以直接远程访问了
http://120.77.146.211:8080/
关闭Tomcat
/opt/software/apache-tomcat-9.0.43/bin shutdown.sh
MySQL安装
安装之前先卸载服务器自带的mariadb
查看mariadb是否存在:
rpm -qa|grep mariadb
可以看到是存在的,因此需要卸载
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
卸载完成后再次查看是否存在mariadb
rpm安装
链接:https://pan.baidu.com/s/15SO3MaTgVTE6-HiU65QM3w
提取码:1231
复制这段内容后打开百度网盘手机App,操作更方便哦
导入rpm安装包,我这里是按照四个服务,分别是:(必须按照如下顺序安装)
- mysql-community-common-5.7.14-1.el7.x86_64.rpm
- mysql-community-libs-5.7.14-1.el7.x86_64.rpm
- mysql-community-client-5.7.14-1.el7.x86_64.rpm
- mysql-community-server-5.7.14-1.el7.x86_64.rpm
进入这些文件的目录,进行rpm安装
rpm -ivh mysql-community-common-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.14-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.14-1.el7.x86_64.rpm
当安装server服务时,会出现缺少一个libaio,所以我们先进行安装
yum install -y libaio
出现Complete字样表示安装成功
继续执行rpm -ivh mysql-community-server-5.7.14-1.el7.x86_64.rpm
server安装完成后查看mysql服务是否启动
service mysqld status
dead表示未启动,这里我们要启动mysql服务
service mysqld start
再次查看mysql服务是否启动
可以看到是active状态,即启动
查看mysql默认密码
grep password /var/log/mysqld.log
使用此密码登录mysql
mysql -uroot -p
修改数据库密码
alter user root identified by 'PPss.1234';
注意:因为mysql5.6以后加入了validate_password密码校验插件,也就是说你的密码必须符合MySQL的默认密码校验机制(密码长度必须大于8位,且密码包含大小写字母,特殊字符和数字),如果不否和校验规则的话,就会报如下错误:
在正确设置新密码后,我们可以通过改变MySQL的默认密码校验规则,修改密码为简单的密码
-
修改校验策略:set global validate_password_policy=0;
-
设置密码长度:set global validate_password_length=6;
这里我修改成了最简单的’123456’,退出后重新登录,输入新密码,成功
授权远程访问
现在的mysql还不具备远程访问的功能,因此需要授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
重启MySQL服务,使配置生效
开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
并重载一下防火墙端口
firewall-cmd --reload
添加3306安全组
这时候就能远程访问MySQL数据库了
修改字符集
查看字符集
show variables like "%char%";
修改/etc/my.cnf文件,在[mysqld]下加入一句:‘character-set-server=utf8’
vim /etc/my.cnf
保存并退出,重启mysql服务,再次登录查看字符集是否更改过来
service mysqld restart
mysql -uroot -p
show variables like "%char%";
可以看到都是utf8编码了
Redis安装
下载 Redis 的 Linux 压缩包,这里以 Redis 4 为例
老规矩,上传至服务器,我这里选择/opt/software目录
进入此目录进行解压
cd /opt/software
tar -zxvf redis-4.0.8.tar .gz
解压完成后vim打开Makefile
vim /opt/software/redis-4.0.8/src/Makefile
修改安装目录,我这里将redis安装目录放到/usr/local/redis中
进入/opt/software/redis-4.0.8目录,make命令进行编译
cd /opt/software/redis-4.0.8
make
如果不能进行make编译,则需安装gc++编译器
yum install -y gcc-c++
此时能执行make了,但仍然报错
那么执行下面的命令即可
make MALLOC=libc
执行编译完成后如下图所示
编译完成后进行安装(仍然在redis-4.0.8目录下)
make install
我们将压缩目录下的配置文件redis.conf复制到安装目录下(复制完后可以自己重命名,这里我就不做了)
cp /opt/software/redis-4.0.8/redis.conf /usr/local/redis
打开复制好的文件,进行相应配置
vim /usr/local/redis/redis.conf
更改以下配置项
输入:wq保存并退出
手动创建/var/redis目录,用来存放日志文件
mkdir /var/redis
启动redis,使用我们自己的配置文件来启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
查看redis是否启动
ps -ef|grep redis
项目部署
现在尝试将一个完成的 SSM + SpringBoot + SpringCloud + MySQL + Redis 项目进行打包、部署和访问
基础环境:
远程Linux服务器:阿里云ECS云服务器,2核4GiB
MySQL:5.7.14
Redis:4.0.8
Tomcat:9.0.43
确保上面的环境安装好后,可以在本地进行打包项目了
我们先打包单一架构的SSM项目(因为不涉及跨服务请求,也就是访问请求无需更改,因此直接在idea中进行打包即可。而SpringCloud项目是需要跨微服务的,所以本地访问的请求肯定与服务器访问的请求不一样,并且日后可能在本地还要对代码进行修改,因此idea环境保留,多复制一份项目到其他地方,进行请求的修改)
打开Maven窗口
先对subwaysearch05-common-util进行单独安装,先执行clean清理,在install安装
然后对聚合工程的父工程进行clean和package
可以看到聚合工厂maven会自动以正确的顺序进行打包
打开左侧的对应target目录,即可发现war包已经打好了,可以直接放到Tomcat上启动的
下面我们对各个SpringBoot微服务进行打包(采用cmd方式)
因为这些子工程都继承于父工程(subwaysearch07-subway-parent),可以直接对父工程进行打包,当然,各个微服务中需要配置相应的build工具(在pom.xml中),无需打包的就不用配置
<!--Maven构建过程相关配置-->
<build>
<!--构建过程中所需要用到的插件-->
<plugins>
<!--不能手动进行打包,因为打出的包并不含springboot环境-->
<!--这个插件将 SpringBoot 应用打包成一个可执行的 jar 包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
并且父工程的pom.xml必须继承SpringBoot官方的父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
准备工作做好了,现在可以对父工程进行打包,进入父工程pom.xml的所在目录,地址栏输入cmd进入命令窗口
输入如下打包指令,意思是跳过test包,避免执行test中的测试类
mvn clean package -Dmaven.test.skip=true
编译完成后可到各个微服务目录下的target文件夹看到打好的jar包
可以将这些jar包和上面的war包一起存放到一个文件夹中,方便上传到Linux服务器(总共6个,这里是7个是因为zuul不想启动了,因为Linux服务器只有4个G,内存不够,只需启动其他5个微服务即可)
启动ECS实例并登陆,确保mysql、redis都已开启
将上面这些文件上传至Linux中的/opt/packages
将war包放到Tomcat的webapps目录下,并启动Tomcat
mv /opt/packages/admin-webui.war /opt/software/apache-tomcat-9.0.43/webapps
/opt/software/apache-tomcat-9.0.43/bin/startup.sh
现在可以访问一下单一架构的项目:
可以看到是成功的
接下来是启动SpringBoot那些项目,进入这些jar包的目录,java -jar启动SpringBoot
注意:这些SpringBoot的端口必须开启,包括Linux防火墙和阿里云安全组(我这开启的端口有下面这些)
java -jar subwaysearch08-subway-eureka-1.0-SNAPSHOT.jar
启动成功的界面
但是当前SSH窗口被锁定,可按 CTRL + C 打断程序运行,或直接关闭窗口,程序退出
我们可以让窗口不锁定:
java -jar subwaysearch08-subway-eureka-1.0-SNAPSHOT.jar &
&代表在后台运行。虽然当前ssh窗口不被锁定,但是当窗口关闭时,程序仍然中止运行
我们也可以让SSH窗口关闭后,程序仍然运行
nohup java -jar subwaysearch08-subway-eureka-1.0-SNAPSHOT.jar &
- jobs:查看所有后台执行的作业,并且每个作业前面都有个编号
- 如果想将某个作业调回前台控制,只需要 **fg + 作业编号 **即可
一次将所有微服务启动
nohup java -jar subwaysearch10-subway-mysql-provider-1.0-SNAPSHOT.jar &
nohup java -jar subwaysearch11-subway-redis-provider-1.0-SNAPSHOT.jar &
nohup java -jar subwaysearch13-subway-search-consumer-1.0-SNAPSHOT.jar &
nohup java -jar subwaysearch15-subway-member-consumer-1.0-SNAPSHOT.jar &
使用jobs命令查看所有后台启动的进程
这个时候我们应该是可以外网访问的了
我们关闭Shell连接后,外网仍然是能访问的
再重新打开XShell连接,发现使用jobs是看不到后台进程的信息的,那么我们如何将这些进程停掉?
可以使用ps命令,定位进程号,使用kill -9 pid进行杀死
ps -ef|grep java
kill -9
杀死后可以发现刚才那个eureka进程没了
然后使用1000端口访问,确实是访问不到
我们再重新启动一下eureka微服务
nohup java -jar /opt/packages/subwaysearch08-subway-eureka-1.0-SNAPSHOT.jar &
再次使用jobs命令是可以查看到后台进程的,并且外网可以访问到
我们查看一下当前Linux服务器的内存占用
可以看到这些java进程,是十分占用内存的,这也是我不启动zuul微服务的原因,如果启动则会将其他进程杀死,无法正常工作,看到阿里云监控画面,内存使用率已经高达90%,这才启动了5个SpringBoot和1个Tomcat而已