手动编译 PHP 8.0:不用面板的部署方式
面板很方便,但它会往系统里塞不少东西。如果你的服务器还跑着别的服务,或者你要做成可复用的镜像,手动编译更可控。
依赖
sudo apt update
sudo apt install -y build-essential autoconf bison re2c \
libxml2-dev libsqlite3-dev libssl-dev libcurl4-openssl-dev \
libonig-dev libzip-dev libpng-dev libjpeg-dev libfreetype6-dev
编译
wget https://www.php.net/distributions/php-8.0.30.tar.gz
tar -zxf php-8.0.30.tar.gz && cd php-8.0.30
./configure --prefix=/usr/local/php80 \
--with-config-file-path=/usr/local/php80/etc \
--enable-fpm --with-fpm-user=www --with-fpm-group=www \
--enable-mbstring --enable-sockets --enable-bcmath \
--with-openssl --with-curl --with-zip \
--with-pdo-mysql --with-mysqli \
--enable-gd --with-jpeg --with-freetype \
--enable-opcache --enable-fileinfo
make -j$(nproc) && sudo make install
-j$(nproc) 会用满所有核心,2 核机器大约 8 分钟。
:::info 为什么是这些参数
bcmath 是订单金额计算要用的;fileinfo 是上传校验要用的;pdo-mysql 不用多说。少任何一个,程序都会在某个具体功能上报错而不是启动时报错,所以一次配齐比较省事。
:::
配置文件
sudo cp php.ini-production /usr/local/php80/etc/php.ini
sudo cp /usr/local/php80/etc/php-fpm.conf.default /usr/local/php80/etc/php-fpm.conf
sudo cp /usr/local/php80/etc/php-fpm.d/www.conf.default /usr/local/php80/etc/php-fpm.d/www.conf
php.ini 里至少改这几项:
post_max_size = 32M
upload_max_filesize = 32M
max_execution_time = 300
date.timezone = Asia/Shanghai
disable_functions =
最后一行留空——生产环境通常会禁用一批函数,但本程序需要其中几个,与其一个个挑不如先留空跑通,之后再按需收紧。
开机自启
sudo cp sapi/fpm/php-fpm.service /etc/systemd/system/
sudo systemctl enable --now php-fpm
跑 php -v 确认版本,接下来照常配 Nginx 就行。
评论 0