一、阿里云 SLB + Nginx + Tomcat 部署
1、项目需求
某企业需要部署 Web 网站,为保证网站能够正常访问,要求使用阿里云 SLB 负载均衡,实现流量分发和故障切换。
2、架构规划
| 服务器 | 数量 | 作用 |
| ------- | --- | --------- |
| 阿里云 SLB | 1 | 公网入口、负载均衡 |
| Nginx | 2 台 | 反向代理 |
| Tomcat | 2 台 | 部署 Web 应用 |
3、验收标准
- 网站能够通过 SLB 公网地址访问。
- 两台 Nginx 均能正常接收请求。
- 两台 Tomcat 均能正常提供页面。
- 单台后端故障时,网站仍能通过健康节点提供服务。
- 能够查看日志并排查常见故障。
4、实施任务
1. 创建 2台 ECS,部署两台 Nginx、Tomcat。
①新用户免费试用
②两台直接都下载nginx和tomcat
③配置第一台172.20.168.69
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的测试网站</title>
<style>
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Arial, "Microsoft YaHei", sans-serif;
background: #f3f6fb;
color: #263247;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.card {
width: min(90%, 520px);
padding: 36px;
background: white;
border-radius: 16px;
box-shadow: 0 10px 30px rgba(30, 60, 100, .12);
text-align: center;
}
h1 { color: #1769aa; margin-top: 0; }
p { line-height: 1.8; color: #5b6678; }
.server {
margin: 22px 0;
padding: 12px;
background: #eef6ff;
border-radius: 8px;
color: #1769aa;
}
button {
border: 0;
border-radius: 8px;
padding: 11px 22px;
color: white;
background: #1769aa;
font-size: 15px;
cursor: pointer;
}
button:hover { background: #0f5288; }
#message { min-height: 24px; margin-bottom: 0; }
</style>
</head>
<body>
<main class="card">
<h1>欢迎访问我的网站!</h1>
<p>这是一个简单的 HTML 测试页面。</p>
<div class="server">服务状态:运行正常</div>
<button onclick="showMessage()">点击测试</button>
<p id="message"></p>
</main>
<script>
function showMessage() {
document.getElementById("message").textContent = "页面访问成功!";
}
</script>
</body>
</html>
④配置第二台172.17.174.148
2. 创建 SLB,配置公网监听 80 端口。
或者
3. 将两台 Nginx 添加到 SLB 后端服务器组。
4. 配置 Nginx 反向代理,将请求转发到两台 Tomcat。
①配置第一台172.20.168.69
②配置第二台172.17.174.148
5. 两台 Tomcat 部署不同标识的测试页面。
①配置第一台172.20.168.69
②配置第二台172.17.174.148
6. 通过 SLB 公网地址访问网站,验证流量分发。
7. 停止一台 Nginx 或 Tomcat,测试故障切换。
①停止一台nginx(172.17.174.148)
②停止一台tomcat(172.17.174.148)
二、部署 Discuz!社区论坛 Web 应用
1、 根据文档进行部署
文档内容:
【安装 Nginx 服务】
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2、创建运行用户
useradd -M -s /sbin/nologin nginx
3、编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/''.6hvcf
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
【安装 MySQL 服务】
一、编译安装
==================================================================================================
1、安装Mysql环境依赖包
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake
2、创建运行用户
useradd -M -s /sbin/nologin mysql
3、编译安装
cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz
cd /opt/mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make && make install
4、修改mysql 配置文件
vim /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
5、更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
6、设置路径环境变量
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile
7、初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
8、添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
9、修改mysql 的登录密码
mysqladmin -u root -p password "abc123"
10、授权远程登录
mysql -u root -p
=========================================================================
二、yum安装
1、添加 MySQL 官方 Yum 源
1.1 下载 MySQL 5.7 的 Yum 源安装包
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
1.2 安装这个源,将其添加到系统的仓库列表中
sudo rpm -ivh mysql57-community-release-el7-8.noarch.rpm
#执行完这一步后,你会在 `/etc/yum.repos.d/` 目录下看到 `mysql-community.repo` 文件,它就是我们的仓库配置文件。
2. 检查并确认 MySQL 5.7 源已启用
yum repolist enabled | grep mysql
#如果列表里出现了 `mysql57-community`,就说明源配置正确。
如果不放心,也可以手动编辑配置文件确认:
vim /etc/yum.repos.d/mysql-community.repo
#在文件中找到 `[mysql57-community]` 这一节,确保 `enabled=1`。如果系统预装了其他版本的 MySQL(比如 MariaDB),建议先在文件中将其对应的源禁用(`enabled=0`),以避免冲突。
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0 #这个要设置不验证
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
3.安装 MySQL 5.7.20 服务器
sudo yum install mysql-community-server #安装过程中,系统会提示你确认下载,输入 `y` 并回车即可。
4. 启动 MySQL 并设置开机自启
# 启动 MySQL 服务
sudo systemctl start mysqld
# 设置 MySQL 服务开机自启动
sudo systemctl enable mysqld
5. 获取初始密码并登录
#对于 MySQL 5.7,安装后的第一次启动会为 `root` 用户生成一个临时密码,我们需要在日志文件中找到它。
sudo grep 'temporary password' /var/log/mysqld.log
#命令执行后会返回类似下面的信息,其中 `MkarQyrS6v/U` 就是临时密码。
A temporary password is generated for root@localhost: MkarQyrS6v/U
接下来,使用这个临时密码登录 MySQL:
mysql -u root -p #系统提示输入密码时,粘贴刚才查到的临时密码即可。
6. 修改 Root 密码
出于安全策略,首次登录后 MySQL 会强制要求你修改 root 密码。在 MySQL 命令行中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz@WSX' PASSWORD EXPIRE NEVER;
#MySQL 5.7 有默认的密码强度要求(需包含大小写字母、数字和特殊字符),如果不想设置复杂密码,可以先调整密码验证策略,再执行修改命令。
-------------------------
#查看当前的密码策略(可选)
SHOW VARIABLES LIKE 'validate_password%';
-- 关闭对大小写字母的要求
SET GLOBAL validate_password_mixed_case_count = 0;
-- 关闭对数字的要求
SET GLOBAL validate_password_number_count = 0;
-- 关闭对特殊字符的要求
SET GLOBAL validate_password_special_char_count = 0;
-------------------------------------------------
#如果你只关心密码长度,不关心复杂度,可以执行:
SET GLOBAL validate_password_policy = 'LOW';
#密码仍然必须满足最小长度要求(默认是 8 位),如果你想设置更短的密码 如下
SET GLOBAL validate_password_length = 6;
========================================================================
【安装配置 PHP 解析环境】
1、安装环境依赖包
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
2、编译安装
cd /opt
tar jxvf php-7.1.10.tar.bz2
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
make && make install
3、路径优化
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
4、调整PHP配置文件
php有三个配置文件:
php.ini 主配置文件
php-fpm.conf 进程服务配置文件
www.conf 扩展配置文件
#调整主配置文件:
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai
php -m #验证安装的模块
#调整进程服务配置文件:
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
5、启动php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000
#PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。
cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service
6、配置 Nginx 支持 PHP 解析
vim /usr/local/nginx/conf/nginx.conf
--65行--取消注释,修改
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #将 /scripts 修改为nginx的工作目录
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #$document_root 代表当前请求在root指令中指定的值
include fastcgi_params;
}
systemctl restart nginx.service
7、验证PHP 测试页
vim /usr/local/nginx/html/index.php
<?php
phpinfo();
?>
浏览器访问
http://192.168.80.10/index.php
8、验证数据库工作是否正常
mysql -u root -p
CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
vim /usr/local/nginx/html/index.php #替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.80.10','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
浏览器访问
http://192.168.80.10/index.php
【部署 Discuz!社区论坛 Web 应用】
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis
cd /opt/dis/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/
调整论坛目录的权限:
cd /usr/local/nginx/html/bbs/
chown -R nginx ./config/
chown -R nginx ./data/
chown -R nginx ./uc_client/
chown -R nginx ./uc_server/
或
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
论坛页面访问
http://192.168.80.10/bbs/install/index.php
----------------------------------------------------------------------------------------------------------
数据库服务器:localhost ###本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号
数据库名字:bbs
数据库用户名:bbsuser
数据库密码:admin123
管理员账号:admin
管理员密码:admin123
----------------------------------------------------------------------------------------------------------
访问论坛页面:
http://192.168.80.10/bbs/index.php
http://192.168.80.10/bbs/admin.php
----------------fpm参数优化-------------------
vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
vim /usr/local/php/etc/php-fpm.d/www.conf
--96行--
pm = dynamic #fpm进程启动方式,动态的
--107行--
pm.max_children=20 #fpm进程启动的最大进程数
--112行--
pm.start_servers = 5 #动态方式下启动时默认开启的进程数,在最小和最大之间
--117行--
pm.min_spare_servers = 2 #动态方式下最小空闲进程数
--122行--
pm.max_spare_servers = 8 #动态方式下最大空闲进程数
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` #重启php-fpm
netstat -anpt | grep 9000
ps -elf | grep php-fpm
截图:
nginx已提前安装部署好,以下从MYSQL开始
【安装 MySQL 服务】
1.安装Mysql环境依赖包
2.创建运行用户
3.编译安装
4.修改mysql 配置文件
5.更改mysql安装目录和配置文件的属主属组
6.设置路径环境变量
7.初始化数据库
8.添加mysqld系统服务
9.修改mysql 的登录密码
10.授权远程登录
【安装配置 PHP 解析环境】
1.安装环境依赖包
2.编译安装
3.路径优化
4.调整PHP配置文件
调整主配置文件
调整进程服务配置文件
调整扩展配置文件
5.启动php-fpm
6.配置 Nginx 支持 PHP 解析
7.验证PHP 测试页
8.验证数据库工作是否正常
9.浏览器访问
【部署 Discuz!社区论坛 Web 应用】
编译安装
调整论坛目录的权限
2、提交方式登录论坛 并且创建自己账号
(比如root)发一条论坛
3、截图 自己账号发一条论坛内容
(例如:老师下次多布置点作业,我们太闲了)