PHP搞微服务杂谈(一)关于高效的开发环境搭建
本文将以本人使用 windows/linux 做开发环境为例,mac 的可以绕开。其实这个系列文章是对上一个系列文章(带你轻松使用 Hyperf 玩转 Grpc)做补充探讨,因此内容依旧围绕 hyperf(swoole 框架)+ grpc 搭建微服务。我们团队使用的是 go+php 的并线开发,若是想了解 go 如何通过 grpc 与 php 互相调用的也可关注这两个系列文章。大牛请绕行哈哈哈。
需要什么?#
php-cli、php 基本的扩展、composer
swoole 扩展
protoc(protobuf 工具)、grpc_php_plugin 插件(用来生成 php 代码)
tips:若是旧项目使用 php-fpm 那就还需要安装 php-fpm 、grpc 扩展、protobuf 扩展才能正常使用 grpc 客户端。
使用 Docker 直接了当#
人生苦短,我选 docker
使用 docker 确实是比较方便,只要设计编译一次镜像放哪运行都一样
tips:可以选择我编译好的开发环境镜像,如下:
docker pull tangshaoxu/php-swoole-dev8:v2.0
docker run –rm -it -p 9501:9501 -v ./code:/app tangshaoxu/php-swoole-dev8:v2.0 /bin/sh
我上一系列文章的开篇使用的也是 docker 编排做开发环境(博客:带你轻松使用 Hyperf 玩转 Grpc(一)环境搭建)
好处:简单方便
坏处:性能较低,程序启动慢,当然脚本执行的也慢,并且无法使用 fswatch 热更新(有些同学还是需要热更新)
因此 windows 开发环境的同学就需要借助到 Linux(WSL)了
使用 WSL/Linux#
关于 WSL,以及如何安装问题这边就不做介绍,有需要的同学自行 google,并且最好使用 WSL 2 版本
这边以 WSL 使用 Ubuntu 为例
1、安装 php + swoole
# 安装php所需的apt库
apt update
apt install ca-certificates apt-transport-https software-properties-common wget gnupg2 unzip cmake g++ -y
sudo add-apt-repository ppa:ondrej/php
apt update
# 安装指定 php8.1版本 以及swoole扩展
apt install php8.1 php8.1-bcmath php8.1-curl php8.1-dom php8.1-mbstring php8.1-redis php8.1-mysql php8.1-gd php8.1-zip php8.1-xml php8.1-swoole -y
# 写入配置
echo "memory_limit=1G" > /etc/php/8.1/cli/conf.d/00_default.ini
echo "opcache.enable_cli = 'On'" >> /etc/php/8.1/cli/conf.d/*-opcache.ini
echo "swoole.use_shortname = 'Off'" >> /etc/php/8.1/cli/conf.d/*-swoole.ini
tips:这边 swoole 就直接以最简单的方式装上了,大家也可以照着官网文档自行编译安装最新版本
2、安装 composer
# 下载
wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/2.5.5/composer.phar
# 授权
chmod u+x /usr/local/bin/composer
3、安装 protoc
tips:如果对 protobuf 陌生的同学 可以先 google 了解一下
# 下载
curl -sSL "https://github.com/protocolbuffers/protobuf/releases/download/v3.18.1/protoc-3.18.1-linux-x86_64.zip" -o protoc.zip
# 建临时目录,解压
mkdir -p protoc
unzip protoc.zip -d ./protoc
# 安装
mv ./protoc/bin/protoc /usr/bin/
mv ./protoc/include/google /usr/include
4、安装 grpc_php_plugin 插件
tips:这一步至关重要,也是相对麻烦的一个步骤
# 下载
git clone -b "v1.46.3" "https://github.com/grpc/grpc"
cd grpc
git submodule update --init
# 编译
mkdir -p cmake/build
cd cmake/build
cmake ../..
make protoc grpc_php_plugin
# 复制
cp grpc_php_plugin /usr/local/lib/
到此,环境已经准备完毕。可以在电脑盘中安装 hyperf,并尝试运行
当执行运行命令大家会发现,启动慢依旧没改变。再试试使用 fswatch 热更新 也是不行。
启动慢 ?无法使用 fswatch 热更新 ?#
是的,这是由于 WSL2 在跨 OS 文件系统方面性能低导致的。
tips:图片来源 learn.microsoft.com/zh-cn/windows/...
而代码文件存放在 windows 文件系统下,linux 子系统当然无法使用 fswatch 对文件进行监控。因此也就无法使用 fswatch 做热更新。
客户端 -> linux(wsl)-> 代码文件 (windows)
解决方法#
解决方法朴实无华,就是把代码放 linux(wsl)。在 windows 也照常能用文件资源管理器访问,甚至可以使用 PHPStorm、vscode 等工具打开代码。甚至使用 新版 PHPStorm 打开项目,使用命令行工具还自动切换到 wsl,非常的好用。
客户端 -> 代码文件(wsl)
再启动试试,将发现启动变得飞快,由原来的十几秒 提升到 2 秒左右。
甚至可以安装 fswatch,用起来热更新。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: