sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl wget libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
mkdir ~/src && cd ~/src
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
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
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
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
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
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 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配置文件:
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
mysql --version
/usr/local/nginx/sbin/nginx -v
/usr/local/php82/bin/php -v
/usr/local/php74/bin/php -v
- http://php82.example.com (或你的服务器IP) - http://php74.example.com (或你的服务器IP)
PHP-FPM无法启动:
Nginx 502 Bad Gateway:
MySQL连接问题:
sudo service mysql status
缺少依赖库:
apt search
查找相关包通过以上步骤,你应该已经在Debian系统上成功编译安装了Nginx、MySQL和多版本PHP环境。