在 Ubuntu 上搭建 PHP + MySQL 环境,目前最稳妥、也是生产环境最常用的方案是 LAMP(Linux, Apache/Nginx, MySQL/MariaDB, PHP)架构。
鉴于国内服务器普遍使用较新的 Ubuntu LTS 版本(如 20.04/22.04/24.04),且默认源中 MariaDB 已成为 MySQL 的替代品(兼容 MySQL 协议),以下教程以 Ubuntu 22.04/24.04 + Nginx/Apache + PHP 8.x + MariaDB (MySQL) 为例。这里我推荐 Nginx,因为在国内云原生和容器化趋势下,Nginx 作为反向XX的性能表现更优,但也附带 Apache 的安装差异点。
第一步:更新系统源
保持软件包列表最新,避免安装过时或存在已知漏洞的版本。
sudo apt update && sudo apt upgrade -y
第二步:安装数据库 (MariaDB)
在 Ubuntu 22.04 及更高版本中,mysql-server 包实际上指向 mariadb-server。它完全兼容 MySQL 客户端工具和应用层连接,但对于追求极致“MySQL”原生的用户,也可以从 Oracle 官方源添加,不过对于绝大多数业务场景,MariaDB 是首选,稳定且维护成本低。
# 安装 MariaDB
sudo apt install mariadb-server -y
# 运行安全脚本(强烈建议执行,设置 root 密码并移除测试库)
sudo mysql_secure_installation
执行过程中的关键点:
Enter current password for root: 直接回车(初始为空)。Switch to unix_socket authentication: 选n(除非你有特殊权限管理需求,否则传统密码认证更通用)。Change the root password?: 选y,设置一个强密码。Remove anonymous users?: 选y。Disallow root login remotely?: 选y(生产环境严禁远程 root 登录)。Remove test database and access to it?: 选y。Reload privilege tables now?: 选y。
第三步:安装 PHP 及常用扩展
不要只装 php,你需要的是 php-fpm(FastCGI Process Manager),因为 Nginx 需要它来解析 PHP。同时,根据项目需求安装常用扩展(如 PDO、MySQLi、GD、Curl 等)。
# 安装 PHP 核心、FPM 模块以及常见扩展
# 注意:Ubuntu 22.04 默认 PHP 8.1,24.04 为 8.3,请根据实际需求调整版本号
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip -y
提示:如果你使用的是 Ubuntu 24.04,请将
php8.1替换为php8.3。你可以通过php -v查看当前默认版本。
安装完成后,检查 FPM 服务状态:
sudo systemctl status php8.1-fpm
确保服务是 active (running) 状态。
第四步:配置 Web 服务器
方案 A:使用 Nginx(推荐,高性能)
-
安装 Nginx:
sudo apt install nginx -y -
配置 Nginx 支持 PHP:
编辑站点配置文件,通常位于/etc/nginx/sites-available/default。sudo nano /etc/nginx/sites-available/default找到
location ~ .php$部分,取消注释并确保如下配置(关键是指向 PHP-FPM 的 socket 文件):location ~ .php$ { include snippets/fastcgi-php.conf; # 如果使用 Unix Socket(推荐,性能更好) fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 或者如果使用 TCP/IP(默认配置可能是这个,但 Socket 更快) # fastcgi_pass 127.0.0.1:9000; }注意:
.sock的路径取决于你的 PHP 版本和安装方式。如果不确定,可以运行sudo ss -tlnp | grep php查看监听端口或 socket 路径。 -
创建测试文件验证:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php -
重启 Nginx 和 PHP-FPM:
sudo systemctl restart nginx sudo systemctl restart php8.1-fpm -
浏览器访问
http://你的服务器IP/info.php,如果看到 PHP 信息页面,说明 Nginx + PHP 通信正常。
方案 B:使用 Apache(简单,适合新手)
Apache 自带 mod_php 或通过 libapache2-mod-php 集成,配置相对简单。
-
安装 Apache 和 PHP 模块:
sudo apt install apache2 libapache2-mod-php8.1 -y -
启用必要的模块(如果需要重写规则等):
sudo a2enmod rewrite -
重启 Apache:
sudo systemctl restart apache2 -
同样创建
/var/www/html/info.php进行测试。
第五步:验证 PHP 连接 MySQL
创建一个简单的 PHP 脚本来测试数据库连接。这比 phpinfo() 更有实际意义。
sudo nano /var/www/html/db_test.php
写入以下内容(请替换为你在第二步设置的数据库密码):
<?php
$servername = "localhost";
$username = "root";
$password = "YOUR_MYSQL_ROOT_PASSWORD"; // 替换为你的密码
$dbname = "test";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "成功连接到 MySQL 数据库!";
$conn->close();
?>
保存后,浏览器访问 http://你的服务器IP/db_test.php。
- 如果显示 “成功连接到 MySQL 数据库!”,恭喜你,环境搭建完成。
- 如果出现错误,请检查:
- MySQL 服务是否运行 (
sudo systemctl status mariadb)。 - 防火墙是否放行(如果是云服务器,需在控制台安全组开放 HTTP/HTTPS 端口,数据库端口 3306 通常不建议对公网开放)。
- PHP 扩展是否安装完整(特别是
php-mysql包)。
- MySQL 服务是否运行 (
常见问题与优化建议
-
时区问题:
PHP 默认可能没有设置时区,导致时间函数出错。编辑/etc/php/8.1/fpm/php.ini(Nginx 用 fpm,Apache 可能用 apache2 目录下的 ini),找到date.timezone,取消注释并设置为:date.timezone = Asia/Shanghai修改后需重启 PHP 服务。
-
权限问题:
如果你发现网站无法上传文件或写入日志,通常是 Web 服务器用户(www-data)对目录没有写权限。sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html -
安全性:
- 测试完成后,务必删除
info.php和db_test.php,防止泄露系统信息。 - 不要在生产环境使用
root账户连接数据库,应创建专用数据库用户并授予最小权限。
- 测试完成后,务必删除
-
PHP 版本选择:
如果你的项目依赖特定框架(如 Laravel 8+ 要求 PHP 8.0+,WordPress 最新要求 PHP 7.4/8.0+),请务必确认 Ubuntu 源中的 PHP 版本是否符合要求。如需更高版本,可能需要添加ondrej/phpPPA 源(需谨慎操作,可能影响系统稳定性)。
通过以上步骤,你就拥有了一个标准的、可投入生产的 Ubuntu + Nginx/Apache + PHP + MySQL 开发环境。
云技术博客