如果您有项目需要开发,可以联系我们
果果开发

Ubuntu 24.04.4 LTS 安装PHP、nginx、MySQL、libreoffice

作者: admin 发布时间:2026-03-05 11:01:14

安装php

sudo apt install php8.3-fpm php8.3-cli php8.3-common \
    php8.3-zip php8.3-mbstring php8.3-pdo php8.3-imagick \
    php8.3-gd php8.3-fileinfo php8.3-curl php8.3-bcmath \
    php8.3-imap php8.3-intl php8.3-mysql php8.3-opcache \
    php8.3-redis php8.3-soap php8.3-tidy php8.3-xml php8.3-xmlrpc

查看php命令行版本:php -v

PHP 8.3.6 (cli) (built: Jan  7 2026 08:40:32) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies

查看php-fpm状态:sudo systemctl status php8.3-fpm

重启php-fpm:sudo systemctl restart php8.3-fpm

禁止php-fpm自启动:sudo systemctl disable php8.3-fpm

开启php-fpm自启动:sudo systemctl enable php8.3-fpm

查询安装的扩展:php -m

[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
igbinary
imagick
imap
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
random
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

 

php配置文件夹:/etc/php/8.3

php.ini配置文件:/etc/php/8.3/fpm/php.ini

例如:修改错误显示
display_errors = On

网站fpm配置文件:/etc/php/8.3/fpm/pool.d/www.conf

例如:PHP运行用户组和用户
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

需要确保代码所在的用户组和用户与上面的一致,否则会出现文件权限问题。

PHP运行socket文件位置

listen = /run/php/php8.3-fpm.sock

配置nginx解析php会用到。

开启jit功能

找到/etc/php/8.3/fpm/conf.d/10-opcache.ini文件,修改如下:

; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.jit_buffer_size=256M
opcache.jit=1255

通过 php -i|grep ‘opcache.jit’ 命令确定是否开启jit成功。
opcache.jit => 1255 => 1255
opcache.jit_bisect_limit => 0 => 0
opcache.jit_blacklist_root_trace => 16 => 16
opcache.jit_blacklist_side_trace => 8 => 8
opcache.jit_buffer_size => 256M => 256M
opcache.jit_debug => 0 => 0
opcache.jit_hot_func => 127 => 127
opcache.jit_hot_loop => 64 => 64
opcache.jit_hot_return => 8 => 8
opcache.jit_hot_side_exit => 8 => 8
opcache.jit_max_exit_counters => 8192 => 8192
opcache.jit_max_loop_unrolls => 8 => 8
opcache.jit_max_polymorphic_calls => 2 => 2
opcache.jit_max_recursive_calls => 2 => 2
opcache.jit_max_recursive_returns => 2 => 2
opcache.jit_max_root_traces => 1024 => 1024
opcache.jit_max_side_traces => 128 => 128
opcache.jit_max_trace_length => 1024 => 1024
opcache.jit_prof_threshold => 0.005 => 0.005

安装nginx

sudo apt install nginx

查看nginx状态:sudo systemctl status nginx

重启nginx:sudo systemctl restart nginx

禁止nginx自启动:sudo systemctl disable nginx

开启nginx自启动:sudo systemctl enable nginx

nginx配置文件夹:/etc/nginx

查看nginx运行用户:/etc/nginx/nginx.conf

user www-data;

这与php运行用户一致。

增加php解析,修改配置文件:/etc/nginx/sites-available/default

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
    # 增加主页文件index.php
index index.php index.html index.htm;


server_name _;


location / {
try_files $uri $uri/ =404;
}
    # 开启php解析
location ~ \.php$ {
include snippets/fastcgi-php.conf;
        # 这里默认的php socket文件也可以修改为指定的php:/run/php/php8.3-fpm.sock
fastcgi_pass unix:/run/php/php-fpm.sock;
}
}

 

在 /var/www/html 目录下新建index.php

<?php
phpinfo();

重启nginx后,访问网站,出现php信息页面,说明nginx解析php配置成功。

为避免文件权限问题,应该修改 /var/www/html 目录所属用户为 www-data。

sudo chown -R www-data:www-data /var/www/html/

如果需要修改文件夹权限,可以执行下面命令。

sudo chmod -R 755 /var/www/html/

安装MySQL

sudo apt install mysql-server

查看MySQL状态:sudo service mysql status

重启MySQL:sudo service mysql restart

登录MySQL:sudo mysql -u root

无需密码即可以进入,因为新版默认采用 auth_socket 认证。

MySQL配置文件夹:/etc/mysql

修改MySQL配置:/etc/mysql/mysql.conf.d/mysqld.cnf

socket = /var/run/mysqld/mysqld.sock
bind-address = 127.0.0.1

php连接MySQL测试

由于php运行用户为 www-data,所以需要在数据库里创建一个 www-data 用户,供php使用。

— 创建用户 www-data,使用 auth_socket 插件
CREATE USER ‘www-data’@’localhost’ IDENTIFIED WITH auth_socket;

