插件窝 干货文章 Debian编译安装Nginx+Mysql+多版本PHP

Debian编译安装Nginx+Mysql+多版本PHP

PHP MySQL local Nginx 732    来源:    2025-05-11

Debian系统编译安装Nginx+MySQL+多版本PHP指南

准备工作

  1. 更新系统并安装编译工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl wget libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  1. 创建编译目录:
mkdir ~/src && cd ~/src

安装MySQL

方法1:使用官方仓库安装

wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
sudo apt update
sudo apt install -y mysql-server

方法2:编译安装MySQL

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33.tar.gz
tar -xzvf mysql-8.0.33.tar.gz
cd mysql-8.0.33
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
         -DMYSQL_DATADIR=/var/lib/mysql \
         -DSYSCONFDIR=/etc \
         -DWITH_INNOBASE_STORAGE_ENGINE=1 \
         -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
         -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
         -DWITH_READLINE=1 \
         -DWITH_SSL=system \
         -DWITH_ZLIB=system \
         -DWITH_LIBWRAP=0 \
         -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
         -DDEFAULT_CHARSET=utf8mb4 \
         -DDEFAULT_COLLATION=utf8mb4_general_ci
make -j$(nproc)
sudo make install

初始化MySQL:

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults
sudo service mysql start

编译安装Nginx

cd ~/src
wget https://nginx.org/download/nginx-1.25.3.tar.gz
tar -xzvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
./configure --prefix=/usr/local/nginx \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_stub_status_module \
            --with-http_gzip_static_module \
            --with-pcre \
            --with-stream \
            --with-stream_ssl_module
make -j$(nproc)
sudo make install

创建systemd服务:

sudo nano /etc/systemd/system/nginx.service

内容如下:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启用并启动Nginx:

sudo systemctl enable nginx
sudo systemctl start nginx

编译安装多版本PHP

安装PHP依赖

sudo apt install -y libxml2-dev libsqlite3-dev libcurl4-openssl-dev libonig-dev libzip-dev \
                    libjpeg-dev libpng-dev libfreetype6-dev libwebp-dev libxpm-dev \
                    libxslt1-dev libbz2-dev libgmp-dev libldap2-dev libpspell-dev \
                    librecode-dev libsodium-dev libargon2-dev libicu-dev

编译安装PHP 8.2

cd ~/src
wget https://www.php.net/distributions/php-8.2.8.tar.gz
tar -xzvf php-8.2.8.tar.gz
cd php-8.2.8
./configure --prefix=/usr/local/php82 \
            --with-config-file-path=/usr/local/php82/etc \
            --enable-fpm \
            --with-fpm-user=www-data \
            --with-fpm-group=www-data \
            --enable-mysqlnd \
            --with-pdo-mysql=mysqlnd \
            --with-mysqli=mysqlnd \
            --with-openssl \
            --with-zlib \
            --with-curl \
            --enable-mbstring \
            --enable-intl \
            --with-libxml \
            --enable-soap \
            --with-xsl \
            --enable-opcache \
            --with-pear \
            --enable-gd \
            --with-jpeg \
            --with-freetype \
            --with-webp \
            --with-xpm
make -j$(nproc)
sudo make install
sudo cp php.ini-production /usr/local/php82/etc/php.ini
sudo cp /usr/local/php82/etc/php-fpm.conf.default /usr/local/php82/etc/php-fpm.conf
sudo cp /usr/local/php82/etc/php-fpm.d/www.conf.default /usr/local/php82/etc/php-fpm.d/www.conf

编译安装PHP 7.4

cd ~/src
wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar -xzvf php-7.4.33.tar.gz
cd php-7.4.33
./configure --prefix=/usr/local/php74 \
            --with-config-file-path=/usr/local/php74/etc \
            --enable-fpm \
            --with-fpm-user=www-data \
            --with-fpm-group=www-data \
            --enable-mysqlnd \
            --with-pdo-mysql=mysqlnd \
            --with-mysqli=mysqlnd \
            --with-openssl \
            --with-zlib \
            --with-curl \
            --enable-mbstring \
            --enable-intl \
            --with-libxml \
            --enable-soap \
            --with-xsl \
            --enable-opcache \
            --with-pear \
            --enable-gd \
            --with-jpeg \
            --with-freetype \
            --with-webp \
            --with-xpm
make -j$(nproc)
sudo make install
sudo cp php.ini-production /usr/local/php74/etc/php.ini
sudo cp /usr/local/php74/etc/php-fpm.conf.default /usr/local/php74/etc/php-fpm.conf
sudo cp /usr/local/php74/etc/php-fpm.d/www.conf.default /usr/local/php74/etc/php-fpm.d/www.conf

创建PHP-FPM服务

为PHP 8.2创建服务:

sudo nano /etc/systemd/system/php82-fpm.service

内容如下:

[Unit]
Description=The PHP 8.2 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/run/php82-fpm.pid
ExecStart=/usr/local/php82/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php82/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

为PHP 7.4创建服务:

sudo nano /etc/systemd/system/php74-fpm.service

内容如下:

[Unit]
Description=The PHP 7.4 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/run/php74-fpm.pid
ExecStart=/usr/local/php74/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php74/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

启动PHP-FPM服务:

sudo systemctl daemon-reload
sudo systemctl enable php82-fpm php74-fpm
sudo systemctl start php82-fpm php74-fpm

配置Nginx支持多版本PHP

编辑Nginx配置文件:

sudo nano /usr/local/nginx/conf/nginx.conf

在http块中添加类似以下配置:

server {
    listen 80;
    server_name php82.example.com;

    root /var/www/php82;
    index index.php index.html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/usr/local/php82/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

server {
    listen 80;
    server_name php74.example.com;

    root /var/www/php74;
    index index.php index.html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/usr/local/php74/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

创建测试目录和文件:

sudo mkdir -p /var/www/{php82,php74}
sudo chown -R www-data:www-data /var/www
echo "<?php phpinfo(); ?>" | sudo tee /var/www/php82/index.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/php74/index.php

测试并重启Nginx:

sudo /usr/local/nginx/sbin/nginx -t
sudo systemctl restart nginx

环境变量和路径设置

将PHP和MySQL添加到PATH:

echo 'export PATH=/usr/local/mysql/bin:/usr/local/php82/bin:/usr/local/php74/bin:$PATH' | sudo tee -a /etc/profile.d/custom.sh
source /etc/profile

验证安装

  1. 检查MySQL:
mysql --version
  1. 检查Nginx:
/usr/local/nginx/sbin/nginx -v
  1. 检查PHP版本:
/usr/local/php82/bin/php -v
/usr/local/php74/bin/php -v
  1. 在浏览器中访问:

- http://php82.example.com (或你的服务器IP) - http://php74.example.com (或你的服务器IP)

常见问题解决

  1. PHP-FPM无法启动

    • 检查/usr/local/php*/var/log/php-fpm.log中的错误日志
    • 确保sock文件路径正确且权限足够
  2. Nginx 502 Bad Gateway

    • 检查PHP-FPM是否运行
    • 确认Nginx配置中的fastcgi_pass路径正确
  3. MySQL连接问题

    • 检查MySQL是否运行:sudo service mysql status
    • 确保PHP的mysql/mysqli扩展已正确安装
  4. 缺少依赖库

    • 根据编译错误提示安装相应的开发包
    • 使用apt search查找相关包

通过以上步骤,你应该已经在Debian系统上成功编译安装了Nginx、MySQL和多版本PHP环境。