努力
加油

如何在Ubuntu服务器上安装PHP并连接MySQL?

在 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

执行过程中的关键点:

  1. Enter current password for root: 直接回车(初始为空)。
  2. Switch to unix_socket authentication: 选 n(除非你有特殊权限管理需求,否则传统密码认证更通用)。
  3. Change the root password?: 选 y,设置一个强密码。
  4. Remove anonymous users?: 选 y。
  5. Disallow root login remotely?: 选 y(生产环境严禁远程 root 登录)。
  6. Remove test database and access to it?: 选 y。
  7. 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(推荐,高性能)

  1. 安装 Nginx:

    sudo apt install nginx -y
  2. 配置 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 路径。

  3. 创建测试文件验证:

    echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
  4. 重启 Nginx 和 PHP-FPM:

    sudo systemctl restart nginx
    sudo systemctl restart php8.1-fpm
  5. 浏览器访问 http://你的服务器IP/info.php,如果看到 PHP 信息页面,说明 Nginx + PHP 通信正常。

方案 B:使用 Apache(简单,适合新手)

Apache 自带 mod_php 或通过 libapache2-mod-php 集成,配置相对简单。

  1. 安装 Apache 和 PHP 模块:

    sudo apt install apache2 libapache2-mod-php8.1 -y
  2. 启用必要的模块(如果需要重写规则等):

    sudo a2enmod rewrite
  3. 重启 Apache:

    sudo systemctl restart apache2
  4. 同样创建 /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 数据库!”,恭喜你,环境搭建完成。
  • 如果出现错误,请检查:
    1. MySQL 服务是否运行 (sudo systemctl status mariadb)。
    2. 防火墙是否放行(如果是云服务器,需在控制台安全组开放 HTTP/HTTPS 端口,数据库端口 3306 通常不建议对公网开放)。
    3. PHP 扩展是否安装完整(特别是 php-mysql 包)。

常见问题与优化建议

  1. 时区问题:
    PHP 默认可能没有设置时区,导致时间函数出错。编辑 /etc/php/8.1/fpm/php.ini(Nginx 用 fpm,Apache 可能用 apache2 目录下的 ini),找到 date.timezone,取消注释并设置为:

    date.timezone = Asia/Shanghai

    修改后需重启 PHP 服务。

  2. 权限问题:
    如果你发现网站无法上传文件或写入日志,通常是 Web 服务器用户(www-data)对目录没有写权限。

    sudo chown -R www-data:www-data /var/www/html
    sudo chmod -R 755 /var/www/html
  3. 安全性:

    • 测试完成后,务必删除 info.php 和 db_test.php,防止泄露系统信息。
    • 不要在生产环境使用 root 账户连接数据库,应创建专用数据库用户并授予最小权限。
  4. PHP 版本选择:
    如果你的项目依赖特定框架(如 Laravel 8+ 要求 PHP 8.0+,WordPress 最新要求 PHP 7.4/8.0+),请务必确认 Ubuntu 源中的 PHP 版本是否符合要求。如需更高版本,可能需要添加 ondrej/php PPA 源(需谨慎操作,可能影响系统稳定性)。

通过以上步骤,你就拥有了一个标准的、可投入生产的 Ubuntu + Nginx/Apache + PHP + MySQL 开发环境。