— 授予所有数据库的访问权限(可按需调整)
GRANT ALL PRIVILEGES ON *.* TO ‘www-data’@’localhost’;

— 刷新权限
FLUSH PRIVILEGES;

在网站根目录下新建mysql.php文件,测试php连接MySQL。

<?php
/**
 * MySQL 连接测试脚本 - 使用 auth_socket 认证
 * 运行方式: php mysql_test.php
 * 或在浏览器中访问(如果配置了 web 服务器)
 */


// 获取当前操作系统用户名(用于调试)
$systemUser = exec('whoami');


echo "========================================\n";
echo "MySQL auth_socket 连接测试\n";
echo "========================================\n";
echo "当前系统用户: " . $systemUser . "\n";
echo "PHP 版本: " . phpversion() . "\n";
echo "----------------------------------------\n";


// 数据库连接配置
$config = [
    'host' => 'localhost',        // 必须使用 localhost 才能使用 socket 认证
    'user' => 'www-data',              // 使用 auth_socket 认证的 MySQL 用户名
    'password' => '',              // auth_socket 不需要密码,留空即可
    'database' => 'mysql',         // 测试连接用系统库
    'socket' => '/var/run/mysqld/mysqld.sock'  // MySQL socket 文件路径
];


/**
 * 方法1:使用 MySQLi 扩展连接
 */
echo "尝试使用 MySQLi 连接...\n";


// 创建连接(不指定密码)
$mysqli = new mysqli($config['host'], $config['user'], null, $config['database'], null, $config['socket']);


// 检查连接
if ($mysqli->connect_error) {
    echo "❌ MySQLi 连接失败: " . $mysqli->connect_error . "\n\n";
} else {
    echo "✅ MySQLi 连接成功!\n";


    // 执行测试查询
    $result = $mysqli->query("SELECT USER(), CURRENT_USER(), DATABASE()");
    if ($result) {
        $row = $result->fetch_row();
        echo "   当前数据库用户: " . $row[0] . "\n";
        echo "   认证用户: " . $row[1] . "\n";
        echo "   当前数据库: " . $row[2] . "\n";
        $result->free();
    }


    // 查询认证插件信息
    $result = $mysqli->query("SELECT plugin FROM mysql.user WHERE user = '" . $config['user'] . "' AND host = 'localhost'");
    if ($result && $row = $result->fetch_assoc()) {
        echo "   用户认证插件: " . $row['plugin'] . "\n";
    }


    $mysqli->close();
    echo "\n";
}


/**
 * 方法2:使用 PDO 扩展连接
 */
echo "尝试使用 PDO 连接...\n";


try {
    // DSN - 使用 unix_socket 参数指定 socket 路径
    $dsn = "mysql:host={$config['host']};unix_socket={$config['socket']};dbname={$config['database']};charset=utf8mb4";
    $pdo = new PDO($dsn, $config['user'], null);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


    echo "✅ PDO 连接成功!\n";


    // 执行测试查询
    $stmt = $pdo->query("SELECT USER(), CURRENT_USER(), DATABASE(), VERSION()");
    if ($stmt) {
        $row = $stmt->fetch(PDO::FETCH_NUM);
        echo "   当前数据库用户: " . $row[0] . "\n";
        echo "   认证用户: " . $row[1] . "\n";
        echo "   当前数据库: " . $row[2] . "\n";
        echo "   MySQL 版本: " . $row[3] . "\n";
    }


    // 查询 auth_socket 插件状态
    $stmt = $pdo->query("SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%socket%'");
    if ($stmt && $row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "   auth_socket 插件状态: " . $row['PLUGIN_STATUS'] . "\n";
    }


} catch (PDOException $e) {
    echo "❌ PDO 连接失败: " . $e->getMessage() . "\n";
}


echo "========================================\n";


// 故障排查建议
echo "\n📋 如果连接失败,请检查:\n";
echo "1. MySQL socket 文件路径是否正确:ls -l /var/run/mysqld/mysqld.sock\n";
echo "2. MySQL 用户 '$config[user]'@'localhost' 是否使用了 auth_socket 插件:\n";
echo "   SELECT user, host, plugin FROM mysql.user WHERE user='$config[user]' AND host='localhost';\n";
echo "3. 当前系统用户 '$systemUser' 是否匹配 MySQL 用户名(或已在 authentication_string 中授权)[citation:1][citation:5]\n";
echo "4. 检查 PHP 是否已安装 mysql 扩展:php -m | grep mysql\n";

访问这个php文件,输出成功信息说明连接MySQL成功。

安装libreoffice

sudo apt install libreoffice-nogui fonts-wqy-zenhei

查看libreoffice版本:soffice –version

LibreOffice 24.2.7.2 420(Build:2)

如果需要php调用libreoffice命令,确保命令行使用www-data用户运行和创建crontab计划任务。

示例:
sudo crontab -u www-data -e