PHP 8.4 编译部署webman1.6与ThinkPHP 8.1实战教程

PHP 8.4 已于2024年11月21日正式发布。PHP 8.4 是PHP语言的一次重大更新。它包含许多新功能,例如属性钩子、不对称可见性、更新的 DOM API、性能改进、错误修复和常规清理等。

安装 PHP 8.4

下载

wget https://www.php.net/distributions/php-8.4.1.tar.gz
tar -zxvf php-8.4.1.tar.gz

下载地址:https://www.php.net/downloads

安装依赖包

sudo apt-get install libfcgi-dev libfcgi0ldbl libjpeg-turbo8-dev \
libmcrypt-dev libssl-dev libc-client2007e  \
libc-client2007e-dev libxml2-dev libbz2-dev  \
libcurl4-openssl-dev libjpeg-dev libpng-dev \
libfreetype6-dev libkrb5-dev libpq-dev \
libxml2-dev libxslt1-dev libzip-dev \
libsqlite3-dev libonig-dev pkg-config \
libxml2-dev libkrb5-dev  libssl-dev \
libbz2-dev libpng-dev  libfreetype6-dev \
libc-client2007e-dev libonig-dev \
libreadline-dev libxslt1-dev libzip-dev

如果安装的依赖包不存在,请通过命令:apt-cache search freetype 查找相应的安装包安装即可

编译

cd php-8.4.1

sudo ./configure \
--prefix=/usr/local/php-8.4.1 \
--with-config-file-path=/usr/local/php-8.4.1/etc \
--with-freetype \
--enable-mbstring \
--enable-soap \
--enable-calendar \
--with-curl \
--with-zlib \
--enable-gd \
--disable-rpath \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--with-zip \
--with-pdo-mysql \
--with-mysqli \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-jpeg \
--with-openssl \
--with-fpm-user=www \
--with-fpm-group=www \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp  \
--with-gettext \
--with-xsl \
--enable-opcache \
--enable-intl \
--with-pear \
--enable-fpm

安装

make
make install

安装日志

~/build/php-8.4.1$ sudo make install
Installing shared extensions:     /usr/local/php-8.4.1/lib/php/extensions/no-debug-non-zts-20240924/
Installing PHP CLI binary:        /usr/local/php-8.4.1/bin/
Installing PHP CLI man page:      /usr/local/php-8.4.1/php/man/man1/
Installing PHP FPM binary:        /usr/local/php-8.4.1/sbin/
Installing PHP FPM defconfig:     /usr/local/php-8.4.1/etc/
Installing PHP FPM man page:      /usr/local/php-8.4.1/php/man/man8/
Installing PHP FPM status page:   /usr/local/php-8.4.1/php/php/fpm/
Installing phpdbg binary:         /usr/local/php-8.4.1/bin/
Installing phpdbg man page:       /usr/local/php-8.4.1/php/man/man1/
Installing PHP CGI binary:        /usr/local/php-8.4.1/bin/
Installing PHP CGI man page:      /usr/local/php-8.4.1/php/man/man1/
Installing build environment:     /usr/local/php-8.4.1/lib/php/build/
Installing header files:          /usr/local/php-8.4.1/include/php/
Installing helper programs:       /usr/local/php-8.4.1/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php-8.4.1/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php-8.4.1/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.14
[PEAR] Console_Getopt - installed: 1.4.3
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.5
warning: pear/PEAR dependency package "pear/Archive_Tar" installed version 1.4.14 is not the recommended version 1.4.4
[PEAR] PEAR           - installed: 1.10.15
Wrote PEAR system config file at: /usr/local/php-8.4.1/etc/pear.conf
You may want to add: /usr/local/php-8.4.1/lib/php to your php.ini include_path

配置文件

1、通过命令php -v 查看PHP版本

/usr/local/php-8.4.1/bin/php -v
PHP 8.4.1 (cli) (built: Dec  5 2024 20:08:33) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.1, Copyright (c) Zend Technologies

2、核心php.ini 配置文件

cd /home/www/build/php-8.4.1

sudo cp php.ini-production /usr/local/php-8.4.1/etc/php.ini

注意: 如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。 定位到 cgi.fix_pathinfo 并将其修改为如下所示:

cgi.fix_pathinfo=0

3、PHP-FPM 进程服务的配置文件php-fpm.conf

cd /usr/local/php-8.4.1/etc
cp php-fpm.conf.default php-fpm.conf

4、PHP-FPM 扩展配置文件www.conf

cd /usr/local/php-8.4.1/etc/php-fpm.d
cp www.conf.default www.conf

用户和用户组配置

配置/usr/local/php-8.4.1/etc/php-fpm.d/www.conf

user = www
group = www
 
listen.owner = www
listen.group = www
listen.mode = 0660

www用户组分配权限(非必须)

chown www:www /usr/local/php-8.4.1/etc/php-fpm.d/www.conf

修改fpm监听的端口

; listen = 127.0.0.1:9000  -- 默认是打开的,在前面加; 注释掉
listen = /var/run/php8.4.1-fpm.sock  -- 添加这一行

创建系统单元文件

接下来,我们将创建系统单元文件,该文件用于启动和停止PHP-FPM守护程序。

1、添加服务

vim /lib/systemd/system/php-8.4.1-fpm.service

具有以下内容:

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

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

[Install]
WantedBy=multi-user.target

2、启用服务并重新加载systemd

sudo systemctl enable php-8.4.1-fpm.service

