前言:
学校近期实训周做项目,我想着能不能把项目直接部署在云上,刚好阿里云有ECS服务器免费试用活动,不嫖白补票,因此记录本项目的所有部署流程,从申请服务器到部署项目,完整的流程
本次采用的是两台阿里云ECS的服务器,因为我项目采用数据库是主从复制的架构,所以需要两台服务器,刚好我也想把前台部署到第二台服务器上去,第一台服务器部署主要后台代码


主库服务器 从库服务器
后台代码 前台代码
mysql5.0主库部署 mysql5.0从库部署
redis部署 Nginx配置
JDK环境配置
tomcat配置
Maven环境配置

阿里云服务器申请

首先去阿里云申请两台服务器,可免费使用1个月

如果不用了记得提前退订


主库配置

通过本地连接阿里云ECS主库

网卡设置

这里不做介绍,自行百度Linux配置网卡

安装软件

vim文本工具

yum install vim

安装JDK

  1. 去[oracle][https://www.oracle.com/java/technologies/downloads/archive/]官网下载对应操作系统的JDK

  2. 把下载好的JDK传入Linux

  3. 执行解压命令: tar -zxvf 改成你自己上传的包名 -C /usr/local

  4. 修改系统环境变量:

    1. vim /etc/profile

    2. 插入以下代码,注意路径修改

      1
      2
      3
      4
      export JAVA_HOME=/usr/local/jdk1.8.0_331  (注意路径)
      export JRE_HOME=/usr/local/jdk1.8.0_331/jre ((注意路径))
      export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
      export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

      image-20220616164702404

    3. 修改完后:wq退出

    4. 执行 source /etc/profile 刷新环境变量

    5. 执行 java -version 或 javac 查看是否安装成功

      看到显示版本号即安装成功

安装Tomcat

  1. 官网下载对应系统版本的tomcat安装包

  2. 并上传至Linux内

  3. 执行解压命令

  4. tar -zxvf apache-tomcat-9.0.62.tar.gz -C /usr/local

  5. 进入到tomcat的bin目录下执行 sh startup.sh

  1. 这个时候我还需要去阿里云ECS控制台设置一下安全组规则,把8080端口开打

  1. 再去浏览器访问 服务器ip+端口号8080 比如我的是http://47.99.194.162:8080/ (本人是把防火墙直接关闭了,所以能访问)

  1. 如果还访问不到,那就得改一下防火墙的设置,设置防火墙开放8080端口

  2. 设置防火墙开机启动:chkconfig firewalld on

  3. 开启防火墙: systemctl start firewalld(执行完之后,再去访问就访问不到了,所以我们需要开发8080端口)

  4. 查询8080端口是否开启: firewall-cmd --query-port=8080/tcp

  5. 开启8080端口

    1. firewall-cmd --zone=public --add-port=80/tcp --permanent(–permanent永久生效,没有此参数重启后失效)
  6. 重启防火墙

    1. firewall-cmd --reload
  7. 查看8080端口是否开启成功

    1. firewall-cmd --zone=public --query-port=8080/tcp
  8. 当然还可以删除指定端口

    1. firewall-cmd --zone=public --remove-port=端口号/tcp --permanent
  9. 再去刷新一下页面,就又可以访问了

  10. 查看已开放的所有端口

    1. firewall-cmd --zone=public --list-ports
  11. 索性在这里一并开放3306 / 6379 / 8888 端口 后期也会用到

  12. 其余操作

    1
    2
    停止Tomcat服务
    sh shutdown.sh

安全提醒:防火墙不建议关闭,已经阿里云服务器安全组也不建议设置全部端口打开,会有一些黑客或者不正当的人入侵服务器,拿你服务器干坏事,本人就是因为此件事搞得我服务器,需要重新配置,索性也就写了这篇文章,真的不要随意打开任何一个端口!!!

安装MySQL

  1. 一样的去官网下载对应系统版本的安装包,并上传到Linux

  2. 解压MySql安装包之后会得到以下几个文件

  1. 接下来需要按照以下顺序一一安装,按照顺序必须跟我一样
  2. 安装顺序如下

image-20220801181601653

1
2
3
4
5
6
7
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
安装到这的时候需要安装一个依赖: net-tools,在执行最后一个安装包,直接执行则会报缺少net-tools依赖
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

​ 如果第二句安装的时候报错,在后面加上 --force --nodeps

  1. 安装完后执行内核更新:

    1. yum update
  2. 启动mysql

  3. systemctl status mysqld 查看mysql服务状态

  4. systemctl start mysqld 启动mysql服务

  5. 设置为开机启动

  6. systemctl enable mysqld

  7. netstat -tunlp 查看已启动的服务

  8. ps - ef|grep mysql 查看mysql进程

  9. 登录mysql

  10. 查阅临时密码: cat /var/log/mysqld.log | grep password

  11. 登录mysql,并修改密码,开放访问权限

    1. mysql -uroot -p (输入查出来的临时密码)

    2. 修改密码以及访问权限

      1
      2
      3
      4
      5
      set global validate_password_length=4;			设置密码长度最低位数
      set global validate_password_policy=LOW; 设置密码安全等级低,便于密码可以修改成root
      set password = password('root'); 设置密码为root
      grant all on *.* to 'root'@'%' identified by 'root'; 开启访问权限
      flush privileges; 刷新权限

  12. 到此就可以用Navicat进行外部连接了

安装Redis

  1. 官网下载对应系统版本的安装包,并上传至Linux系统和解压安装,在此不做阐述

  2. 安装Redis的依赖环境gcc, 执行: yum install gcc-c++

  3. 进入安装redis软件目录,进行编译,执行: make

  4. 在进入redis软件目录下的src执行: make install

  5. redis启动与停止

  6. 在redis/src下执行: ./redis-server

image-20220616210708814

  1. 进入redis根目录,修改配置文件

  2. vim redis.conf

  3. 找到daemonize,修改为 yes 允许后台启动

  4. 修改配置文件,将 bind 注释 即可实现外部访问

  1. 将protected-mode 改为 no

  2. 启动Redis

  3. src/redis-server ./redis.conf

  4. 外部进行连接

  5. 设置为开机启动

  6. 网上有很多教程这里就不多阐述了 点我查看教程

  7. 快捷操作

    1
    2
    3
    4
    5
    6
    7
    打开redis命令:service redis start

    关闭redis命令:service redis stop

    设为开机启动:chkconfig redis on

    设为开机关闭:chkconfig redis off

安装Git

执行: yum install git

查看git版本: git --version

安装Mavne

自行百度

后端部署

  1. 拉取git项目到本地 git clone xxxxx

  2. 在项目根目录编写启动脚本

    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
    #!/bin/sh
    echo =================================
    echo 自动化部《湘约楼》署脚本启动
    echo =================================

    echo 停止原来运行中的工程
    APP_NAME=xyl_take_out

    tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
    if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
    fi
    sleep 2
    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/javaapp/xyl_ms_km

    echo 开始从Git仓库拉取最新代码
    git pull
    echo 代码拉取完成

    echo 开始打包
    output=`mvn clean package -Dmaven.test.skip=true`

    cd target

    echo 启动项目
    nohup java -jar xyl_take_out-1.0-SNAPSHOT.jar &> xyl_take_out.log &
    echo 项目启动完成
  3. 赋予脚本最高权限,然后执行, sh xyl.sh

    稍等片刻,将会打包完成

    这里呢启动之后肯定是访问不到的,因为从库的sql还没配置,所以先配置从库的数据库和前端页面在来启动

从库配置

安装vim

上面有教程,这边不做阐述

安装Nginx

  1. 前期准备

安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
下载Nginx安装包
wget http://nginx.org/download/nginx-1.22.0.tar.gz
解压 tar -zxvf nginx-1.22.0.tar.gz
创建文件夹 mkdir -p /usr/local/nginx
执行安装命令: ./configure --prefix=/usr/local/nginx
执行编译: make && make install
导入静态页面到html目录

配置反向代理
修改nginx.conf文件

1
2
3
4
5
6
7
8
9
10
11
location / {
root html/dist;
index index.html;
}

#反向代理配置
location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://47.99.194.162:8888/
}

  1. 配置Nginx环境

    1. 编辑 vim /etc/profile
    2. export PATH=/usr/local/nginx/sbin:$PATH
    3. 执行 source /etc/profile 刷新环境变量
  2. 配置开机启动

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     >#!/bin/sh
    >#
    ># nginx - this script starts and stops the nginx daemon
    >#
    ># chkconfig: - 85 15
    ># description: NGINX is an HTTP(S) server, HTTP(S) reverse \
    ># proxy and IMAP/POP3 proxy server
    ># processname: nginx
    ># config: /etc/nginx/nginx.conf
    ># config: /etc/sysconfig/nginx
    ># pidfile: /var/run/nginx.pid

    ># Source function library.
    >. /etc/rc.d/init.d/functions

    ># Source networking configuration.
    >. /etc/sysconfig/network

    ># Check that networking is up.
    >[ "$NETWORKING" = "no" ] && exit 0

    >nginx="/usr/local/nginx/sbin/nginx"
    >prog=$(basename $nginx)

    >NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

    >[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

    >lockfile=/var/lock/subsys/nginx

    >make_dirs() {
    # make required directories
    user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
    if [ -n "$user" ]; then
    if [ -z "`grep $user /etc/passwd`" ]; then
    useradd -M -s /bin/nologin $user
    fi
    options=`$nginx -V 2>&1 | grep 'configure arguments:'`
    for opt in $options; do
    if [ `echo $opt | grep '.*-temp-path'` ]; then
    value=`echo $opt | cut -d "=" -f 2`
    if [ ! -d "$value" ]; then
    # echo "creating" $value
    mkdir -p $value && chown -R $user $value
    fi
    fi
    done
    fi
    >}

    >start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
    >}

    >stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
    >}

    >restart() {
    configtest || return $?
    stop
    sleep 1
    start
    >}

    >reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $prog -HUP
    retval=$?
    echo
    >}

    >force_reload() {
    restart
    >}

    >configtest() {
    $nginx -t -c $NGINX_CONF_FILE
    >}

    >rh_status() {
    status $prog
    >}

    >rh_status_q() {
    rh_status >/dev/null 2>&1
    >}

    >case "$1" in
    start)
    rh_status_q && exit 0
    $1
    ;;
    stop)
    rh_status_q || exit 0
    $1
    ;;
    restart|configtest)
    $1
    ;;
    reload)
    rh_status_q || exit 7
    $1
    ;;
    force-reload)
    force_reload
    ;;
    status)
    rh_status
    ;;
    condrestart|try-restart)
    rh_status_q || exit 0
    ;;
    *)
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
    exit 2
    >esac

    这段代码是官方提供的,并不是我自己写的,里面有两行Nginx的路径需要改成你自己的安装路径

  3. 编写完毕之后在/etc/init.d下创建nginx文件,把上面的代码复制进去,并给予最高执行权限

  4. 使用chkconfig管理

    1. 将nginx服务加入chkconfig管理列表

      1
      # chkconfig --add /etc/init.d/nginx
    2. 使用service管理服务

      1
      2
      3
      4
      5
      # service nginx start    启动服务   
      # service nginx stop 停止服务
      # service nginx restart 重启服务
      # service nginx status 查询服务的状态
      # service nginx relaod 刷新配置文
    3. 设置终端模式开机启动

      1
      # chkconfig nginx on

