当前位置: 首页 > news >正文

LAMP 环境部署

LAMP 环境部署

一、概述

1. 目的

基于 CentOS 7 系统部署 LAMP(Linux + Apache + MySQL + PHP)环境的完整步骤,通过脚本化操作实现环境快速搭建,适用于运维人员进行测试环境或基础生产环境的 LAMP 部署

2. 适用环境

  • 操作系统:CentOS 7(64 位)

  • 权限要求:需使用root用户执行所有操作

  • 前置条件:

    1. 服务器已连接互联网(用于下载 YUM 源及依赖包)

    2. 以下压缩包已放置在

      /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

二、部署步骤

上传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/configSELINUX=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已重启"

在这里插入图片描述


文章转载自:

http://FV4kKXbY.wsxLy.cn
http://wSMkvEHh.wsxLy.cn
http://rcXskgeH.wsxLy.cn
http://zsNIf9LA.wsxLy.cn
http://VfsSom9Q.wsxLy.cn
http://AV166dWs.wsxLy.cn
http://R0MWFotM.wsxLy.cn
http://sGMS3xN2.wsxLy.cn
http://kNdNYSuV.wsxLy.cn
http://a1edFLZe.wsxLy.cn
http://Qz0P7sPa.wsxLy.cn
http://vK1QTNZY.wsxLy.cn
http://jTtTF82s.wsxLy.cn
http://jATdjylD.wsxLy.cn
http://JeoOeaIw.wsxLy.cn
http://DLeEWOmv.wsxLy.cn
http://scGBgq5I.wsxLy.cn
http://ix55qRT4.wsxLy.cn
http://iNgnD1HW.wsxLy.cn
http://snEt8oub.wsxLy.cn
http://Rx060ULr.wsxLy.cn
http://SLF4afZ4.wsxLy.cn
http://uzhPVofY.wsxLy.cn
http://TeU8Bq7w.wsxLy.cn
http://VfjP6mTo.wsxLy.cn
http://rziNKOHE.wsxLy.cn
http://X1EdzHsr.wsxLy.cn
http://CZD9uwBG.wsxLy.cn
http://HUpl4aOk.wsxLy.cn
http://beWvpiXl.wsxLy.cn
http://www.dtcms.com/a/384322.html

相关文章:

  • Java程序设计:Eclipse 安装和使用
  • ZooKeeper 集群高可用配置指南
  • 在天嵌 TQ3568 (Debian) 上配置并添加打印机教程
  • pcl封装10 get_area_form_boundary计算平面点云面积
  • 突破局域网限制:MongoDB远程管理新体验
  • C++学习:map/set源码剖析+利用红黑树封装map/set
  • HTML开发工具有哪些?常用HTML编辑器推荐、HTML开发工具对比与HTML调试工具实战应用
  • Redis篇章3:Redis 企业级缓存难题全解--预热、雪崩、击穿、穿透一网打尽
  • 什么区块链(Blockchain)?Rust的区块链的例子
  • LangChain4J-(5)-记忆缓存与持久化
  • 遇到 npm install报错 certificate has expired是因为淘宝镜像源(registry.npm.taobao.org)
  • Excel办公新选择:300项功能的免费插件
  • 在Excel和WPS表格中用照相机创建动态更新的数据图片
  • 开发与维护nodejs工具库或自定义npm包
  • 从企业实战中学习Appium自动化测试(一)
  • 深度理解链表:使用C++数组与下标的模拟
  • 【wpf】从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路
  • Sport Network 凭借 Akamai 实现卓越成就
  • Topaz Photo AI 人工智能图像处理(Mac)
  • LeetCode 第467场周赛 第13天
  • PINN物理信息神经网络锂电池剩余寿命预测模型(内含容量特征提取+两组电池剩余寿命预测实验),MATLAB实现
  • 「日拱一码」088 机器学习——蒙特卡洛树搜索MCTS
  • 简单聊聊神经网络中的反向传播
  • Java-Spring入门指南(九)反射与反射对象
  • 从 Vue 到 Java:前后端分离项目后端迁移完整教程
  • 在 IDEA 2024 创建 Vue 项目(保姆级)
  • Electron 常见问题排查:调试与错误处理
  • 学生管理系统
  • 软件测试的艺术——黑白盒测试学习笔记
  • Electron开源库入门教程:跨平台桌面应用框架