LAMP 架构演练:从云主机准备到 Apache、PHP、MySQL 上线验证

本文是一篇可操作的 LAMP 架构演练,目标是在 Linux 云主机上完成 Apache、PHP 和 MySQL 的安装、配置、验证、安全加固、备份和故障定位。命令以 Debian/Ubuntu 风格为例,不同发行版的包名可能不同。

一、LAMP 适合什么场景

LAMP 由 Linux、Apache、MySQL、PHP 组成,适合传统 PHP 网站、WordPress、企业门户、内容管理系统和学习型云主机环境。

它的优点是资料丰富、组件成熟、社区经验多。局限是默认配置往往不适合生产,高并发、复杂缓存、弹性扩缩容和多地域容灾需要额外架构设计。

二、演练前准备

准备一台云主机,至少明确:

  • Linux 发行版和版本。
  • 公网 IP 或内网访问地址。
  • SSH 登录方式。
  • 安全组是否放行 22、80 和 443 端口。
  • 域名 DNS 是否指向主机。
  • 是否已经规划数据盘、备份位置和监控。

生产环境不建议直接使用 root 进行所有操作,应创建普通运维用户,并通过 sudo 执行管理命令。

三、系统初始化

bash 复制代码
sudo apt update
sudo apt upgrade -y
sudo timedatectl set-timezone Asia/Shanghai
sudo adduser deploy
sudo usermod -aG sudo deploy

配置 SSH 公钥登录后,再考虑关闭密码登录和限制 root 远程登录。修改 SSH 配置后务必保留当前会话,并用新窗口验证新连接,避免把自己锁在服务器外。

四、安装 Apache

bash 复制代码
sudo apt install -y apache2
sudo systemctl enable --now apache2
sudo systemctl status apache2

验证本机服务:

bash 复制代码
curl -I http://127.0.0.1

如果本机访问成功而公网访问失败,优先检查云安全组、防火墙和路由,而不是反复重装 Apache。

五、安装 PHP 与模块

bash 复制代码
sudo apt install -y php libapache2-mod-php php-mysql php-curl \
  php-mbstring php-xml php-zip php-gd
sudo systemctl restart apache2
php -v

PHP 模块要按应用需要安装,不能无依据安装大量扩展。生产环境应固定 PHP 主版本,并确认应用框架与扩展兼容。

创建测试页:

bash 复制代码
echo '<?php echo "LAMP OK"; ?>' | \
  sudo tee /var/www/html/index.php

访问 http://服务器IP/index.php,确认页面返回 LAMP OK。验证完成后应删除测试文件,避免暴露运行信息。

六、安装和初始化 MySQL

bash 复制代码
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
sudo mysql_secure_installation

生产数据库不应直接使用 root 给应用连接。创建独立数据库和账号:

sql 复制代码
CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'change-this-password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX
ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

权限应根据应用实际需求收敛。只有确实需要时才授予 DROP、CREATE USER 或全库权限。

七、编写 PHP 数据库连接测试

