美契国通平台部署文档

一、服务器要求:

4C 8G 硬盘100G(最低配置)
8C 16G 硬盘500G(推荐配置)

二、系统版本及软件版本:

系统版本:service version: Cent OS 7.6及以上(推荐使用Cent OS 7.8 2003 )
软件版本:
Nginx:1.18.0版本及以上
JDK:1.8.0版本及以上
Redis:3.2.12版本及以上
MySQL:5.7.26版本及以上
#下载地址 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#以上所有的安装包统一放在/root/source目录下

开始部署前请先更新系统

[root@localhost ~]# yum -y update

三、网络要求及防火墙要求:

网络要求:用户量大于500人时,网络带宽要求大于1Mbps,拥有独立公网IP。
防火墙要求:web服务器要能够使用外网,拥有独立IP,外网开放443端口,内网尽量不做防火墙配置,多台服务器之间能够使用内网访问。一个IP用于WEB端访问及小程序接口。

四、linux服务器环境搭建:

1.MySQL安装

可以购买阿里云的RDS服务--建议
可以自行在服务器上安装MySQL

1.1Linux安装可按以下步骤:

下载MySQL的安装包(版本:MySQL5.7.26)

[root@localhost ~]# mkdir source
[root@localhost ~]# cd source
[root@localhost source]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
1.2、解压并安装MySQL

解压安装包

[root@localhost source]# tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

将安装包移动至指定路径,并修改目录名称。

[root@localhost source]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql
1.3、为MySQL创建用户和组
[root@localhost source]# groupadd mysql

[root@localhost source]# useradd -r -g mysql mysql
1.4、将安装目录所有者及所属组改为mysql
[root@localhost source]# chown -R mysql.mysql /usr/local/mysql
1.5、创建data文件夹,用于存放数据库表之类的数据
[root@localhost source]# cd /usr/local/mysql
[root@localhost mysql]# mkdir data
1.6、编辑配置文件

先将原配置文件做备份

[root@localhost mysql]# cp -a /etc/my.cnf /etc/my.cnf.bak

编辑配置文件

[root@localhost mysql]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
user=mysql
# 也可为MySQL指定其他端口
port=3306
character-set-server=utf8
# 设置表名不区分大小写
lower_case_table_names=1
# 取消密码验证
skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
explicit_defaults_for_timestamp=true

open_files_limit=10240
back_log=600
max_connections=3000
max_connect_errors=100
wait_timeout=605800
#open_tables=600
#table_cache = 650
#opened_tables = 630

max_allowed_packet=64M
sort_buffer_size=4M
join_buffer_size=4M
thread_cache_size=300
query_cache_type=1
query_cache_size=256M
query_cache_limit=2M
query_cache_min_res_unit=16k

tmp_table_size=256M
max_heap_table_size=256M

key_buffer_size=256M
read_buffer_size=1M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M
lower_case_table_names=1

default-storage-engine=INNODB
innodb_buffer_pool_size=8G
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_flush_method=O_DIRECT
long_query_time=2
slow-query-log=on
slow-query-log-file=/usr/local/web/mysql/logs/mysql-slow.log
long-query_time=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

[mysqldump]
quick
1.7、使用systemd管理MySQL
[root@localhost mysql]# vim /etc/systemd/system/mysql.service 
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

1、 --defaults-file=/etc/my.cnf 这个是指向mysql的配置文件,要根据实际情况来管理。
2、如果一个服务器上启动多个mysql实例要怎么使用systemctl启动呢?
可以使用添加不同文件名的方式来管理不同的实例,例如例子中使用的文件名是mysqld.service 可以写成mysql3306.service 和mysql3307.service 这样里面的配置文件也要指定相应的位置。否则启动容易出问题。

可以加入到环境变量
将MySQL命令添加到环境变量中

[root@localhost mysql]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
[root@localhost mysql]# source /etc/profile

初始化设置,并记录初始化密码,方便后面登录使用。

[root@localhost mysql]# /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --initialize 
1.8、开机启动
[root@localhost mysql]# systemctl enable mysql.service
1.9、启动mysql服务
[root@localhost mysql]# systemctl start mysql.service
1.10、登陆mysql

