CentOS7下后端配置

基于阿里云cetos7.4的后端配置。在此记录一下。

一、安装mysql

之前已经讲过,详见,注意要在阿里云的安全组中打开3306端口,否则无法远程连接。

二、安装redis

1.在centOS里通过wget下载redis

1
wget http://download.redis.io/releases/redis-4.0.9.tar.gz   //版本去redis官网查看最新即可

2.在/usr/local里面创建redis目录(这个是安装目录,自己随意放)

1
2
cd /usr/local
mkdir redis

3.解压到创建的目录

1
2
cd ~
tar -xzvf redis-4.0.9.tar.gz -C /usr/local/redis

已解压成功

4.进入目录编译一下,用make命令编译一下

1
2
cd /usr/local/redis/redis-4.0.9
make

注意:make命令执行完成编译后,会在src目录下生成6个可执行文件,

分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-rdb、redis-sentinel。

5.编译生成的可执行文件拷贝到/usr/local/bin目录下

这一步是为了后期可以直接使用命令,

1
2
cd /usr/local/redis/redis-4.0.9/src
cp {redis-server,redis-cli,redis-benchmark,redis-check-aof,redis-check-rdb,redis-sentinel} /usr/local/bin

6.进入redis-4.0.9执行安装命令make install

1
2
cd ../
make install

7.执行基本配置

1
./utils/install_server.sh

一阵回车就可以了,红圈就是默认配置的路径!!!

8.查看开机启动列表

1
chkconfig --list

9.开启关闭命令

开启Redis服务操作通过/etc/init.d/redis_6379 start命令,也可通过(service redis_6379 start);

关闭Redis服务操作通过/etc/init.d/redis_6379 stop命令,也可通过(service redis_6379 stop);

10.远程登陆redis

1
cd /etc/redis

编辑 6379.conf,(黑底蓝字,眼要瞎了)

1
vim 6379.conf

a.在bind 127.0.0.1前加“#”将其注释掉 ;

b.默认为保护模式,把 protected-mode yes 改为 protected-mode no

c.默认为不守护进程模式,把daemonize no 改为daemonize yes

d.将 requirepass foobared前的“#”去掉,密码改为你想要设置的密码 (我这里没有设置)

11.开放端口

同样,去阿里云安全组开放6379端口。

12.补充

如果上述设置了密码,在服务器使用关闭命令会出现(error) NOAUTH Authentication required.错误。 这是由于配置了密码以后,关闭的时候没有密码,所以会关闭不了。找到/etc/init.d/redis_6379文件,修改一下代码

1
$CLIEXEC -a "password" -p $REDISPORT shutdown

然后就可以运行service redis_6379 stop关闭redis了。

三、安装JDK

之前已经讲过,详见

四、springboot项目打包

1.打开端口

打包前确认工程中指定的端口在服务器在未被占用, 并确保该端口已经添加到阿里云安全组中 。

2.注意更改数据源

确保mysql、redis等 数据源连接参数正确,开发时若使用的是本地数据库,那在打包前将数据库连接参数修改为目标数据库。

3.修改pom.xml

1
2
3
4
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests><!--添加打包时跳过tests -->
</properties>

如上,添加一行,否则打包时会自动进行测试,由于更换了数据源所以无法通过测试,打包失败。

4.打包

5.运行

我这里传到了home文件夹下

1
2
cd home
java -jar heater-0.0.1-SNAPSHOT.jar

运行没有问题。

6.打开防火墙

虽然运行没有问题,但是发现app端以及postman都无法访问,均显示超时连接,最后发现需要打开防火墙的8081端口,同mysql打开3306端口,

7.改为后台运行

java -jar 自己的springboot项目.jar:执行springboot的项目,如果单单只执行该命令,linux只会短暂的运行该项目,当退出控制台后会自动关闭该项目。

首先需要进到自己springboot项目的根目录,然后执行如下linux命令

1
nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 &

命令详解:

nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。

日志文件名.log:是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件中,即输出内容不打印到屏幕上,而是输出到”日志文件名.log”文件中。不指定文件名会在当前目录创建nohup.out,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这里&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“日志文件名.log”文件中。

8.停止服务

控制台输入

1
jps 或者 ps -ef | grep 包名

找到刚才运行的进程id,输入下面的命令关闭进程

1
kill -9 进程id

9.生产环境部署

生产linux服务器下,可以编写统一脚本管理启动重启:

单一脚本:

在自定义目录创建 wss.sh 脚本,编辑内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=websocketserver-0.0.1-SNAPSHOT.jar

#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
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 /mnt/ssd1/project/websocket/$APP_NAME > /mnt/ssd1/project/websocket/websocketserverlog.file 2>&1 &
echo "${APP_NAME} start success"
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
}

#重启
restart(){
stop
start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

注意在start()方法中根据自己情况修改启动命令,之后就可以通过 wss.sh start | stop | restart 实现启动,停止,重启操作了。

补充下sh xxx.sh与./xxx.sh区别

sh xxx.sh 是不需要有执行权限

./xxx.sh 是需要有执行权限的,可以通过 chmod +x xxx.sh 赋予权限

三个脚本:

1
1.启动 脚本 start.sh  2.停止脚本 stop.sh  3.重启脚本  restart.sh

启动之前先授权一下 : chmod a+x 文件.sh,以后执行脚本使用./start|stop|restart.sh即可。

启动服务脚本:vi start.sh

1
2
3
4
5
 #!/bin/bash

echo starting

nohup java -jar 项目.jar > log.file 2>&1 &

停止服务脚本:vi stop.sh

1
2
3
4
5
6
7
8
9
10
11
12
  #!/bin/bash

PID=$(ps -ef | grep 项目.jar | grep -v grep | awk '{ print $2 }')

if [ -z "$PID" ]
then
echo Application is already stopped

else
echo $PID
kill $PID
fi

停止脚本的流程就是,通过ps查找到该项目进程id,然后kill掉。

重启脚本:vi restart.sh

1
2
3
4
5
#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh

重启脚本流程好理解,依次调用停止,启动即可。

之后还可以利用这三个脚本文件设置开机自启。

五、开放udp端口

在阿里云安全组以及防火墙都要开放端口,注意要开放udp协议,不是tcp。

:转载文章请注明出处,谢谢~