LAMP 环境部署
LAMP 环境部署
一、概述
1. 目的
基于 CentOS 7 系统部署 LAMP(Linux + Apache + MySQL + PHP)环境的完整步骤,通过脚本化操作实现环境快速搭建,适用于运维人员进行测试环境或基础生产环境的 LAMP 部署
2. 适用环境
-
操作系统:CentOS 7(64 位)
-
权限要求:需使用
root
用户执行所有操作 -
前置条件:
-
服务器已连接互联网(用于下载 YUM 源及依赖包)
-
以下压缩包已放置在
/root
目录下:
- APR:
apr-1.7.0.tar.gz
- APR-Utils:
apr-util-1.6.1.tar.gz
- Apache:
httpd-2.4.54.tar.gz
- MySQL:
mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
- PHP:
php-7.1.10.tar.bz2
- APR:
-
二、部署步骤
上传5个需要的压缩包:
[root@syf ~]# rz -E
rz waiting to receive.
[root@syf ~]# rz -E
rz waiting to receive.
[root@syf ~]# rz -E
rz waiting to receive.
[root@syf ~]# rz -E
rz waiting to receive.
[root@syf ~]# rz -E
rz waiting to receive.
[root@syf ~]# ls
anaconda-ks.cfg Music
apr-1.7.0.tar.gz mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
apr-util-1.6.1.tar.gz php-7.1.10.tar.bz2
Desktop Pictures
Documents Public
Downloads Templates
httpd-2.4.54.tar.gz Videos
initial-setup-ks.cfg
1. 部署 YUM 仓库
操作目的
清除系统默认 YUM 仓库配置,替换为阿里云 CentOS 7 YUM 源(提升软件下载速度),并安装 EPEL 扩展仓库(提供更多第三方软件包)
[root@syf ~]# vim lamp.sh
#!/bin/bash
#部署yum仓库
echo "正在部署yum仓库"
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &>/dev/null
yum -y install epel-release &>/dev/null
echo "yum仓库部署完成"
关键说明
&>/dev/null
:将命令执行的输出(包括标准输出和错误输出)定向到空设备,实现 “静默执行”,仅在完成后提示结果
2. 安装基础工具包
操作目的
安装后续编译安装 APR、Apache、PHP 等组件所需的依赖工具(如编译器、解压工具、开发库等)
#安装基础工具包
echo "正在安装工具包,请稍等..."
yum -y install bzip2 vim make wget openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ libxml2-devel &>/dev/null
echo "基础工具包安装完成"
关键说明
- 核心依赖说明:
gcc/gcc-c++
:C/C++ 编译器,用于源码编译openssl-devel
:SSL 开发库,支持 Apache HTTPS 功能pcre-devel
:正则表达式库,支持 Apache URL 重写bzip2
:用于解压 PHP 的.bz2
格式压缩包
3. 部署 APR(Apache Portable Runtime)
操作目的
APR 是 Apache 的跨平台运行时库,为 Apache 提供底层系统调用封装,必须先于 Apache 安装
#部署apr
echo "正在部署apr"
tar -xzvf /root/apr-1.7.0.tar.gz &>/dev/null
cd /root/apr-1.7.0
sed -i '/$RM "$cfgfile"/d' configure
./configure --prefix=/usr/local/apr &>/dev/null
make &>/dev/null
make install &>/dev/null
echo "apr部署完成"
4. 部署 APR-Utils
操作目的
APR-Utils 是 APR 的扩展工具库,提供数据库连接、加密等额外功能,是 Apache 的必需依赖
#部署apr-utils
echo "正在部署apr-utils"
cd /root
tar -xzvf apr-util-1.6.1.tar.gz &>/dev/null
cd /root/apr-util-1.6.1
./configure --prefix=/usr/local/apr-utils --with-apr=/usr/local/apr &>/dev/null
make &>/dev/null
make install &>/dev/null
echo "apr-utils部署完成"
关键说明
--with-apr=/usr/local/apr
:必须指定 APR 的安装路径,确保 APR-Utils 能正确关联依赖
5. 部署 Apache(HTTP Server)
操作目的
安装 Apache Web 服务器,配置核心功能(如 SSL、URL 重写、多进程模型),并启动服务
#部署apache
echo "正在部署apache"
cd /root
tar -xzvf httpd-2.4.54.tar.gz &>/dev/null
cd /root/httpd-2.4.54
./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-utils/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork &>/dev/null
make &>/dev/null
make install &>/dev/null
/usr/local/apache/bin/apachectl start
echo "apache部署完成"
核心配置参数说明
参数 | 作用 |
---|---|
--prefix=/usr/local/apache | 指定 Apache 安装目录 |
--sysconfdir=/etc/httpd24 | 指定 Apache 配置文件目录(默认在安装目录下,此处单独存放) |
--enable-so | 启用动态模块加载功能 |
--enable-ssl | 启用 SSL 模块(支持 HTTPS) |
--enable-rewrite | 启用 URL 重写模块(用于伪静态、域名跳转等) |
--with-mpm=prefork | 指定 Apache 的 MPM(多进程模型)为 prefork(稳定,适合 PHP 环境) |
--with-apr/--with-apr-util | 关联已安装的 APR 和 APR-Utils |
6. 部署 MySQL 5.7
操作目的
创建 MySQL 系统用户、安装 MySQL 服务、配置数据目录、初始化数据库,并设置开机启动
6.1 创建 MySQL 系统用户
#正在部署mysql
echo "创建mysql用户"
id mysql &>/dev/null
if [ $? -eq 0 ];thenecho "mysql用户已存在"
elseuseradd -r -M -s /sbin/nologin mysqlecho "mysql用户已经创建完成"
fi
6.2 安装 MySQL 依赖
#安装依赖包
echo "正在安装依赖包"
yum -y install libncurses* &>/dev/null
echo "MySQL依赖包安装完成"
6.3 配置 MySQL 安装目录与数据目录
#配置mysql
echo "正在配置mysql"
cd /root
tar -xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local &>/dev/null
ln -s /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql
mkdir -p /opt/data
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /opt/data
6.4 初始化 MySQL 数据库
echo "正在初始化数据库"
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/ &>/dev/null
ln -s /usr/local/mysql/include /usr/local/include/mysql
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig
6.5 配置 MySQL 配置文件(my.cnf)
echo "编辑mysql配置文件"
cat > /etc/my.cnf << EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
EOF
sed -ri "s#^(basedir=).*#\1/usr/local/mysql#g" /usr/local/mysql/support-files/mysql.server
sed -ri "s#^(datadir=).*#\1/opt/data#g" /usr/local/mysql/support-files/mysql.server
echo "mysql配置文件编辑完成"
6.6 配置 MySQL 系统服务(systemd)
echo "配置mysqld服务的单元文件"
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=mysql server daemon
After=network.targe[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP \$MAINPID[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable --now mysqld
echo "MySQL服务启动完成"
6.7 配置 MySQL 环境变量与设置密码
echo "配置mysql的环境变量"
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profileecho "正在为数据库设置密码"
read -p "请为数据库设置密码:" PASSWORD
mysql -uroot -e "set password=password('$PASSWORD')"
echo "密码设置成功"
echo "数据库部署完成"
7. 部署 PHP 7.1.10
操作目的
安装 PHP 并关联 Apache 与 MySQL,配置 PHP 运行环境,实现 Apache 对 PHP 脚本的解析
7.1 安装 PHP 依赖包
#部署php
#安装依赖包,安装GD库和GD库关联程序,用来处理和生成图片
echo "正在安装依赖包..."
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel &>/dev/null
echo "PHP依赖包安装完成"
7.2 解压 PHP 压缩包
#解压php包文件
echo "正在解压php包文件"
cd /root
tar -xjvf php-7.1.10.tar.bz2 &>/dev/null
echo "php包文件解压完成"
7.3 编译安装 PHP
#配置编译安装php
echo "正在配置编译安装php"
cd /root/php-7.1.10
./configure \--prefix=/usr/local/php \--with-apxs2=/usr/local/apache/bin/apxs \--with-mysql-sock=/tmp/mysql.sock \--with-mysqli \--with-zlib \--with-curl \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-openssl \--enable-mbstring \--enable-xml \--enable-session \--enable-ftp \--enable-pdo \--enable-tokenizer \--enable-zip &>/dev/nullmake &>/dev/null
make install &>/dev/null
echo "PHP编译安装完成"
核心配置参数说明
参数 | 作用 |
---|---|
--prefix=/usr/local/php | 指定 PHP 安装目录 |
--with-apxs2 | 关联 Apache 的 apxs 工具(生成 mod_php 模块,实现 Apache 解析 PHP) |
--with-mysql-sock | 关联 MySQL 的套接字文件(实现 PHP 与 MySQL 本地连接) |
--with-gd/--with-jpeg-dir | 启用 GD 库(支持图片生成与处理) |
--enable-mbstring | 启用多字节字符串支持(处理中文等非英文字符) |
--enable-pdo | 启用 PDO 扩展(统一数据库操作接口) |
7.4 配置 PHP 与 Apache
#配置php
echo "配置php"
#测试环境时使用php.ini-development文件,生产环境使用php.ini-production文件
cp php.ini-development /usr/local/php/lib/php.ini
#修改php配置文件,设置时区
sed -i 's/;date.timezone =/date\.timezone = \Asia\/Shanghai/' /usr/local/php/lib/php.ini
#修改httpd服务配置文件,让apache支持php
echo "AddType application/x-httpd-php .php" >> /etc/httpd24/httpd.conf
echo "AddType application/x-httpd-php-source .phps" >> /etc/httpd24/httpd.conf
sed -i 's/index.html/index\.php index\.html/' /etc/httpd24/httpd.conf
7.5 创建 PHP 测试页并重启 Apache
#验证php测试页
rm -rf /usr/local/apache/htdocs/index.html
cat > /usr/local/apache/htdocs/index.php << EOF
<?php
phpinfo();
?>
EOF#启动apache服务
/usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl start
echo "PHP部署完成,Apache已重启"
三、注意事项
防火墙与 SELinux:脚本未处理防火墙和 SELinux,若无法访问 Apache,需手动关闭或配置规则:
- 关闭防火墙:
systemctl stop firewalld && systemctl disable firewalld
- 关闭 SELinux:
setenforce 0
(临时),或修改/etc/selinux/config
中SELINUX=disabled
(永久,需重启)
四、环境验证
[root@syf ~]# source lamp.sh
正在部署yum仓库
yum仓库部署完成
正在安装工具包,请稍等...
基础工具包安装完成
正在部署apr
apr部署完成
正在部署apr-utils
apr-utils部署完成
正在部署apache
apache部署完成
创建mysql用户
mysql用户已经创建完成
正在安装依赖包
MySQL依赖包安装完成
正在配置mysql
正在初始化数据库
编辑mysql配置文件
mysql配置文件编辑完成
配置mysqld服务的单元文件
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
MySQL服务启动完成
配置mysql的环境变量
正在为数据库设置密码
请为数据库设置密码:redhat
密码设置成功
数据库部署完成
正在安装依赖包...
PHP依赖包安装完成
正在解压php包文件
php包文件解压完成
正在配置编译安装php
PHP编译安装完成
配置php
PHP部署完成,Apache已重启
整合脚本:
#!/bin/bash
#部署yum仓库
echo "正在部署yum仓库"
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &>/dev/null
yum -y install epel-release &>/dev/null
echo "yum仓库部署完成"#安装基础工具包
echo "正在安装工具包,请稍等..."
yum -y install bzip2 vim make wget openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ libxml2-devel &>/dev/null
echo "基础工具包安装完成"#部署apr
echo "正在部署apr"
tar -xzvf /root/apr-1.7.0.tar.gz &>/dev/null
cd /root/apr-1.7.0
sed -i '/$RM "$cfgfile"/d' configure
./configure --prefix=/usr/local/apr &>/dev/null
make &>/dev/null
make install &>/dev/null
echo "apr部署完成"#部署apr-utils
echo "正在部署apr-utils"
cd /root
tar -xzvf apr-util-1.6.1.tar.gz &>/dev/null
cd /root/apr-util-1.6.1
./configure --prefix=/usr/local/apr-utils --with-apr=/usr/local/apr &>/dev/null
make &>/dev/null
make install &>/dev/null
echo "apr-utils部署完成"#部署apache
echo "正在部署apache"
cd /root
tar -xzvf httpd-2.4.54.tar.gz &>/dev/null
cd /root/httpd-2.4.54
./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-utils/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork &>/dev/null
make &>/dev/null
make install &>/dev/null
/usr/local/apache/bin/apachectl start
echo "apache部署完成"#正在部署mysql
echo "创建mysql用户"
id mysql &>/dev/null
if [ $? -eq 0 ];thenecho "mysql用户已存在"
elseuseradd -r -M -s /sbin/nologin mysqlecho "mysql用户已经创建完成"
fi#安装依赖包
echo "正在安装依赖包"
yum -y install libncurses* &>/dev/null
echo "MySQL依赖包安装完成"#配置mysql
echo "正在配置mysql"
cd /root
tar -xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local &>/dev/null
ln -s /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql
mkdir -p /opt/data
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /opt/dataecho "正在初始化数据库"
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/ &>/dev/null
ln -s /usr/local/mysql/include /usr/local/include/mysql
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfigecho "编辑mysql配置文件"
cat > /etc/my.cnf << EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
EOF
sed -ri "s#^(basedir=).*#\1/usr/local/mysql#g" /usr/local/mysql/support-files/mysql.server
sed -ri "s#^(datadir=).*#\1/opt/data#g" /usr/local/mysql/support-files/mysql.server
echo "mysql配置文件编辑完成"echo "配置mysqld服务的单元文件"
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=mysql server daemon
After=network.targe[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP \$MAINPID[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable --now mysqld
echo "MySQL服务启动完成"echo "配置mysql的环境变量"
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profileecho "正在为数据库设置密码"
read -p "请为数据库设置密码:" PASSWORD
mysql -uroot -e "set password=password('$PASSWORD')"
echo "密码设置成功"
echo "数据库部署完成"#部署php
#安装依赖包,安装GD库和GD库关联程序,用来处理和生成图片
echo "正在安装依赖包..."
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel &>/dev/null
echo "PHP依赖包安装完成"#解压php包文件
echo "正在解压php包文件"
cd /root
tar -xjvf php-7.1.10.tar.bz2 &>/dev/null
echo "php包文件解压完成"#配置编译安装php
echo "正在配置编译安装php"
cd /root/php-7.1.10
./configure \--prefix=/usr/local/php \--with-apxs2=/usr/local/apache/bin/apxs \--with-mysql-sock=/tmp/mysql.sock \--with-mysqli \--with-zlib \--with-curl \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-openssl \--enable-mbstring \--enable-xml \--enable-session \--enable-ftp \--enable-pdo \--enable-tokenizer \--enable-zip &>/dev/nullmake &>/dev/null
make install &>/dev/null
echo "PHP编译安装完成"#配置php
echo "配置php"
#测试环境时使用php.ini-development文件,生产环境使用php.ini-production文件
cp php.ini-development /usr/local/php/lib/php.ini
#修改php配置文件,设置时区
sed -i 's/;date.timezone =/date\.timezone = \Asia\/Shanghai/' /usr/local/php/lib/php.ini
#修改httpd服务配置文件,让apache支持php
echo "AddType application/x-httpd-php .php" >> /etc/httpd24/httpd.conf
echo "AddType application/x-httpd-php-source .phps" >> /etc/httpd24/httpd.conf
sed -i 's/index.html/index\.php index\.html/' /etc/httpd24/httpd.conf#验证php测试页
rm -rf /usr/local/apache/htdocs/index.html
cat > /usr/local/apache/htdocs/index.php << EOF
<?php
phpinfo();
?>
EOF#启动apache服务
/usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl start
echo "PHP部署完成,Apache已重启"