作为新手,我们往往会使用 集成化面板或GUI的 PHP 开发环境,亦或者使用 Docker 容器进行 Hyperf 的开发,总会出现一些扩展、版本、依赖造成的问题,编写一个适合自己开发的脚本可以节省很多时间。
本文档来自某项目内部开发文档,所以会有一些过于客制化的地方,请酌情参阅。
本文意在提供构建环境思路,请结合自身的 linux 发行版进行修改。同样 windows 平台可以使用 WSL2 进行非常舒适的开发。
现已编写好适用于 Ubuntu LTS 与 MacOS ARM 的一键脚本: build-php-shell,可以直接开箱使用也可以,按照下方构建思路自行构建。
参考阅读:
- https://www.php.net/manual/zh/install.php
- https://wiki.swoole.com/#/environment
- https://hyperf.wiki/2.2/#/zh-cn/quick-start/install
使用宝塔面板安装的环境中 swoole 未对 curl 进行hook,仍需手动编译。所以推荐使用该文档流程构建。
注意:此处构建的环境仅适用于开发,未对上线部署进行优化,上线部署一律用官方提供的docker容器更加。
注意:此处介绍的是构建思路,并不代表可以直接复制粘贴。请仔细阅读注释,并使用搜索引擎辅助了解功能
更新 apt 依赖
sudo apt update
sudo apt upgrade
sudo apt install git wget autoconf automake bison build-essential curl flex \
libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline8 \
libreadline-dev libsqlite3-dev libzip-dev libzip5 nginx openssl \
pkg-config re2c sqlite3 zlib1g-dev libonig5 libonig-dev libsodium-dev
sudo apt install libboost-all-dev
下载并解压 PHP 8.0
wget https://www.php.net/distributions/php-8.0.15.tar.gz
tar -xzvf php-8.0.15.tar.gz
cd "php-8.0.15"
编译 PHP
./configure --prefix=${phpdir} \ # 想要存放的 php 地址
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--enable-bcmath \
--enable-fpm \
--enable-mbstring \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-zip \
--with-libzip=/usr/lib/x86_64-linux-gnu \
--with-zlib \
--with-curl \
--with-pear \
--with-openssl \
--enable-pcntl \
--with-readline
make -j 4 # 自应根据cpu选择
make install
复制 php.ini
cp php.ini-development ${php_dir}/lib/php.ini
编译 Swoole
wget https://github.com/swoole/swoole-src/archive/refs/tags/v4.8.7.zip
unzip v4.8.7.zip
cd "swoole-src-4.8.7"
"${php_dir}"/bin/phpize # 请注意 ${php_dir]}的替换
./configure --enable-openssl --enable-http2 --enable-swoole-curl --enable-swoole-json --with-php-config=${php_dir]}/bin/php-config # 请注意 ${php_dir]}的替换
make -s -j 4
make install
编译 yasd debuger 可选
wget https://github.com/swoole/yasd/archive/refs/tags/v0.3.9.zip
unzip v0.3.9.zip
cd yasd-0.3.9
"${php_dir}"bin/phpize --clean && \
"${php_dir}"bin/phpize && \
./configure --with-php-config="${php_dir}"/bin/php-config && \
make clean && \
make && \
make install
初始化 pecl pear
wget http://pear.php.net/go-pear.phar
sudo "${php_dir}"/bin/php go-pear.phar
sudo "${php_dir}"/bin/pear config-get php_dir
sudo "${php_dir}"/bin/pecl channel-update pecl.php.net
# 使用 pecl 安装 rdis
sudo "${php_dir}"/bin/pecl install redis
修改 php.ini
echo "memory_limit=1G" >> "${php_dir}"/lib/php.ini
echo "opcache.enable_cli = 'On'" >> "${php_dir}"/lib/php.ini
echo "extension=redis.so" >> "${php_dir}"/lib/php.ini
echo "extension=swoole.so" >> "${php_dir}"/lib/php.ini
echo "swoole.use_shortname = 'Off'" >> "${php_dir}"/lib/php.ini
echo "zend_extension=yasd" >> "${php_dir}"/lib/php.ini
# 如果使用 yasd
echo "yasd.debug_mode=remote" >> "${php_dir}"/lib/php.ini
echo "yasd.remote_host=127.0.0.1" >> "${php_dir}"/lib/php.ini
echo "yasd.remote_port=9000" >> "${php_dir}"/lib/php.ini
# 如果使用 swoole tracker 这个 swoole_tracker80.so 文件 请自行从 build-php-shell 仓库下载
echo "zend_extension=${base_dir}/swoole_tracker80.so" >> "${php_dir}"/lib/php.ini
echo "apm.enable=1" >> "${php_dir}"/lib/php.ini
echo "apm.sampling_rate=100" >> "${php_dir}"/lib/php.ini
echo "apm.enable_memcheck=1" >> "${php_dir}"/lib/php.ini
echo "tracker.enable_malloc_hook=1" >> "${php_dir}"/lib/php.ini
echo "tracker.sampling_rate=100" >> "${php_dir}"/lib/php.ini
echo "tracker.enable_memcheck=1" >> "${php_dir}"/lib/php.ini
echo "tracker.enable=0" >> "${php_dir}"/lib/php.ini
测试环境
"${php_dir}"/bin/php -v
"${php_dir}"/bin/php -m
"${php_dir}"/bin/php --ri swoole
安装 Composer 包管理器
wget https://mirrors.aliyun.com/composer/composer.phar
"${php_dir}"/bin/php composer.phar
composer
设置到环境变量
sudo ln -s -f ${php_dir}/bin/php /usr/bin/php
sudo ln -s -f ${composer_dir}/composer.phar /usr/bin/composer
sudo chmod +x /usr/bin/composer
测试
php -v
php -m
php --ri swoole
composer