在配置文件/etc/my.cnf中跳过密码登陆,所以可以免密登陆

[root@localhost mysql]# /usr/local/mysql/bin/mysql -uroot -p

使用初始化显示的密码进行登录。

1.11、MySQL数据库操作

修改MySQL初始化密码,并允许root用户远程登录

mysql> use mysql;                     
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> update user set host='%' where user='root' AND host='localhost';
mysql> flush privileges;             #刷新权限
mysql> select user,host from mysql.user;

查看root用户的host是否为%

1.12、导入数据结构

新建所需的数据库,并导入模板数据

mysql> create database prod_gt_education;
mysql> use prod_gt_education;
mysql> source /home/projects/gt-education/prod_gt_education.sql

2.Redis安装

2.1、使用yum安装Redis
[root@localhost mysql]# yum -y install redis
2.2、修改Redis配置文件
[root@localhost mysql]# cp -a /etc/redis.conf /etc/redis.conf.bak
[root@localhost mysql]# vim /etc/redis.conf

1、搜索port,修改port 6379 为想要的其他端口;
2、注释掉bind 127.0.0.1; #允许远程访问
3、找到protected-mode这行, 将yes改为no.
4、搜索# requirepass foobared,去掉前面的#并修改密码;
5、保存退出。

2.3、开机启动Redis
[root@localhost mysql]# systemctl enable redis
2.4、启动Redis
[root@localhost mysql]# systemctl start redis
2.5、检查Redis是否启动成功
[root@localhost mysql]# ps -ef | grep redis
[root@localhost mysql]# netstat -antp | grep [port]
2.6、检查密码是否生效

进入Redis客户端,进行身份验证并查询密码

[root@localhost mysql]# redis-cli -p [port]
127.0.0.1:20002> config get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:20002> auth [newpasswor]
OK
127.0.0.1:20002> config get requirepass
1) "requirepass"
2) "[newpassword]"
127.0.0.1:20002> exit
[root@localhost mysql]# cd /root/source

3.JDK安装

3.1、源码包准备:

首先到官网下载jdk-8u301-linux-x64.tar.gz,(或下载更高版本)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
也可使用部署环境程序文件夹中的安装包jdk-8u301-linux-x64.tar.gz

3.2、解压源码包

通过终端在/usr/local目录下新建java文件夹,命令行:

[root@localhost source]# tar -zxvf jdk-8u301-linux-x64.tar.gz
[root@localhost source]# mkdir /usr/local/java
[root@localhost source]# mv jdk1.8.0_301 /usr/local/java
3.3、设置jdk环境变量

这里采用全局设置方法,就是修改/etc/profile,它是是所有用户的共用的环境变量

[root@localhost source]# vim /etc/profile

打开之后在末尾添加

JAVA_HOME=/usr/local/java/jdk1.8.0_301
JRE_HOME=/usr/local/java/jdk1.8.0_301/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH

使环境变量生效

[root@localhost source]# source /etc/profile

看看自己的配置是否都正确

[root@localhost source]# echo $JAVA_HOME
[root@localhost source]# echo $CLASSPATH
[root@localhost source]# echo $PATH
3.4、检验是否安装成功

在终端

[root@localhost source]# java -version

看看是否安装成功,成功则显示如下

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

4.NGINX安装

4.1、Nginx的下载:

首先到官网下载nginx-1.18.0.tar.gz,(或下载更高版本)
http://nginx.org/en/download.html
也可使用部署环境程序文件夹中的安装包nginx-1.18.0.tar.gz

