# 基于docker的webman-jsonrpc 我们在`php:8.2.20-cli`基础上安装了运行webman必要的一些扩展和开发中常用的扩展,以及composer,制作成`workerman:8.2.20`镜像,因此在开发环境中不需要再额外配置php环境,直接写业务代码即可。 ## 版本 ```txt ./php start.php start Workerman[start.php] start in DEBUG mode ------------------------------------------- WORKERMAN -------------------------------------------- Workerman version:4.1.15 PHP version:8.2.20 Event-Loop:\Workerman\Events\Event -------------------------------------------- WORKERS --------------------------------------------- proto user worker listen processes status tcp root webman http://0.0.0.0:8787 8 [OK] tcp root monitor none 1 [OK] tcp root jsonrpc jsonNL://0.0.0.0:8021 8 [OK] -------------------------------------------------------------------------------------------------- Press Ctrl+C to stop. Start success. ``` ## 依赖 只要系统环境中有docker即可(生产环境需要docker-compose),不需要安装php环境。 ## 使用方法 ```sh # composer ./composer require xxxx # 启动服务 ./php start.php start # 执行其它php命令 ./php -m ./php webman build:bin ``` ## 服务端口 在.env文件中可以定义服务端口,默认情况下docker容器是在host网络下启动的,当然,实际使用中也可以改成端口映射模式。 ## 生产环境使用 创建一个docker-compose.yml文件: ```yml services: webman: image: quay.io/wandoubaba517/workerman:8.1.27 container_name: webman restart: always volumes: - ./:/app/service working_dir: /app/service stdin_open: true ports: - 8787:8787 # 部署生产时启动这一句 command: ['php', 'start.php', 'start'] healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8787/"] interval: 5s retries: 3 start_period: 5s timeout: 10s ``` 然后直接执行(前提要有docker-compose插件) ```sh docker compose up -d ``` ## 一些有用的文件 |文件|作用|用法或说明| |---|---|---| |composer|调起容器中的composer命令的shell脚本|用法与主机中的compose完全一致,./composer $args...| |php|调起容器中的php命令的shell脚本|用法与主机中的php一致,但注意执行./php start.php start命令时不要加-d参数| |php.ini|映射到容器中的php.ini配置文件|容器中已经安装的扩展都有单独的配置文件,这里不会有体现| ## 已安装PHP扩展 ```sh php -m [PHP Modules] bcmath Core ctype curl date dom event exif fileinfo filter ftp gd gmp hash iconv imagick json libxml mbstring mongodb mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_pgsql pdo_sqlite pgsql Phar posix readline redis Reflection session SimpleXML sockets sodium SPL sqlite3 standard tokenizer xlswriter xml xmlreader xmlwriter Zend OPcache zip zlib zookeeper [Zend Modules] Zend OPcache ``` ## 开发说明 ### jsonrpc服务端配置 主要在`config/process.php`中配置,`.env`文件可以辅助。 ### jsonrpc控制器 在`app/jsonrpc`目录中参照示例创建控制器文件和方法即可。 ### jsonrpc客户端配置 主要在`config/jsonrpc.php`中配置,`.env`文件可以辅助。 ### 客户端调用服务端的方法 ```php $res1 = \jsonrpc\Client::service('default', 'Demo')->hello('Json'); $res2 = \jsonrpc\Client::service('user', 'User')->login('admin', '123456'); $res3 = \jsonrpc\Client::service('default', 'Demo')->text(); ```