安装任意版本 PHP/Nginx 的通用步骤(Ubuntu / Debian/Alpine)
1. 添加 PHP 官方维护的源(由 Ondřej Surý 提供)
Ubuntu:
XML/HTML代码
- sudo apt update
- sudo apt install -y software-properties-common
- sudo add-apt-repository ppa:ondrej/php
- sudo apt update
Debian:
XML/HTML代码
- sudo apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
- curl -fsSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
- echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
- sudo apt update
2. 安装你想要的 PHP 版本
比如:
XML/HTML代码
- sudo apt install php8.2
安装常见模块(以 PHP 8.2 为例):
XML/HTML代码
- sudo apt install php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl php8.2-xml php8.2-mbstring php8.2-zip php8.2-gd
你可以用以下命令列出所有可用 PHP 版本:
XML/HTML代码
- apt search ^php | grep -E '^php[0-9]+\.[0-9]+'
3. 设置默认 PHP 版本(如果安装了多个版本)
# 注册 PHP 可选项到 update-alternatives:
XML/HTML代码
- sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81
- sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82
# 然后切换默认版本:
XML/HTML代码
- sudo update-alternatives --config php
# 验证当前版本:
XML/HTML代码
- php -v
可选:切换 phpize 和 php-config(某些软件编译时需要)
XML/HTML代码
- sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize8.1 81
- sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize8.2 82
- sudo update-alternatives --install /usr/bin/php-config php-config /usr/bin/php-config8.1 81
- sudo update-alternatives --install /usr/bin/php-config php-config /usr/bin/php-config8.2 82
- sudo update-alternatives --config phpize
- sudo update-alternatives --config php-config
# 可选:切换 PHP-FPM(Web 服务用)
如果你用的是 Nginx + PHP-FPM,还需要切换 FPM:
# 安装多个 PHP-FPM 版本:
XML/HTML代码
- sudo apt-get install php8.1-fpm php8.2-fpm
# 修改 Nginx 配置中的 FPM socket 路径,如:
XML/HTML代码
- fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# 重启服务:
XML/HTML代码
- sudo systemctl restart php8.2-fpm
- sudo systemctl reload nginx
Ubuntu 安装任意版本 Nginx
方法 :使用 Nginx 官方源(推荐)
Nginx 官方专门为 Ubuntu 维护了包:
XML/HTML代码
- # 导入 GPG key:
- curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
- # 添加官方源(适配 Ubuntu 版本):
- codename=$(lsb_release -cs)
- echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $codename nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
更新仓库并查看版本:
XML/HTML代码
- sudo apt update
- apt list -a nginx
安装特定版本:
XML/HTML代码
- sudo apt install nginx=<version>
Ubuntu 的版本代号如 focal, jammy 会影响 nginx 包的可用性。可以去 Nginx 的官方仓库查对应代号是否被支持。
Debian 安装任意版本 Nginx
方法 :使用 Nginx 官方源(专门为 Debian 提供)
XML/HTML代码
- # 导入 GPG key:
- curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
- # 添加官方源(适配 Debian 版本):
- codename=$(lsb_release -cs)
- echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $codename nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
继续与 Ubuntu 相同的步骤进行安装。
Debian 的版本代号如 buster, bullseye, bookworm 需要与你当前系统匹配。
可用版本查询办法:
官方 Nginx 仓库页面:
Ubuntu 的 Launchpad(历史包):
Debian Snapshots(历史包):
附:Alpine系统安装不同版本PHP和Nginx的方法
不同Alpine系统版本默认PHP和Nginx的版本不同,可以通过添加源的方法实现,例如需要安装PHP7.4则可以添加以下源
XML/HTML代码
- http://dl-cdn.alpinelinux.org/alpine/v3.15/main
- http://dl-cdn.alpinelinux.org/alpine/v3.15/community
1. 更新 APK 软件包索引
XML/HTML代码
- sudo apk update
2. 安装 PHP 7.4 及相关扩展(根据需求修改,安装更多扩展)
XML/HTML代码
- sudo apk add php7 php7-cli php7-fpm php7-mysqli php7-json php7-opcache php7-session php7-mbstring
3. 检查 PHP 版本
XML/HTML代码
- php -v
4. 启动 PHP-FPM 服务
XML/HTML代码
- sudo rc-service php7-fpm start
5. 设置 PHP-FPM 在启动时自动启动
XML/HTML代码
- sudo rc-update add php7-fpm
常见版本支持情况
XML/HTML代码
- Alpine 版本 PHP 版本 Nginx 版本
- 3.13 7.4 1.18.0
- 3.14 7.4,8.0 1.20.2
- 3.15 7.4,8.0 1.20.2
- 3.16 8.0,8.1 1.22.1
- 3.17 8.1 1.22.1
- 3.18 8.1, 8.2 1.24.0
- 3.19 8.1, 8.2, 8.3 1.24.0
- 3.20 8.2, 8.3 1.26.3
- 3.21 8.2, 8.3, 8.4 1.26.3
- edge 8.2, 8.3, 8.4 1.26.3
详细支持参考上表手动安装。注意:Nginx不能使用换源方法安装指定版本,必须手动编译。
在 Alpine Linux 上编译指定版本的 Nginx,你可以按照以下步骤操作。
假设你要编译 Nginx 版本 1.24.0(你可以根据需要替换为其他版本)。
步骤一:准备构建环境
XML/HTML代码
- apk update
- apk add build-base pcre-dev zlib-dev openssl-dev curl
步骤二:下载指定版本的 Nginx 源码
XML/HTML代码
- NGINX_VERSION=1.24.0
- curl -O http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
- tar zxvf nginx-${NGINX_VERSION}.tar.gz
- cd nginx-${NGINX_VERSION}
步骤三:配置编译选项(可按需调整)
XML/HTML代码
- ./configure \
- --prefix=/opt/nginx \
- --with-http_ssl_module \
- --with-http_v2_module \
- --with-http_gzip_static_module \
- --with-pcre \
- --with-stream \
- --with-stream_ssl_module
步骤四:编译并安装
XML/HTML代码
- make -j$(nproc)
- make install
步骤五:运行验证
XML/HTML代码
- /opt/nginx/sbin/nginx -v
- /opt/nginx/sbin/nginx
默认安装路径是 /opt/nginx,你可以将其加到 PATH 中:
XML/HTML代码
- export PATH=$PATH:/opt/nginx/sbin
设置Nginx开机启动
方案一:使用 OpenRC(Alpine 默认的 init 系统)
1. 创建 OpenRC 服务脚本
创建一个服务文件 /etc/init.d/nginx:
XML/HTML代码
- vi /etc/init.d/nginx
内容如下(请确保路径与你的实际安装路径一致,比如 /opt/nginx/sbin/nginx):
XML/HTML代码
- #!/sbin/openrc-run
- name="nginx"
- description="Nginx web server"
- command="/opt/nginx/sbin/nginx"
- command_args="-c /opt/nginx/conf/nginx.conf"
- pidfile="/opt/nginx/logs/nginx.pid"
- depend() {
- need net
- use dns logger
- after firewall
- }
2. 添加执行权限
XML/HTML代码
- chmod +x /etc/init.d/nginx
3. 添加到开机启动
XML/HTML代码
- rc-update add nginx default
4. 启动服务
XML/HTML代码
- rc-service nginx start
方案二:使用 supervisord 管理(适用于 Docker 或后台多进程管理)
安装:
XML/HTML代码
- apk add supervisor
配置 /etc/supervisord.conf 或单独的配置文件:
XML/HTML代码
- [program:nginx]
- command=/opt/nginx/sbin/nginx -g 'daemon off;'
- autorestart=true
- stdout_logfile=/var/log/nginx.stdout.log
- stderr_logfile=/var/log/nginx.stderr.log
启动 supervisord:
XML/HTML代码
- supervisord -c /etc/supervisord.conf
设置开机自启:
XML/HTML代码
- rc-update add supervisor
方案三:写入 /etc/local.d/nginx.start 脚本(适合 Alpine 系统)
创建文件:
XML/HTML代码
- vi /etc/local.d/nginx.start
内容:
XML/HTML代码
- #!/bin/sh
- /opt/nginx/sbin/nginx
设置权限:
XML/HTML代码
- chmod +x /etc/local.d/nginx.start
启用 local 服务:
XML/HTML代码
- rc-update add local
查看是否成功设置开机启动
XML/HTML代码
- rc-status
以上操作均为验证,如需使用请自行验证修改。