- 实验目的
实验目的通常是让学生掌握在RedHat Linux系统上部署LAMP平台的技能,了解各组件的基本配置和使用,以及如何通过它们构建一个基本的Web应用环境。
- 学习和掌握Linux、Apache、MySQL、PHP等相关技术:通过部署LAMP集群,可以深入学习Linux操作系统的使用,以及Apache、MySQL、PHP等软件的配置和管理,从而提升对这些技术的理解和掌握。
- 提高Web服务器的性能和稳定性:LAMP集群可以提供高性能、高并发的Web服务,通过负载均衡和容错机制,可以有效提高服务器的稳定性和可用性。
- 降低成本:通过云计算的弹性伸缩和按需付费等特点,可以降低服务器的硬件成本和维护成本,提高资源的利用率。
- 探索云计算和大数据应用:通过部署LAMP集群,可以进一步探索云计算和大数据应用的相关技术和实践,为未来的学习和工作打下坚实的基础。
- 实践操作能力提升:部署LAMP集群需要进行一系列的实践操作,包括服务器的选购、配置、部署和管理等,可以提升实践操作能力,加深对相关知识的理解和运用。
二、实验内容:
需求:
Centos自动化部署LAMP平台
LAMP简介:
LAMP是Linux、Apache、Mysql/MariaDB、PHP的简称,LAMP通常被用来建站,或者运行 Web 应用程序。
Apache是web服务器软件,用来提供http服务。Nginx也一样。
Mysql/MariaDB 是关系型数据库管理系统,它用于存储和管理数据。
PHP是一种在服务器端执行的嵌入html文档的脚本语言
LAMP是一组通常一起使用来运行动态网站或服务器的自由软件名称首字母缩写,具体包括:
- Linux:操作系统。LAMP架构的基础,提供底层系统支持,包括硬件抽象、多任务环境、资源管理和网络功能等。
- Apache:网页服务器。它提供了一个用于发布和提供网页的框架,可以处理HTTP请求并返回相应的网页内容。Apache服务器因其高性能和灵活性而广泛应用。
- MySQL/MariaDB:数据库管理系统。它提供了数据存储、检索和管理功能,使得网站能够存储用户数据、文章、评论等动态内容。MySQL/MariaDB是开源的,并且具有高性能和可扩展性。
- PHP/Perl/Python:编程语言。这些语言用于编写服务器端脚本,处理来自浏览器的请求,并与数据库进行交互。它们可以生成动态网页内容,实现用户交互和数据处理等功能。
LAMP架构的优势在于其开源、免费、跨平台等特性,使得它成为构建动态网站和Web应用程序的流行选择。此外,LAMP架构还具有良好的可扩展性和可定制性,可以根据项目的具体需求进行调整和优化。
总之,LAMP架构是一种稳定、高效、灵活和可扩展的Web开发环境,适用于各种规模的网站和Web应用程序。
完成
需求:
- RedHat Linux系统已安装并配置好网络。
- 系统已连接到互联网以便下载必要的软件包。
步骤:
- 安装Apache
- 使用YUM或DNF命令安装Apache。
- 启动Apache服务并设置开机自启。
- 测试Apache是否正常运行(通常是通过访问http://localhost或服务器的IP地址)。
- 安装MySQL/MariaDB
- 使用YUM或DNF命令安装MySQL或MariaDB。
- 启动数据库服务并设置开机自启。
- 运行MySQL的安全安装脚本以设置root密码、删除匿名用户等。
- 创建一个用于Web应用的数据库和用户。
- 安装PHP
- 使用YUM或DNF命令安装PHP及其相关模块(如php-mysqli,用于连接MySQL数据库)。
- 配置Apache以支持PHP(通常在httpd.conf或额外的配置文件中)。
- 创建一个PHP测试页面并放置在Apache的文档根目录下。
- 访问测试页面以确保PHP能够正确解析和执行。
- 配置LAMP平台
- 根据需要调整Apache、MySQL/MariaDB和PHP的配置文件。
- 确保所有服务都正常运行并相互兼容。
- 部署Web应用
- 将Web应用的代码和文件上传到服务器的适当位置。
- 配置Web应用以连接到数据库(如果需要)。
- 测试Web应用以确保它能够正常工作。
完成情况:
- 在centos、centostest和centosdatabase三台机器进行LAMP平台的配置。
- centos安装PHP和Apache,通过phpMyAdmin允许访问centosdatabase的数据库,centosdatabase安装数据库MySQL/MariaDB。
- centos’test允许访问Red Hat,Red Hat允许访问centosdatabase,但centostest不能访问centosdatabase
- 增加centos服务Apche的端口10080和修改centosdatabase服务Mariadb端口30301和增加三台机器的服务ssh端口10022
- 三台机器都可以通过Mobaxterm远程连接
- 三台机器不允许互相连接
- centostest只允许通过Apche端口10080访问centos,centos只允许通过端口30301访问centosdatabase,但centostest不能访问centosdatabase
- 用到三台机器IP地址分别是centostest:10.0.0.119;centos:10.0.0.219;centosdatabase:10.0.0.110。
- Apache的版本为2.4.6,PHP的版本为8.0.30,MySQL的版本为5.7.25,phpMyAdmin的版本为latest
- Apache已成功安装并配置为监听默认端口(通常为80)和10080。
- MySQL/MariaDB已成功安装并配置为允许远程连接。
- PHP已成功安装并配置为与Apache一起工作。
- Web应用已成功部署并可以在互联网上访问。
测试结果:
- 通过访问服务器的IP地址或域名,可以成功看到默认的Apache欢迎页面或自定义的PHP测试页面。
- 如果部署了Web应用,可以成功访问应用的各个页面并执行相应的功能。
- 数据库连接测试成功,Web应用可以读取和写入数据库中的数据。
三、实验结果
注意:在进行部署LAMP平台前,输入yum update/yum -y update用于更新系统上已安装的软件包到其最新版本,防止后续出现问题,服务无法生效。
部署LAMP平台的环境安全要求【三台机器】在自己配置防火墙规则前,必须保证防火墙全部关闭,selinux模式为disabled/permissive,才能访问网页(再三强调)
- 查看防火墙状态
输入systemctl status firewalld,查看防火墙状态
- 若防火墙状态为active(running),关闭防火墙;若防火墙状态为inactive(dead),则不需要进行操作。
输入systemctl stop firewalld,关闭防火墙
- 查看防火墙状态
输入systemctl status firewalld,查看防火墙状态,查看防火墙是否关闭,inactive(dead)表示已关闭防火墙
- 查看selinux模式
输入getenforce,查看selinux模式
- 若selinux模式为Enforcing,则改变selinux模式;若selinux模式为Permissive或Disabled,则不需要进行操作。
a.输入setenforce 0,改变selinux模式为Permissive,输入getenforce,查看selinux模式是否修改,Permissive表示修改selinux模式成功
b.输入vim /etc/selinux/config,进入selinux配置文件,找到以SELINUX=开头的行,将SELINUX=后面的值更改为disabled,永久关闭selinux,重启虚拟机,使selinux修改生效,输入getenforce,查看selinux模式是否修改,Disabled表示修改selinux模式成功,永久关闭selinux
部署LAMP平台的主函数【三台机器】
1.创建一个main.sh脚本
输入vim main.sh
#!/bin/bash
while true; do
clear
echo -e "Welcome\n"
echo "1. Apache"
echo "2. php/php-fpm"
echo "3. phpMyAdmin"
echo "4. Database"
echo "5. firewalld(web)"
echo "6. firewalld(Database)"
echo "7. firewalld(test)"
echo "8. exit"
read -p "请输入您的选择: " choice
case $choice in
1)
./Apache.sh
;;
2)
./php.sh
;;
3)
./phpMyAdmin.sh
;;
4)
./Database.sh
;;
5)
./firewalldweb.sh
;;
6)
./firewalldDatabase.sh
;;
7)
./firewalldtest.sh
;;
8)
echo -e "\n退出中..."
exit 0
;;
*)
echo -e "\n无效的选择。请输入1到8之间的数字。\n"
;;
esac
read -n1 -r -p "按任意键继续..."
done
main.sh脚本是一个主菜单脚本,它提供了一个用户界面,让用户可以选择执行一系列不同的脚本,用于自动化部署。
- 无限循环:while true; do ... done创建了一个无限循环,这意味着脚本将一直运行,除非用户选择退出(选项8)。
- 清屏:clear命令用于清除终端屏幕上的内容,每次循环时都会执行此操作,确保用户始终看到一个清晰的菜单。
- 显示菜单:脚本使用echo命令在屏幕上显示一个菜单,列出用户可以选择的选项。
- 读取用户输入:read -p "请输入您的选择: " choice命令用于从用户那里获取输入,并将其存储在变量choice中。
- 执行子脚本:根据用户的输入(存储在choice变量中),脚本使用case语句来决定执行哪个子脚本(如./Apache.sh、./php.sh等)。这些子脚本应该位于与main.sh相同的目录中,或者其路径应该在脚本中正确指定。
- 退出:如果用户选择选项8,脚本将显示一条消息并退出,返回状态码0(表示成功)。
- 错误处理:如果用户输入了一个无效的选择(即不是1到8之间的数字),脚本将显示一条错误消息,并提示用户输入一个有效的选择。
- 等待用户按键:在每次执行完子脚本或显示错误消息后,脚本都会等待用户按下一个键(read -n1 -r -p "按任意键继续..."),然后再次显示菜单。
2.赋予脚本可执行权限
输入chmod +x main.sh
3.执行脚本
输入./main.sh
部署LAMP平台的A,即Apache(httpd)【centos】
1.创建一个Apache.sh脚本
输入vim Apache.sh
#!/bin/bash
# 检查是否已经安装Apache
function apachecheck(){
echo "[INFO] 检查是否已经安装Apache..."
if command -v httpd &> /dev/null; then
echo "[INFO] Apache 已安装."
read -p "是否要删除已安装的Apache? (Y/N): " confirm
if [[ $confirm == [Yy] ]]; then
echo "[INFO] 删除已安装的httpd..."
systemctl stop httpd
yum remove -y httpd
else
echo "[INFO] 保留已安装的Apache, 退出脚本."
exit 0
fi
fi
}
#安装Apache
function apacheinstall(){
echo "[INFO] 开始Apache安装, 请等待..."
yum install -y httpd
systemctl start httpd
systemctl status httpd
systemctl enable httpd
}
#修改Apache端口
function apachefix(){
setenforce 0
systemctl stop firewalld
echo "[INFO] 开始修改Apache端口, 请等待..."
echo ' Listen 10080' | sudo tee -a /etc/httpd/conf/httpd.conf >/dev/null
systemctl restart httpd
netstat -tuln
}
#主函数
main(){
apachecheck
apacheinstall
apachefix
}
main
- 检查Apache是否已安装 (apachecheck 函数):
- 检查是否已经安装了httpd(Apache HTTP服务器)命令。
- 如果已安装,询问用户是否要删除它。
- 如果用户选择Y,则停止httpd服务,并使用yum命令卸载它。
- 如果用户选择N或输入了其他内容,则脚本将退出。
- 安装Apache (apacheinstall 函数):
- 使用yum命令安装httpd。
- 启动httpd服务。
- 检查httpd服务的状态。
- 启用httpd服务以便在系统启动时自动运行。
- 修改Apache端口 (apachefix 函数):
- 临时关闭SELinux(通过setenforce 0)。
- 停止firewalld服务(不过通常不推荐直接停止防火墙服务,因为这可能会使系统暴露在不安全的环境中)。
- 在/etc/httpd/conf/httpd.conf文件的末尾追加一行来监听新的端口(10080)。
- 重启httpd服务。
- 显示当前的网络监听情况(使用netstat -tuln)。
主函数 (main):
- 依次调用apachecheck、apacheinstall和apachefix函数。
2.赋予脚本可执行权限
输入chmod +x Apache.sh
3.执行脚本
输入./main.sh
选择1
1.选择Y,删除已安装的Apache并重新安装
2.选择N,不删除Apache
测试Apache是否正常运行
在虚拟机中的火狐浏览器的地址输入栏中,通过访问http://localhost或服务器的IP地址:10080,并按Enter键,显示如下页面表示安装成功。在lamptest机器的火狐浏览器的地址输入栏中,输入http://10.0.0.219:10080,测试Apache是否正常运行,显示如下页面表示安装成功。
部署LAMP平台的P,即PHP【centos】
1.创建一个php.sh脚本
输入vim php.sh
#!/bin/bash
# 检查是否已经安装php
function phpcheck(){
echo "[INFO] 检查是否已经安装php..."
if command -v php &> /dev/null; then
echo "[INFO] php 已安装."
read -p "是否要删除已安装的php? (Y/N): " confirm
if [[ $confirm == [Yy] ]]; then
echo "[INFO] 删除已安装的php..."
yum remove -y php
yum remove -y php-mysqli
yum remove -y php-fpm
else
echo "[INFO] 保留已安装的php, 退出脚本."
exit 0
fi
fi
}
#安装php
function phpinstall(){
echo "[INFO] 开始php安装, 请等待..."
yum install -y php
php -v
yum remove -y php*
yum install -y yum-utils
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --disable 'remi-php*'
sudo yum-config-manager --enable remi-php80
sudo yum install -y php
sudo yum install -y php-{extension_name}
php -v
yum install -y php-mysqli
yum install -y php-fpm
systemctl start httpd
systemctl status httpd
}
#修改php配置文件
function phpfix(){
setenforce 0
systemctl stop firewalld
echo "[INFO] 开始修改php配置文件, 请等待..."
touch /var/www/html/phpinfo.php
echo '<?php
phpinfo();
?>' | sudo tee -a /var/www/html/phpinfo.php >/dev/null
systemctl restart httpd
systemctl status httpd
}
#主函数
main(){
phpcheck
phpinstall
phpfix
}
main
1.检查php是否已安装 (phpcheck 函数):
-
- 检查是否已经安装了php命令。
- 如果已安装,询问用户是否要删除它。
- 如果用户选择Y,则停止php服务,并使用yum命令卸载它。
- 如果用户选择N或输入了其他内容,则脚本将退出。
2.安装php(phpinstall 函数):
-
- 使用yum命令安装php。
- 提高PHP的版本。
- 启动httpd服务。
- 检查httpd服务的状态。
3.修改php端口 (phpfix 函数):
-
- 临时关闭SELinux(通过setenforce 0)。
- 停止firewalld服务(不过通常不推荐直接停止防火墙服务,因为这可能会使系统暴露在不安全的环境中)。
- 在/var/www/html/phpinfo.php文件的加入php显示界面,在网站根目录创建测试网页,并把phpinfo()函数添加至网页内容中,phpinfo()函数会展示PHP的所有配置信息。
- 重启httpd服务。
主函数 (main):
- 依次调用phpcheck、phpinstall和phpfix函数。
2.赋予脚本可执行权限
输入chmod +x php.sh
3.执行脚本
输入./main.sh
选择2
1.选择Y,删除已安装的php并重新安装
2.选择N,不删除php
测试PHP是否正常运行
在虚拟机中的火狐浏览器的地址输入栏中,通过访问http://localhost或服务器的IP地址:10080/phpinfo.php,并按Enter键,显示如下页面表示安装成功。在lamptest机器的火狐浏览器的地址输入栏中,输入http://10.0.0.219:10080/phpinfo.php
,测试PHP是否正常运行,显示如下页面表示安装成功。
部署LAMP平台的M,即Mysql【centosdatabase】
1.创建一个Database.sh脚本
输入vim Database.sh
#!/bin/bash
# date: 2024-01-21
# file: mysql5.7.sh
# info: 安装mysql5.7
########################################################################
binDir='/usr/local/mysql' # mysql程序安装目录
dataDir='/bigdata/mysql/mysqldata' # mysql数据存储目录
mysqlPassword='123456' # mysql超级用户密码
########################################################################
BASE=$(cd `dirname $0` && pwd)
cd $BASE
check() {
# 检查路径变量, 附上rm -fr误删
keyword='/mysql'
if ! echo "${binDir}" |grep ${keyword} &>/dev/null; then
echo "[ERROR] ${binDir}配置错误, 没有包含${keyword}"
exit 1
fi
if ! echo "${dataDir}" |grep ${keyword} &>/dev/null; then
echo "[ERROR] ${dataDir}配置错误, 没有包含${keyword}"
exit 1
fi
}
installmysql() {
# 解压
echo "[INFO] 开始解压mysql安装包, 请等待..."
tar zxf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz && mv mysql-5.7.25-linux-glibc2.12-x86_64 ${binDir}
}
mkdirmysql() {
setenforce 0
systemctl stop firewalld
# 添加用户组
echo "[INFO] 创建mysql组与用户..."
groupadd mysql 2>/dev/null
useradd -r -g mysql mysql 2>/dev/null
# 创建数据目录
echo "[INFO] 创建mysql数据目录..."
mkdir -p ${dataDir} && chown -R mysql:mysql ${dataDir}
chown -R mysql:mysql ${binDir}
# 创建mysql配置文件
echo "[INFO] 创建mysql配置文件:/etc/my.cnf ..."
read -p "输入mysql连接的端口" PORT
cat >/etc/my.cnf <<EOF
[mysqld]
character-set-server=utf8
server-id = 1
lower_case_table_names=1
basedir=${binDir}
datadir=${dataDir}
user=mysql
symbolic-links=0
federated
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
port=$PORT
[client]
default-character-set=utf8
[mysqld_safe]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
EOF
}
usemysql() {
# 初始化mysql
echo "[INFO] 初始化mysql..."
${binDir}/bin/mysqld --defaults-file=/etc/my.cnf --basedir=${binDir} --datadir=${dataDir} --user=mysql --initialize-insecure
# 添加开机启动
echo "[INFO] 添加mysql服务, 以及开机启动..."
ln -sf ${binDir}/bin/mysql /usr/local/bin/mysql
ln -sf ${binDir}/support-files/mysql.server /etc/init.d/mysql
/usr/bin/systemctl enable mysql
# 启动mysql
echo "[INFO] 启动mysql服务..."
service mysql start
if [ $? -ne 0 ];then
echo "[ERROR] mysql启动失败, 查看mysql日志: ${dataDir}下的.err文件"
exit 2
fi
}
adduser(){
read -p "请输入想要添加的用户名:" name
read -p "请输入想要添加的密码:" passwd
read -p "请输入想要添加的IP:" ip
echo "[INFO] 修改mysql用户密码..."
${binDir}/bin/mysql -uroot <<EOF
SET PASSWORD = PASSWORD('${mysqlPassword}');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
create database $name;
create user '$name' identified by '$passwd';
grant all on *.* to $name@"$ip" identified by "$passwd";
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
EOF
}
#检查Mysql是否存在
checkmysql() {
echo "[INFO] 检查是否已经安装php..."
if command -v mysql &> /dev/null; then
echo "MySQL服务已安装。"
read -p "是否要删除已安装的MySQL? (Y/N): " confirm
if [[ $confirm == [Yy] ]]; then
echo "[INFO] 删除已安装的MySQL..."
service mysql stop &>/dev/null
test -d ${binDir}
rm -rf ${binDir}
test -d ${dataDir}
rm -rf ${dataDir}
else
echo "[INFO] 保留已安装的php, 退出脚本."
exit 0
fi
fi
}
#主函数
main(){
checkmysql
check
installmysql
mkdirmysql
usemysql
adduser
}
main
- 设置目录变量:脚本开始时定义了一些目录变量,包括 MySQL 程序的安装目录 (binDir) 和数据存储目录 (dataDir)。还设置了一个默认的 MySQL 超级用户密码 (mysqlPassword)。
- 检查路径变量:check 函数用于检查 binDir 和 dataDir 是否包含 /mysql 字符串,以确保这些路径设置得当。如果路径配置错误,脚本会打印错误信息并退出。
- 解压 MySQL 安装包:installmysql 函数会解压名为 mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 的 MySQL 安装包,并将其移动到 binDir 指定的目录中。
- 创建 MySQL 用户、组和目录:mkdirmysql 函数执行以下操作:
- 禁用 SELinux (setenforce 0),这可能会降低系统安全性,通常不建议在生产环境中执行此操作。
- 停止防火墙服务 (systemctl stop firewalld),同样,这也可能会降低系统安全性。
- 创建一个名为 mysql 的用户组和一个名为 mysql 的系统用户,并将该用户添加到 mysql 组中。
- 创建一个数据目录 (dataDir),并设置其所有者和组为 mysql。
- 创建一个配置文件 /etc/my.cnf,用于配置 MySQL 服务器。脚本会提示用户输入 MySQL 连接的端口号,并将该端口号写入配置文件中。
- checkmysql:
- 这个函数检查系统是否已经安装了 MySQL。它通过尝试执行 mysql 命令来检查 MySQL 是否已安装。
- 如果 MySQL 已安装,它会询问用户是否要删除已安装的 MySQL。如果用户确认(输入 Y 或 y),则会停止 MySQL 服务,并删除之前定义的 binDir 和 dataDir 目录下的所有内容。
- 如果用户选择不删除已安装的 MySQL,则脚本会退出。
- check:
- 这个函数之前已经介绍过,它检查 binDir 和 dataDir 路径变量是否包含 /mysql 字符串,以确保路径设置正确。
- installmysql:
- 这个函数负责解压 MySQL 安装包,并将其移动到 binDir 指定的目录中。不过,需要注意的是,这个函数的名字是 installmysql,但实际上它只是解压和移动了文件,并没有真正安装 MySQL。
- mkdirmysql:
- 这个函数之前已经介绍过,它创建 MySQL 所需的用户、组、数据目录,并生成配置文件 /etc/my.cnf。
- usemysql:
- 这个函数负责初始化 MySQL 数据库,并设置开机启动。
- 它使用 --initialize-insecure 选项来初始化 MySQL,这意味着 root 用户没有密码(这是不安全的,但在某些场景下可能是可接受的)。
- 接着,它创建指向 MySQL 命令的符号链接,以便可以从任何地方调用它。
- 然后,它尝试将 MySQL 服务添加到系统服务中,并启用开机启动。
- 最后,它启动 MySQL 服务,并检查是否成功启动。如果启动失败,它会提示用户查看 MySQL 错误日志文件。
- adduser:
- 这个函数允许用户添加一个新的 MySQL 用户,并为其分配权限。
- 它首先提示用户输入用户名、密码和 IP 地址。
- 然后,它使用 mysql 客户端连接到 MySQL 服务器,并执行一系列 SQL 命令来修改 root 用户的密码、创建新数据库、创建新用户、为新用户分配权限,并刷新权限。
- main:
- 这是脚本的主函数,它按照顺序调用上述所有函数来执行 MySQL 的安装、配置和用户添加过程。
2.赋予脚本可执行权限
输入chmod +x Database.sh
3.执行脚本
输入./main.sh
选择4
1.选择Y,删除已安装的mysql并重新安装
2.选择N,不删除mysql
部署LAMP平台的Web应用,即phpMyadmin【centos】
1.创建一个phpMyAdmin.sh脚本
输入vim phpMyAdmin.sh
#!/bin/bash
# 检查是否已经安装phpMyAdmin
function phpMyAdmincheck() {
echo "[INFO] 检查是否已经安装phpMyAdmin..."
if [ -d "/var/www/html/phpMyAdmin" ]; then
echo "[INFO] phpMyAdmin 已安装."
read -p "是否要删除已安装的phpMyAdmin? (Y/N): " confirm
if [[ $confirm == [Yy] ]]; then
echo "[INFO] 删除已安装的phpMyAdmin..."
# 注意:这里使用 rm -rf 需要非常小心,因为它会递归地删除目录及其内容
# 在生产环境中,建议先进行备份
rm -rf /var/www/html/phpMyAdmin
echo "[INFO] phpMyAdmin 已删除."
else
echo "[INFO] 保留已安装的phpMyAdmin, 退出脚本."
exit 0
fi
else
echo "[INFO] phpMyAdmin 未安装."
fi
}
#安装phpMyAdmin
function phpMyAdmininstall(){
echo "[INFO] 开始phpMyAdmin安装, 请等待..."
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
cd /var/www/html/
mkdir phpMyAdmin
tar -xvzf /root/phpMyAdmin-latest-all-languages.tar.gz -C /var/www/html/phpMyAdmin --strip-components 1
yum install php-mbstring php-xml -y
systemctl restart httpd.service
systemctl restart php-fpm.service
}
# 配置phpMyAdmin
function phpMyAdminfix() {
setenforce 0
systemctl stop firewalld
cd /var/www/html/phpMyAdmin
cp config.sample.inc.php config.inc.php
# 设置配置文件路径
CONFIG_FILE="/var/www/html/phpMyAdmin/config.inc.php"
# 备份原始文件
cp "$CONFIG_FILE" "$CONFIG_FILE.bak"
# 索引值,phpMyAdmin通常使用1作为默认服务器索引
I=1
# 新的数据库连接信息
HOST='10.0.0.110'
USER='zengnan'
PASSWORD='123456'
PORT='30301'
# 检查配置项是否存在,如果不存在则追加到文件末尾
function append_if_not_exists() {
local key="$1"
local value="$2"
grep -qF "\$cfg['Servers'][$I]['$key'] = $value;" "$CONFIG_FILE" || echo "\$cfg['Servers'][$I]['$key'] = $value;" >> "$CONFIG_FILE"
}
# 使用函数追加配置项
append_if_not_exists 'host' "'$HOST'"
append_if_not_exists 'compress' 'false'
append_if_not_exists 'AllowNoPassword' 'false'
append_if_not_exists 'user' "'$USER'"
append_if_not_exists 'password' "'$PASSWORD'"
append_if_not_exists 'port' "'$PORT'"
append_if_not_exists 'socket' "''"
systemctl restart php-fpm
systemctl restart httpd
setenforce 0
systemctl stop firewalld.service
}
#主函数
main(){
phpMyAdmincheck
phpMyAdmininstall
phpMyAdminfix
}
main
1. phpMyAdmincheck
- 功能:检查是否已经安装了 phpMyAdmin。
- 过程:
- 检查
/var/www/html/phpMyAdmin
目录是否存在。 - 如果存在,则提示用户是否要删除已安装的 phpMyAdmin。
- 如果用户确认(输入
Y
或y
),则删除/var/www/html/phpMyAdmin
目录。 - 如果目录不存在,则输出 phpMyAdmin 未安装的消息。
- 检查
2. phpMyAdmininstall
- 功能:安装 phpMyAdmin。
- 过程:
- 下载最新的 phpMyAdmin 压缩包。
- 切换到
/var/www/html/
目录。 - 创建一个名为
phpMyAdmin
的目录。 - 解压下载的压缩包到
/var/www/html/phpMyAdmin
目录,并移除一层目录结构(--strip-components 1
)。 - 安装 PHP 的
mbstring
和xml
扩展。 - 重启
httpd
(Apache HTTP 服务器)和php-fpm
(PHP FastCGI 进程管理器)服务。
3. phpMyAdminfix
- 功能:配置 phpMyAdmin。
- 过程:
- 临时禁用 SELinux(通过
setenforce 0
)和防火墙服务(通过systemctl stop firewalld
)。注意,在生产环境中长期禁用 SELinux 或防火墙是不安全的。 - 切换到
/var/www/html/phpMyAdmin
目录。 - 复制
config.sample.inc.php
到config.inc.php
(这是 phpMyAdmin 的配置文件)。 - 备份原始的配置文件(
config.inc.php
)。 - 定义了一个名为
append_if_not_exists
的函数,该函数用于检查config.inc.php
中是否存在某个配置项,如果不存在则追加到文件末尾。 - 使用
append_if_not_exists
函数,向config.inc.php
文件中追加或更新数据库连接信息(如主机名、用户名、密码、端口等)。
- 临时禁用 SELinux(通过
3. main
-
- 这是脚本的主函数,它按照顺序调用上述所有函数来执行 phpMyAdmin的安装、配置和用户添加过程。
2.赋予脚本可执行权限
输入chmod +xphpMy'Admi.sh
3.执行脚本
输入./main.sh
选择3
1.选择Y,删除已安装phpMyAdmin并重新安装
2.选择N,不删除phpMyAdmin
登录phpMyAdmin
测试phpMyAdmin是否正常运行
在虚拟机中的火狐浏览器的地址输入栏中,通过访问http://localhost或服务器的IP地址:10080/phpMyAdmin/index.php,并按Enter键,显示如下页面表示安装成功。在lamptest机器的火狐浏览器的地址输入栏中,输入http://10.0.0.219:10080/phpMyAdmin/index.php
,测试phpMyAdmin是否正常运行,显示如下页面表示安装成功。
使用的cookie认证,输入用户密码
部署LAMP平台之允许三台机器在防火墙开启的状态下可以远程连接和在特定端口 访问网页以及三台机器相互之间不能访问(利用防火墙规则firewalld)【三台机器】
若要访问新增端口的phpMyAdmin网页,会出现虚拟机中火狐浏览器安全问题无法访问,需要进行如下操作,即可访问网页。
打开新标签页->地址栏输入about:config->点击回车->搜索首选项network.security.ports.banned.override->如果没有添加,将String值填入10080->保存后重启浏览器。
1.1.
部署LAMP平台之web服务器的防火墙和互相不访问【centos】
1.创建一个firewalldweb.sh脚本
输入vim firewalldweb.sh
#!/bin/bash
#修改ssh端口
fix_ssh(){
# 备份SELinux配置文件
cp /etc/selinux/config /etc/selinux/config.bak
echo "[INFO] SELinux配置文件已备份为/etc/selinux/config.bak"
# 修改SELinux状态为disabled
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "[INFO] SELinux状态已设置为disabled"
# 询问用户是否立即重启系统
read -p "SELinux状态已更改,是否现在重启系统?(y/n) " answer
case $answer in
y|Y )
echo "[INFO] 正在重启系统..."
sudo reboot
;;
n|N )
echo "[INFO] 系统未重启,SELinux状态将在下次重启时生效。"
;;
* )
echo "错误:无效的输入,请输入y或n。"
;;
esac
#修改ssh端口
echo "[INFO] 修改ssh端口号..."
echo ' Port 10022' | sudo tee -a /etc/ssh/sshd_config >/dev/null
#重启mysql
service sshd restart
}
# 检查并添加防火墙规则的函数
add_firewall_rule() {
local rule=$1
if firewall-cmd --permanent --query-rich-rule="$rule"; then
echo "规则已存在: $rule"
else
firewall-cmd --permanent --add-rich-rule="$rule"
echo "添加成功: $rule"
fi
}
# 配置 Web 端防火墙
configure_web_firewall() {
echo "配置 Web 端防火墙..."
systemctl start firewalld.service
systemctl restart firewalld.service
firewall-cmd --list-all
firewall-cmd --add-port=10022/tcp --permanent
add_firewall_rule 'rule family="ipv4" source address="10.0.0.119" port protocol="tcp" port="10080" accept'
add_firewall_rule 'rule family="ipv4" source address="10.0.0.119" port protocol="tcp" port="80" reject'
firewall-cmd --reload
add_firewall_rule 'rule family="ipv4" source address="10.0.0.119" port protocol="tcp" port="10022" reject'
add_firewall_rule 'rule family="ipv4" source address="10.0.0.110" port protocol="tcp" port="10022" reject'
firewall-cmd --reload
firewall-cmd --list-all
}
#主函数
main(){
fix_ssh
add_firewall_rule
configure_web_firewall
}
main
- 修改 SSH 端口:
- 备份 /etc/selinux/config 文件,该文件是 SELinux(Security-Enhanced Linux)的配置文件。
- 使用 sed 命令将 SELinux 的状态设置为 disabled(尽管这通常与修改 SSH 端口不直接相关,但脚本中确实包含了这个步骤)。
- 询问用户是否立即重启系统以使 SELinux 的更改生效。
- 在 /etc/ssh/sshd_config 文件的末尾追加一行来设置 SSH 端口为 10022。
- 重启 SSH 服务 (sshd) 以使端口更改生效。
- 检查并添加防火墙规则:
- 定义了 add_firewall_rule 函数,该函数用于向防火墙添加或检查规则是否存在。
- 但请注意,在 main 函数中调用 add_firewall_rule 时没有提供任何参数,这会导致函数尝试添加一个空的规则,这不是预期的行为。
- 配置 Web 端防火墙:
- 启动并重启 firewalld 服务(但重启是不必要的,因为启动后它已经在运行)。
- 使用 firewall-cmd 添加 SSH 的新端口(10022)到防火墙的永久规则中。
- 调用 add_firewall_rule 函数来添加一些具体的富规则(rich rules),允许或拒绝来自特定 IP 地址和端口的流量。
- 重新加载防火墙规则。
- 再次调用 add_firewall_rule 函数(这次仍然是不带参数的,因此是无效的)。
- 列出所有防火墙规则。
2.赋予脚本可执行权限
输入chmod +x Database.sh
3.执行脚本
输入./main.sh
选择5
部署LAMP平台之Database的防火墙和互相不访问【centosdatabase】
1.创建一个firewallddatabase.sh脚本
输入vim firewallddatabase.sh
#!/bin/bash
#修改ssh端口
fix_ssh(){
# 备份SELinux配置文件
cp /etc/selinux/config /etc/selinux/config.bak
echo "[INFO] SELinux配置文件已备份为/etc/selinux/config.bak"
# 修改SELinux状态为disabled
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "[INFO] SELinux状态已设置为disabled"
# 询问用户是否立即重启系统
read -p "SELinux状态已更改,是否现在重启系统?(y/n) " answer
case $answer in
y|Y )
echo "[INFO] 正在重启系统..."
sudo reboot
;;
n|N )
echo "[INFO] 系统未重启,SELinux状态将在下次重启时生效。"
;;
* )
echo "错误:无效的输入,请输入y或n。"
;;
esac
#修改ssh端口
echo "[INFO] 修改ssh端口号..."
echo ' Port 10022' | sudo tee -a /etc/ssh/sshd_config >/dev/null
#重启mysql
service sshd restart
}
# 检查并添加防火墙规则的函数
add_firewall_rule() {
local rule=$1
if firewall-cmd --permanent --query-rich-rule="$rule"; then
echo "规则已存在: $rule"
exit 0
else
firewall-cmd --permanent --add-rich-rule="$rule"
echo "添加成功: $rule"
fi
}
# 配置 MySQL 端防火墙
configure_mysql_firewall() {
echo "配置 MySQL 端防火墙..."
systemctl start firewalld.service
systemctl restart firewalld.service
firewall-cmd --add-port=10022/tcp --permanent
add_firewall_rule 'rule family="ipv4" source address="10.0.0.219" port protocol="tcp" port="30317" accept'
add_firewall_rule 'rule family="ipv4" source address="10.0.0.119" port protocol="tcp" port="10022" reject'
add_firewall_rule 'rule family="ipv4" source address="10.0.0.219" port protocol="tcp" port="10022" reject'
firewall-cmd --reload
firewall-cmd --list-all
}
#主函数
main(){
fix_ssh
add_firewall_rule
configure_mysql_firewall
}
main
- 修改 SSH 端口:
- 备份 SELinux 配置文件 /etc/selinux/config 到 /etc/selinux/config.bak。
- 将 SELinux 的状态修改为 disabled。
- 询问用户是否立即重启系统以应用 SELinux 的更改。
- 在 /etc/ssh/sshd_config 文件的末尾追加一行来设置 SSH 端口为 10022。
- 重启 SSH 服务 sshd 以使端口更改生效。
- 检查并添加防火墙规则:
- 定义了一个函数 add_firewall_rule,它接受一个参数(即防火墙规则),并检查该规则是否已经存在。如果不存在,它将添加该规则。
- 配置 MySQL 端防火墙:
- 这个函数的名称可能是误导的,因为它实际上是配置防火墙来允许或拒绝与 SSH(端口 10022)和可能的 MySQL(端口通常不是 10022,但在这个脚本中未明确)相关的流量。
- 启动并重启 firewalld 服务(尽管重启是不必要的,因为服务在启动后已经在运行)。
- 永久地添加 SSH 的新端口(10022)到防火墙规则中。
- 使用 add_firewall_rule 函数添加几个富规则,允许或拒绝来自特定 IP 地址和端口的流量。这些规则与 MySQL 没有直接关系,除非 MySQL 服务运行在端口 30317 上,但通常 MySQL 使用 3306 作为默认端口。
- 重新加载防火墙规则以使更改生效。
- 列出所有防火墙规则。
2.赋予脚本可执行权限
输入chmod +x Database.sh
3.执行脚本
输入./main.sh
选择6
部署LAMP平台之test的防火墙和互相不访问【centostest】
1.创建一个firewalldtest.sh脚本
输入vim firewalldtest.sh
#!/bin/bash
#修改ssh端口
fix_ssh(){
# 备份SELinux配置文件
cp /etc/selinux/config /etc/selinux/config.bak
echo "[INFO] SELinux配置文件已备份为/etc/selinux/config.bak"
# 修改SELinux状态为disabled
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "[INFO] SELinux状态已设置为disabled"
# 询问用户是否立即重启系统
read -p "SELinux状态已更改,是否现在重启系统?(y/n) " answer
case $answer in
y|Y )
echo "[INFO] 正在重启系统..."
sudo reboot
;;
n|N )
echo "[INFO] 系统未重启,SELinux状态将在下次重启时生效。"
;;
* )
echo "错误:无效的输入,请输入y或n。"
;;
esac
#修改ssh端口
echo "[INFO] 修改ssh端口号..."
echo ' Port 10022' | sudo tee -a /etc/ssh/sshd_config >/dev/null
#重启mysql
service sshd restart
}
# 检查并添加防火墙规则的函数
add_firewall_rule() {
local rule=$1
if firewall-cmd --permanent --query-rich-rule="$rule"; then
echo "规则已存在: $rule"
exit 0
else
firewall-cmd --permanent --add-rich-rule="$rule"
echo "添加成功: $rule"
fi
}
# 配置 Test 端防火墙
configure_test_firewall() {
systemctl start firewalld.service
systemctl restart firewalld.service
echo "配置 Test 端防火墙..."
firewall-cmd --add-port=10022/tcp --permanent
add_firewall_rule 'rule family="ipv4" source address="10.0.0.110" port protocol="tcp" port="10022" reject'
add_firewall_rule 'rule family="ipv4" source address="10.0.0.219" port protocol="tcp" port="10022" reject'
firewall-cmd --reload
firewall-cmd --list-all
}
#主函数
main(){
fix_ssh
add_firewall_rule
configure_test_firewall
}
main
- 修改SSH端口:
- 备份SELinux的配置文件。
- 将SELinux的状态修改为disabled。
- 询问用户是否要立即重启系统以应用SELinux的更改。
- 修改SSH的配置文件/etc/ssh/sshd_config,将SSH端口从默认的22更改为10022。
- 重启SSH服务sshd以使新的端口配置生效。
- 检查并添加防火墙规则:
- 定义了一个函数add_firewall_rule,它用于检查指定的防火墙规则是否已存在,如果不存在则添加该规则。
- 配置Test端防火墙:
- 启动并(冗余地)重启firewalld服务。
- 永久地打开SSH的新端口(10022)在防火墙中。
- 使用add_firewall_rule函数添加两个规则,这两个规则拒绝来自特定IP地址(10.0.0.110和10.0.0.219)的SSH端口(10022)的连接。
- 重新加载防火墙规则以使更改生效。
- 列出所有防火墙规则以供检查。
2.赋予脚本可执行权限
输入chmod +x Database.sh
3.执行脚本
输入./main.sh
选择7
部署LAMP平台之测试防火墙规则是否配置成功【centostest】
在虚拟机中的火狐浏览器的地址输入栏中,通过访问http://localhost或服务器的IP地址:10080/phpMyAdmin/index.php,并按Enter键,显示如下页面表示安装成功。在lamptest机器的火狐浏览器的地址输入栏中,输入http://10.0.0.219:10080/phpMyAdmin/index.php或http://10.0.0.219/phpMyAdmin/index.php
,测试phpMyAdmin是否正常运行,显示如下页面表示配置成功。
使用的cookie认证,输入用户密码
在三台机器都配置完防火墙富规则后,输入ssh root@10.0.0.219和ssh root@10.0.0.119和ssh root@10.0.0.110,输出以下页面即为配置防火墙成功。