LAMP(Linux、Apache、MariaDB、PHP)是 WordPress、Laravel 以及大多数 PHP 应用的经典运行环境。本指南将在一台全新的 Ubuntu 24.04 VPS Linux Infrawire 上一步步完成部署,包括独立的虚拟主机,以及只开放必要端口的防火墙。
📋 前提条件
- 一台运行 Ubuntu 24.04 的 KVM VPS(IP 和 root 密码可在客户区查看)
- 以 root 或具有
sudo权限的用户通过 SSH 登录 - 一个域名
example.com,其 A(及 AAAA)记录指向VPS_IP
以下命令默认你是 root 用户,否则请在命令前加 sudo。
1. 更新系统
Bashapt update && apt upgrade -y
2. 安装 Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
服务会立即启动,并设为开机自启。
3. 安装 MariaDB
MariaDB 位于 Ubuntu 官方仓库中,可无缝替代 MySQL。如果你更想用 Oracle MySQL,请改装 mysql-server,但不要在同一台机器上同时安装两者。
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
在向导中,保留 root 的 unix_socket 认证;如被询问请设置强密码,删除匿名用户,禁止 root 远程登录,并删除测试数据库。然后为你的应用创建专用的数据库和用户:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. 安装 PHP 8.3
Ubuntu 24.04 的默认仓库已包含 PHP 8.3,无需额外添加 PPA。
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
libapache2-mod-php 软件包会自动把 Apache 切换到 prefork MPM 并加载 PHP 模块。
5. 创建虚拟主机并启用 mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
AllowOverride All 会启用 .htaccess 文件,WordPress 或 Laravel 的伪静态链接依赖它。现在启用模块和站点,并停用默认页面:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
重新加载之前,configtest 必须返回 Syntax OK。
6. 配置防火墙
请先放行 SSH,否则启用防火墙后你会把自己锁在服务器之外。
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
Apache Full 配置会开放 80 和 443 端口。不要开放 3306 端口:MariaDB 只需监听本机。
7. 测试 PHP 并删除测试文件
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
应返回 HTTP/1.1 200 OK。在浏览器中打开 http://example.com/info.php 即可看到 PHP 配置页面。phpinfo() 页面会暴露版本、路径和模块信息,请立即删除:
Bashrm /var/www/example.com/public_html/info.php
再检查其他组件:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ 故障排查
仍然显示 Apache 默认页面。 默认站点仍处于启用状态,或 DNS 尚未生效。执行 a2dissite 000-default.conf,重新加载 Apache,并用 curl -I -H 'Host: example.com' http://VPS_IP/ 测试。
403 Forbidden。 检查目录配置中是否有 Require all granted,www-data 能否读取文件(ls -ld /var/www/example.com/public_html),并查看日志 /var/log/apache2/example.com-error.log。
浏览器下载 PHP 文件而不是执行它。 PHP 模块没有加载。运行 apache2ctl -M | grep php,然后 systemctl restart apache2。若无输出,请重新安装 libapache2-mod-php。
重写规则被忽略(伪静态链接 404)。 确认已执行 a2enmod rewrite,并且 <Directory> 块中包含 AllowOverride All。
🎉 LAMP 环境已就绪:Apache、MariaDB 和 PHP 8.3 可以托管你的第一个网站了。