4.2、安装支持软件:
[root@localhost source]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
[root@localhost source]# rpm -q pcre-devel zlib-devel gcc gcc-c++ make pcre-devel
4.3、解压源码包
[root@localhost source]# tar -zxvf nginx-1.18.0.tar.gz
4.4、编译安装Nginx
[root@localhost source]# cd nginx-1.18.0
[root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module
[root@localhost nginx]# make -j 4 && make install

参数说明:
  --prefix=/usr/local/nginx     #指定安装路径
  --user=nginx --group=nginx    #指定运行 nginx进程的用户和组
  --with-http_ssl_module      #支持 ssl 加密
  --with-http_realip_module    #此模块支持显示真实来源 IP 地址,当 NGINX 做负载均衡服务器时,需要这个功能,这样能够使得后台服务器记录原始客户端的 IP 地址。
  --with-http_gzip_static_module #开启 nginx支持 gunzip压缩静态文件功能,静态文件压缩后,可以节约带宽
  --with-http_dav_module     #启用支持 WebDAV 功能。WebDAV 一种基于 HTTP 1.1协议的通信协议。它扩展了 HTTP 1.1,在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法,使应用程序可直接对 Web Server 直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
  --with-http_stub_status_module #启用支持 nginx 监控模块,后期通过调用此模块可以监控nginx 状态。zabbix也可以通过此模块,来监控 nginx 的性能状态
  --with-http_addition_module   #启用支持(开启此模块后,nginx 可以在响应 http 请求之前或者之后追加文本内容,比如想在站点底部追加一个 js 或者 css,可以使用这个模块来实现。)
  --with-http_sub_module     #启用支持(此模块为 nginx 替换响应内容的模块,比如当站点出现什么敏感字,需要批量修改所有 web 页面,且想修改很耗时间,可以使用这个模块进行替换。或者想临时在站点中加上一个通用 js 或者 css 之类的文件,也可以使用这个模块。)
  --with-http_flv_module      #启用支持(支持 HTTP-FLV 斱式直播视频)。
  --with-http_mp4_module     #启用支持(此模块允许 nginx 为 H.264/AAC 编译码的视频文件,如: .mp4、.m4v、和.m4a 扩展名的文件, 提供伪流媒体服务端支持。
 伪流媒体是不 Flash 播放器一起配合使用的。 播放器向服务端发送 HTTP 请求,请求中的查询串是以开始时间为参数的,而服务端以流响应,这样流的开始 位置就能于请求中的时间相对应。)
  --with-pcre           #启用 perl 正则表达式,perl 的正则表达式一般使用在 location 指令和ngx_http_rewrite_module url 重定向模块中。默认 ngx_http_rewrite_module 是就启用的。
  make -j 4 #编译,把源代码编译成可执行的二进制文件。
-j 4 #以 4 个进程同时编译,速度快。 -j 后的数字,和 cpu 核心保持一样。

4.3、修改Nginx配置文件

检查上一步编译安装是否执行成功

[root@localhost nginx-1.18.0]# echo $?

如果结果为0,则证明编译安装成功;如果结果不为0,则证明编译安装出现错误,需要删除/usr/local/nginx目录,重新执行预编译操作(./configure)

进入Nginx配置文件目录

[root@localhost nginx-1.18.0]# cd /usr/local/nginx/conf

新建一个网站配置文件目录,用于存放不同网站的配置文件

[root@localhost conf]# mkdir sites

将已经修改好的配置文件放入网站配置文件目录当中

[root@localhost conf]# mv /root/source/projects/gt-education/gt-education.conf  sites/

注意gt-education.conf配置文件中的证书存放位置,必须按照实际情况调整
修改Nginx主配置文件,使网站配置文件生效

[root@localhost conf]# vim nginx.conf

修改用户为 nginx:
改:2 #user nobody;
为:2 user nginx;

打开之后在文件末尾,}的上一行添加

