# dev-php **Repository Path**: whatbug/dev-php ## Basic Information - **Project Name**: dev-php - **Description**: 本地php多版本开发环境 docker-compose 一键启动 - **Primary Language**: Docker - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-14 - **Last Updated**: 2022-06-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: docker-compose, PHP, php-dev, 一键安装, php80 ## README ![demo-portainer.jpg](demo-portainer.jpg) ### 第一步,安装依赖工具 - Git // brew install git - Docker [https://docs.docker.com/install/] - Docker-compose [https://docs.docker.com/compose/install/#install-compose] ### 第二步,获取项目代码 ``` $ git clone https://github.com/whatbug/dev-php.git ``` ### 第三步,运行容器编排 ``` $ cd dev-php // 进入项目根目录 $ docker-compose up -d // 容器编排命令 ``` - 启动 `Demo` 示例 ```shell # cd your_project_path cd www/demo # 运行服务 `demo` 项目 docker run -it --rm --name www-demo \ -p 8001:8001 \ -v "$PWD":/usr/workspaces/project \ -w /usr/workspaces/project \ php2-cli \ php -S 0.0.0.0:8001 ``` - 启动 `Laravel` 示例 ```shell # cd your_project_path cd project # composer install docker run -it --rm --name www-laravel \ -v "$PWD":/usr/workspaces/project \ -w /usr/workspaces/project \ php2-cli \ composer install # php aritsan cache:clear docker run -it --rm --name www-laravel \ -v "$PWD":/usr/workspaces/project \ -w /usr/workspaces/project \ php2-cli \ php artisan cache:clear # php artisan serve docker run -it --rm --name www-laravel \ -p 8001:8001 \ -v "$PWD":/usr/workspaces/project \ -w /usr/workspaces/project \ php2-cli \ php artisan serve --host=0.0.0.0 --port=8001 ``` - 启动 `Laravel-Swoole` 示例 ``` # 配置 host 要修改为 0.0.0.0 # php artisan serve docker run -it --rm --name www-laravel \ -p 1215:1215 \ -v "$PWD":/usr/workspaces/project \ -w /usr/workspaces/project \ php2-cli \ php artisan swoole:http start ``` ### Redis 集群配置 编排容器 Redis1-Redis6 使用 redis-cluster.yml 配置文件 ```shell docker-compose -f docker-compose-redis-cluster.yml up -d ``` 进入 Redis1 命令行模式,执行创建集群命令 ```shell redis-cli -a CKuTkdUAT_HManA8 --cluster create 175.100.0.61:6381 \ 175.100.0.62:6382 \ 175.100.0.63:6383 \ 175.100.0.64:6384 \ 175.100.0.65:6385 \ 175.100.0.66:6386 \ --cluster-replicas 1 ... [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. ``` 使用 Redis-Cli 客户端操作 Redis 集群 ```shell redis-cli -p 6381 -a CKuTkdUAT_HManA8 -c 127.0.0.1:6381> get key -> Redirected to slot [12539] located at 175.100.0.63:6383 (nil) 175.100.0.63:6383> ``` ### Kafka 配置 ``` docker-compose -f docker-compose-kafka.yml up -d docker-compose -f docker-compose-kafka.yml down ``` ```shell composer require nmred/kafka-php ``` 生产者: ```php id = $id; } } // Create the logger $logger = new Logger('my_logger'); // Now add some handlers //$logger->pushHandler(new \Monolog\Handler\PHPConsoleHandler()); $config = \Kafka\ProducerConfig::getInstance(); $config->setMetadataRefreshIntervalMs(10000); $config->setMetadataBrokerList('127.0.0.1:9092'); $config->setBrokerVersion('1.0.0'); $config->setRequiredAck(1); $config->setIsAsyn(false); $config->setProduceInterval(500); $message = new Message(rand(1000, 9999)); $producer = new \Kafka\Producer( function () use ($message){ return [ [ 'topic' => 'test-message', 'value' => serialize($message), 'key' => rand(100000, 999999), ], ]; } ); $producer->setLogger($logger); $producer->success(function ($result) { var_dump('成功'); }); $producer->error(function ($errorCode) { var_dump($errorCode); var_dump('错误'); }); $producer->send(true); ``` 消费者: ```php id = $id; } } // Create the logger $logger = new Logger('my_logger'); // Now add some handlers //$logger->pushHandler(new StdoutHandler()); $config = \Kafka\ConsumerConfig::getInstance(); $config->setMetadataRefreshIntervalMs(1000); $config->setMetadataBrokerList('127.0.0.1:9092'); $config->setGroupId('test-group'); $config->setBrokerVersion('1.0.0'); $config->setTopics(array('test-message')); //$config->setOffsetReset('earliest'); $consumer = new \Kafka\Consumer(); $consumer->setLogger($logger); $consumer->start(function($topic, $part, $message) { $object = unserialize($message['message']['value']); printf("%s %s 对象属性:%s %s\n", $topic, $part, $object->id, json_encode($message)); }); ```