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已重啟"