安装MySql

上述已经讲到,这里不做阐述

配置主从复制

配置主库

修改 vim /etc/my.nf
[mysql]
log-bin = mysql-bin #[必须]启用二进制日志
server-id=100 服务器唯一ID

重启mysql服务
systemctl restart mysqld

登录到主库中执行代码
GRANT REPLICATION SLAVE ON . to ‘serms’@’%’ identified by ‘Root@123456’;
上面SQL的作用是创建一个用户serms,密码为Root@123456,并且给serms用户授予 REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是说slave必须被master授权具有权限的用户,才能提供该用户复制

执行SQL,查看FIle和Position的值
show master status;

至此不需要在动主库的mysql了

配置从库

修改mysql数据库配置文件
server-id=100
刷新数据库

执行SQL

change master to master_host=‘47.99.194.162’,master_user=‘serms’,master_password=‘Root@123456’,master_log_file=‘mysql-bin.000001’,master_log_pos=438;

start slave;

查看数据库状态

show slave status;

到此呢主库和从库的配置就已经结束啦~

有些地方写的不是很好, 有不明白的地方请在下方留言

❤️Sponsor

您的支持是我不断前进的动力,如果您恰巧财力雄厚,又感觉本文对您有所帮助的话,可以考虑打赏一下本文,用以维持本博客的运营费用,拒绝白嫖,从你我做起!🥰🥰🥰

支付宝 微信