Created symlink /etc/systemd/system/multi-user.target.wants/php-8.4.1-fpm.service → /usr/lib/systemd/system/php-8.4.1-fpm.service.

sudo systemctl daemon-reload

3、启动PHP-FPM 服务

sudo systemctl start php-8.4.1-fpm.service

4、查看PHP-FPM 服务状态

sudo systemctl status php-8.4.1-fpm.service

● php-8.4.1-fpm.service - The PHP 8.4.1 FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-8.4.1-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2024-12-05 20:39:14 CST; 5s ago
 Main PID: 432653 (php-fpm)
    Tasks: 3 (limit: 98627)
   Memory: 11.7M
   CGroup: /system.slice/php-8.4.1-fpm.service
           ├─432653 php-fpm: master process (/usr/local/php-8.4.1/etc/php-fpm.conf)
           ├─432654 php-fpm: pool www
           └─432655 php-fpm: pool www

Dec 05 20:39:14 Tinywan systemd[1]: Started The PHP 8.4.1 FastCGI Process Manager.

5、开机自启动

sudo systemctl enable php-8.4.1-fpm.service

安装composer

wget https://getcomposer.org/download/latest-stable/composer.phar

查看composer -v 版本,出现以下界面表示安装成功

 /usr/local/php-8.4.1/bin/php composer.phar -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.8.3 2024-11-17 13:13:04

安装 Webman 1.6

https://www.workerman.net/doc/webman/install.html

创建项目

 /usr/local/php-8.4.1/bin/php composer.phar create-project workerman/webman webman1.6

Creating a "workerman/webman" project at "./webman1.6"
Installing workerman/webman (v1.6.3)
  - Downloading workerman/webman (v1.6.3)
  - Installing workerman/webman (v1.6.3): Extracting archive
Created project in /var/www/webman/webman1.6
Loading composer repositories with package information
Updating dependencies
Lock file operations: 6 installs, 0 updates, 0 removals
  - Locking monolog/monolog (2.10.0)
  - Locking nikic/fast-route (v1.3.0)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking workerman/webman-framework (v1.6.6)
  - Locking workerman/workerman (v4.2.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing psr/log (3.0.2): Extracting archive
  - Installing monolog/monolog (2.10.0): Extracting archive
  - Installing workerman/workerman (v4.2.1): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing nikic/fast-route (v1.3.0): Extracting archive
  - Installing workerman/webman-framework (v1.6.6): Extracting archive
> support\Plugin::install
> support\Plugin::install
> support\Plugin::install
> support\Plugin::install
> support\Plugin::install
> support\Plugin::install
Create start.php
Create windows.php
Create support/bootstrap.php
Create support/helpers.php
10 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.

启动项目

/usr/local/php-8.4.1/bin/php start.php start
Workerman[start.php] start in DEBUG mode
------------------------------------------- WORKERMAN -------------------------------------------
Workerman version:4.2.1          PHP version:8.4.1           Event-Loop:\Workerman\Events\Event
-------------------------------------------- WORKERS --------------------------------------------
proto   user            worker          listen                 processes    status
tcp     root            webman          http://0.0.0.0:8289    24            [OK] 
tcp     root            monitor         none                   1             [OK] 
-------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.

访问项目

图片

安装 ThinkPHP8.1

官方安装文档:https://doc.thinkphp.cn/v8_0/setup.html

注意:这里由于有多套环境,所以安装需要指定PHP绝对路径

创建项目

/usr/local/php-8.4/bin/php composer.phar create-project topthink/think tp8.1

Creating a "topthink/think" project at "./tp8.1"
Installing topthink/think (v8.1)
  - Downloading topthink/think (v8.1)
  - Installing topthink/think (v8.1): Extracting archive
Created project in /var/www/webman/tp8.1
Loading composer repositories with package information
Updating dependencies
Lock file operations: 15 installs, 0 updates, 0 removals
  - Locking league/flysystem (1.1.10)
  - Locking league/flysystem-cached-adapter (1.1.0)
  - Locking league/mime-type-detection (1.16.0)
  - Locking topthink/framework (v8.1.1)
  - Locking topthink/think-filesystem (v2.0.3)
  - Locking topthink/think-helper (v3.1.10)
  - Locking topthink/think-orm (v3.0.30)
  - Locking topthink/think-trace (v1.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 15 installs, 0 updates, 0 removals
  - Downloading psr/cache (1.0.1)
  - Installing psr/log (3.0.2): Extracting archive
  - Installing topthink/think-orm (v3.0.30): Extracting archive
  - Installing topthink/framework (v8.1.1): Extracting archive
  - Installing league/flysystem (1.1.10): Extracting archive
  - Installing league/flysystem-cached-adapter (1.1.0): Extracting archive
  - Installing topthink/think-filesystem (v2.0.3): Extracting archive
  - Installing topthink/think-trace (v1.6): Extracting archive
12 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
> @php think service:discover
Succeed!
> @php think vendor:publish
File /var/www/webman/tp8.1/config/trace.php exist!
Succeed!
4 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.

Nginx 主机配置

server {
    listen 80;
    server_name 121.128.128.128;
    set $root_path /home/www/build/tp8.1/public;
    root $root_path;
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=/$1 last;
            break;
        }
    }

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

        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_connect_timeout 10000;
        fastcgi_send_timeout 6000;
        fastcgi_read_timeout 6000;
    }
}

访问项目

访问该服务器公网IP,如:http://121.128.128.128 ,看到以下界面表示安装成功啦!

图片
来源:开源技术小栈
THE END