当前位置:首页 > 技术 > 正文内容

基于源码构建 LAMP 平台及 Web 应用部署实践

访客 技术 2026年5月31日 1

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 应用的快速搭建。

标签: Apache

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。