php 复制代码
<?php
$pdo = new PDO(
    'mysql:host=127.0.0.1;dbname=appdb;charset=utf8mb4',
    'appuser',
    getenv('DB_PASSWORD'),
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo 'Database connection OK';

不要把真实密码直接写进公开目录中的 PHP 文件。生产应用应通过环境配置、密钥管理或受控配置文件注入密码,并避免在异常页面显示连接字符串。

八、配置 Apache 虚拟主机

apache 复制代码
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/app/public

    <Directory /var/www/app/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/app-error.log
    CustomLog ${APACHE_LOG_DIR}/app-access.log combined
</VirtualHost>

启用站点:

bash 复制代码
sudo a2ensite app.conf
sudo a2enmod rewrite
sudo apachectl configtest
sudo systemctl reload apache2

apachectl configtest 是上线前必做步骤。配置文件有语法错误时不要直接 reload 生产服务。

九、HTTPS 与域名

域名解析生效后,使用证书工具申请并配置 HTTPS。配置完成后检查:

  • 证书域名是否匹配。
  • 证书链是否完整。
  • HTTP 是否跳转 HTTPS。
  • 自动续期是否可用。
  • 续期后 Apache 是否正确 reload。

不要把证书私钥放在公开 Web 目录,也不要在日志和工单中传播私钥内容。

十、目录权限与安全加固

应用目录应遵循最小权限原则。Web 进程需要读取代码,只有上传、缓存和日志目录才可能需要写权限。

建议:

  • 删除默认欢迎页和测试脚本。
  • 禁止访问 .env、.git、备份压缩包和配置文件。
  • 上传目录禁止执行脚本。
  • 关闭 PHP 错误详情在生产页面显示。
  • 限制上传文件类型、大小和存储路径。
  • 关闭不必要的 Apache 模块。
  • 使用防火墙和安全组限制数据库访问。
  • 定期更新系统、Apache、PHP 和 MySQL。

十一、日志、监控和排障

Apache 日志:

bash 复制代码
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/apache2/error.log

服务状态:

bash 复制代码
systemctl status apache2
systemctl status mysql
ss -lntp

排查顺序建议是:DNS -> 云安全组 -> 主机防火墙 -> Apache 监听 -> 虚拟主机 -> PHP 模块 -> 文件权限 -> MySQL 连接 -> 应用日志。

典型故障

  • 403:目录权限、Directory 配置或访问规则问题。
  • 404:DocumentRoot、Rewrite 或路由配置问题。
  • 500:PHP 语法、扩展、权限或应用异常。
  • 数据库连接失败:账号、权限、Socket、端口或数据库未启动。
  • 页面空白:PHP 错误被隐藏,应查看 Apache 和 PHP 日志。

十二、备份与恢复演练

备份至少包括数据库、上传目录、应用配置、虚拟主机配置和证书配置。数据库备份示例:

bash 复制代码
mysqldump --single-transaction --routines appdb \
  | gzip > /backup/appdb-$(date +%F).sql.gz

恢复演练:

bash 复制代码
gunzip -c /backup/appdb-2026-10-19.sql.gz \
  | mysql appdb

备份文件不应长期只存放在同一台云主机上。应保存到独立存储,并定期验证备份是否可读取、数据库是否能恢复、应用是否能正常启动。

十三、LAMP 性能优化方向

初步优化可以从以下方向开始:

  • 启用 Apache 缓存和压缩,但先评估内容类型。
  • 使用 PHP OPcache。
  • 优化 PHP-FPM 或 Apache worker 配置。
  • 为 MySQL 慢查询建立索引和优化 SQL。
  • 使用 Redis 或页面缓存降低数据库压力。
  • 静态资源使用 CDN。
  • 图片和大文件放入对象存储。
  • 使用监控数据而不是感觉调整参数。

不要在没有指标的情况下盲目调大进程数、数据库连接数或缓存容量。

十四、架构演练的验收清单

  • 云主机可以安全 SSH 登录。
  • 80/443 端口按需开放。
  • Apache 能返回站点内容。
  • PHP 页面可以正常执行。
  • PHP 可以使用独立账号连接 MySQL。
  • 域名和 HTTPS 正常。
  • 日志可以查看并轮转。
  • 默认页面和测试文件已删除。
  • 数据库和应用目录已经备份。
  • 已在隔离环境验证恢复流程。
  • 服务器资源和服务状态有监控。

十五、总结

LAMP 架构演练不应止步于"Apache 能打开欢迎页"。一次完整演练需要覆盖系统准备、软件安装、端口、安全、PHP 执行、数据库连接、虚拟主机、HTTPS、日志、备份和恢复。

对于初学者,这套演练可以帮助理解 Web 请求从公网到应用和数据库的完整路径;对于运维人员,它更重要的价值是建立故障排查和恢复思维:每一层都能验证,每一层都有日志,每一层都有明确的安全边界。

相关推荐
kyle~1 小时前
Linux --- 虚拟内存 1.fork、2.COW、3.mmap、4.page fault、5.TLB、6.页表
linux·运维·服务器
小HANN1 小时前
Ceph分布式存储深度解析-下篇
linux·运维·服务器·经验分享
张文君2 小时前
ubuntu iscsi客户端 关闭磁盘
linux·运维·ubuntu
凯基迪科技2 小时前
硬件做授权保护,有哪些常见方案
运维·服务器
优化Henry2 小时前
5G站点AAS-3设备故障排查与处理
运维·学习·5g·信息与通信
Jtti2 小时前
香港服务器CPU不高但用户请求排队的原因有哪些?
运维·服务器·网络
未秃头的程序猿2 小时前
Spring Cloud Gateway 做统一加解密,我在请求体上栽了三天
java·后端·架构
星核0penstarry2 小时前
宕机那天 API 还能用,所以模型是假的?
运维·服务器·人工智能·大模型·ai编程·模型指纹
咖啡八杯2 小时前
Spring MessageSource 国际化消息解析流程
java·后端·spring·架构·框架·若依