一、服务器要求:
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时会报错,如图:
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
登录成功