基于源码构建 LAMP 平台及 Web 应用部署实践
LAMP 技术栈概述
LAMP 作为经典的 Web 服务架构,由 Linux 操作系统、Apache 网页服务器、MySQL 关系型数据库以及 PHP 脚本语言四层构成。该架构凭借其开源特性与高度灵活性,已成为企业级动态网站部署的主流方案之一。
各组件协作机制
用户发起访问请求时,Apache 作为入口接收 HTTP 流量;对于静态资源直接响应返回,动态请求则交由 PHP 处理引擎解析执行。PHP 在业务逻辑需要时,通过 MySQL 客户端接口与数据库交互完成数据存取,最终将渲染结果经 Apache 回传至客户端浏览器。
源码编译部署 Apache 服务
前置准备与依赖安装
首先停用系统防火墙与 SELinux 安全策略,避免编译安装过程受到干扰:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装编译所需的工具链及依赖库:
yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
获取 Apache 源码包及其可移植运行时库:
- httpd-2.4.29.tar.gz
- apr-1.6.2.tar.gz
- apr-util-1.6.0.tar.gz
源码解压与模块配置
cd /opt/
tar zxvf apr-1.6.2.tar.gz
tar zxvf apr-util-1.6.0.tar.gz
tar jxvf httpd-2.4.29.tar.bz2
mv apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util
执行配置脚本,启用必要的功能模块:
cd /opt/httpd-2.4.29/
./configure --prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi
构建安装与服务配置
make -j$(nproc)
make install
建立符号链接优化命令调用路径:
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
创建 systemd 服务单元文件 /lib/systemd/system/httpd.service:
[Unit]
Description=Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl start
ExecReload=/usr/local/bin/apachectl graceful
ExecStop=/usr/local/bin/apachectl stop
[Install]
WantedBy=multi-user.target
启动并验证服务状态:
systemctl daemon-reload
systemctl start httpd
systemctl enable httpd
源码编译部署 MySQL 服务
依赖准备与编译选项
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake openssl-devel
解压源码并配置编译参数:
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz
mv boost_1_59_0 /usr/local/boost
cd /opt/mysql-5.7.17/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1
安装与用户初始化
make -j$(nproc) && make install
useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
编辑数据库配置文件 /etc/my.cnf:
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character-set-server = utf8mb4
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections = 4096
default-storage-engine = INNODB
max_allowed_packet = 32M
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
环境变量与数据库初始化
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile
cd /usr/local/mysql/bin/
./mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
服务注册与访问配置
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
mysqladmin -u root password "abc123"
mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'abc123';"
源码编译部署 PHP 运行环境
图形库与扩展依赖
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
编译配置与安装
cd /opt
tar xf php-7.1.10.tar.bz2
cd php-7.1.10/
./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php/lib \
--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
make -j$(nproc) && make install
配置文件处理与 Apache 集成
ln -s /usr/local/php/bin/* /usr/local/bin/
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
修改 /usr/local/php/lib/php.ini 中的关键参数:
mysqli.default_socket = /usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai
调整 Apache 配置以支持 PHP 解析,编辑 /etc/httpd.conf:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.html index.php
验证 PHP 模块加载情况:
grep "LoadModule php7_module" /etc/httpd.conf
功能验证
创建测试文件 /usr/local/httpd/htdocs/index.php:
<?php
phpinfo();
?>
systemctl restart httpd
Discuz 论坛系统部署实例
数据库与用户准备
mysql -u root -p -e "CREATE DATABASE bbs;
GRANT ALL PRIVILEGES ON bbs.* TO 'bbsadmin'@'%' IDENTIFIED BY 'SecurePass456';
FLUSH PRIVILEGES;"
程序文件部署
unzip /opt/Discuz_X3.4_SC_UTF8.zip -d /opt/discuz_extracted
cd /opt/discuz_extracted/dir_SC_UTF8/
cp -r upload/ /usr/local/httpd/htdocs/forum
目录权限调整
cd /usr/local/httpd/htdocs/forum
chown -R daemon config data uc_client uc_server/data
安装向导配置
通过浏览器访问 http://服务器地址/forum,按向导完成安装。数据库连接信息填写:
- 数据库主机:localhost
- 数据库名称:bbs
- 数据库用户:bbsadmin
- 数据库密码:SecurePass456
安装完成后,管理后台入口为 http://服务器地址/forum/admin.php。
扩展应用部署
采用相同的方法论,将其他 PHP 应用(如 WordPress、Typecho 等)的源码解压至 /usr/local/httpd/htdocs/ 目录下,配置相应的数据库连接参数,即可完成博客或其他 Web 应用的快速搭建。