include sites/*;

4.4、创建Nginx用户

创建 Nginx 运行用户用于后期启动 nginx 进程使用,比你直接使用 root 用户启动 nginx 更安全。

[root@localhost nginx]# useradd -M -s /sbin/nologin -u 2000 nginx

-s    #指定登录 shell
-M   #不创建家目录
-u    #指定用户 ID 为 2000,这样方便后期不同服务器之间同步数据时,用户 ID 保持一致。linux默认用户 ID 从 1000 开始

如果不创建nginx用户,启动nginx时会报错,如图:

image
4.5、Nginx的启动和开机自启

为主程序nginx创建链接文件

[root@localhost nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
Nginx的运行控制方法

4.5.1、手动方法控制Nginx:
nginx -t           #检测配置文件语法
执行nginx         #主程序启动Nginx

[root@www ~]# nginx            #启动nginx服务
[root@www ~]# netstat -anpt |grep nginx
tcp   0   0 0.0.0.0:80   0.0.0.0:*   LISTEN  4651/nginx

[root@www ~]# killall -1 nginx   //平滑重启 nginx (reload)
[root@www ~]# killall -s HUP nginx   //平滑重启 nginx (reload)
[root@www ~]# killall -3 nginx   //正常停止nginx (stop)
[root@www ~]# killall -s QUIT nginx   //正常停止nginx (stop)
[root@www ~]# killall -s USR1 nginx   //用于nginx的日志切换,也就是重新打开一个日志文件,例如每天要生成一个日志文件时,可以使用这个信号来控制
[root@www ~]# killall -s USR2 nginx   //用于平滑升级可执行程序
[root@www ~]# nginx -s reload
[root@www ~]# nginx -s stop

编写nginx服务脚本

[root@www ~]# vim /etc/init.d/nginx

其内容参考nginx官方文档

#!/bin/bash
# chkconfig: 2345 99 20 # description: Nginx Server Control Scripts shell
PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in start)if [ -f $PIDF ];then
      echo "Nginx is running...Start it is error"
    else $PROG
    fi
  ;;
  stop)if [ -f $PIDF ];then
      kill -3 $(cat $PIDF)
      rm -f $PIDF
    else echo "Nginx is stopping...Stop it is error" fi
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  reload)if [ -f $PIDF ];then
      kill -1 $(cat $PIDF)else echo "Nginx is stopping...reload it is error" fi
  ;;
  status)if [ -f $PIDF ];then
      echo "Nginx is running"
    else echo "Nginx is stopped" fi
  ;;*)
    echo "Usage:$0 (start|stop|restart|reload|status)" exit 1 esac
exit 0
0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

[root@www ~]# /etc/init.d/nginx status

Nginx is stopped

[root@www ~]# /etc/init.d/nginx start

[root@www ~]# /etc/init.d/nginx start

Nginx is running...Start it is error

[root@www ~]# /etc/init.d/nginx restart

[root@www ~]# /etc/init.d/nginx stop

[root@www ~]# /etc/init.d/nginx stop

Nginx is stopping...Stop it is error

[root@www ~]# /etc/init.d/nginx start

[root@www ~]# /etc/init.d/nginx status

Nginx is running

4.5.2、使用systemctl工具管理Nginx

建立服务文件

[root@localhost nginx]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true [Install]
WantedBy=multi-user.target

加入开机启动

[root@localhost nginx]# systemctl daemon-reload
[root@localhost nginx]# systemctl enable nginx.service

查看

[root@localhost nginx]# systemctl list-units --type=service | grep nginx.server
*nginx.service                        loaded active running The nginx HTTP and reverse proxy server*

查看 Nginx 版本和编译参数

[root@localhost nginx]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module

启动Nginx

[root@localhost nginx]# systemctl start nginx

5、启动项目

5.1、创建项目目录并赋予权限
[root@localhost nginx]# mv /root/source/porjects /home
[root@localhost nginx]# cd  /home/projects/gt-education
[root@localhost gt-education]# chmod +x start.sh
5.2、修改代码中Redis数据库的连接端口
[root@localhost gt-education]# vim config/application-prod.yml

文件中90行为Redis的端口,可修改为自己配置的端口的;本架构中Redis仅用作cache,所以无需配置密码。

5.3、修改代码中MySQL数据库的连接端口并配置密码
[root@localhost gt-education]# vim config/application-prod.yml

文件中50、51、52行分别为MySQL的用户名、密码及地址,可修改为自己配置的用户名、密码和端口

6、测试搭建成果

重启nginx

[root@localhost gt-education]# systemctl restart nginx 

使用浏览器访问虚拟机ip


image.png

登录成功

你可能感兴趣的:(美契国通平台部署文档)