{"id":22374773,"url":"https://github.com/helingfeng/docker-lnmp","last_synced_at":"2025-04-10T05:05:48.117Z","repository":{"id":128429647,"uuid":"135270407","full_name":"helingfeng/Docker-LNMP","owner":"helingfeng","description":"🔥 Mac/Linux Docker LNMP","archived":false,"fork":false,"pushed_at":"2024-04-01T07:48:49.000Z","size":18931,"stargazers_count":196,"open_issues_count":2,"forks_count":52,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-24T07:43:11.892Z","etag":null,"topics":["docker","docker-compose","lnmp","mac","mysql8","php","php7"],"latest_commit_sha":null,"homepage":"https://learnku.com/blog/Sparkfly","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/helingfeng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-29T09:08:03.000Z","updated_at":"2025-03-20T03:05:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"24b7fd5f-67fd-4960-9be8-18ce932260e7","html_url":"https://github.com/helingfeng/Docker-LNMP","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helingfeng%2FDocker-LNMP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helingfeng%2FDocker-LNMP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helingfeng%2FDocker-LNMP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helingfeng%2FDocker-LNMP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/helingfeng","download_url":"https://codeload.github.com/helingfeng/Docker-LNMP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246916760,"owners_count":20854514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","lnmp","mac","mysql8","php","php7"],"created_at":"2024-12-04T21:18:23.419Z","updated_at":"2025-04-03T01:10:39.895Z","avatar_url":"https://github.com/helingfeng.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"![demo-portainer.jpg](demo-portainer.jpg)\n\n### 第一步，安装依赖工具\n\n- Git  // brew install git\n- Docker [https://docs.docker.com/install/]\n- Docker-compose [https://docs.docker.com/compose/install/#install-compose]\n\n### 第二步，获取项目代码\n\n```\n$ git clone https://github.com/helingfeng/Docker-LNMP.git\n```\n    \n### 第三步，运行容器编排\n\n```\n$ cd Docker-LNMP   // 进入项目根目录\n$ docker-compose up -d   // 容器编排命令\n```\n\n启用服务，第一次需要构建镜像\n\n\n### 第四步，测试服务访问\n\nhttp://127.0.0.1/ （可配置强制跳转 https）\n\nhttps://127.0.0.1/  （由于证书不安全，所以需要点击继续访问）\n\nhttp://127.0.0.1:9000 （访问 Docker GUI 管理工具）\n\n### `CLI` 运行模式（内置服务）\n\n- 首先，自定义构建 `PHP-CLI` 镜像，安装 `Git`，`Composer`，`Swoole` 等扩展和工具\n\n```shell\n# 构建镜像\ndocker build -t php2-cli ./php-cli/php72\n```\n\n- 启动 `Demo` 示例\n\n```shell\n# cd your_project_path\ncd www/demo\n\n# 运行服务 `demo` 项目\ndocker run -it --rm --name www-demo \\\n    -p 8001:8001 \\\n    -v \"$PWD\":/usr/workspaces/project \\\n    -w /usr/workspaces/project \\\n    php2-cli \\\n    php -S 0.0.0.0:8001\n```\n\n- 启动 `Laravel` 示例\n\n```shell\n# cd your_project_path\ncd project\n\n# composer install\ndocker run -it --rm --name www-laravel \\\n    -v \"$PWD\":/usr/workspaces/project \\\n    -w /usr/workspaces/project \\\n    php2-cli \\\n    composer install\n\n# php aritsan cache:clear\ndocker run -it --rm --name www-laravel \\\n    -v \"$PWD\":/usr/workspaces/project \\\n    -w /usr/workspaces/project \\\n    php2-cli \\\n    php artisan cache:clear\n    \n# php artisan serve\ndocker run -it --rm --name www-laravel \\\n    -p 8001:8001 \\\n    -v \"$PWD\":/usr/workspaces/project \\\n    -w /usr/workspaces/project \\\n    php2-cli \\\n    php artisan serve --host=0.0.0.0 --port=8001\n```\n\n- 启动 `Laravel-Swoole` 示例\n\n```\n# 配置 host 要修改为 0.0.0.0\n# php artisan serve\ndocker run -it --rm --name www-laravel \\\n    -p 1215:1215 \\\n    -v \"$PWD\":/usr/workspaces/project \\\n    -w /usr/workspaces/project \\\n    php2-cli \\\n    php artisan swoole:http start\n```\n\n### Redis 集群配置\n\n编排容器 Redis1-Redis6 使用 redis-cluster.yml 配置文件\n```shell\ndocker-compose -f docker-compose-redis-cluster.yml up -d\n```\n\n进入 Redis1 命令行模式，执行创建集群命令\n```shell\nredis-cli -a CKuTkdUAT_HManA8 --cluster create 175.100.0.61:6381 \\\n  175.100.0.62:6382 \\\n  175.100.0.63:6383 \\\n  175.100.0.64:6384 \\\n  175.100.0.65:6385 \\\n  175.100.0.66:6386 \\\n  --cluster-replicas 1\n\n...\n[OK] All nodes agree about slots configuration.\n\u003e\u003e\u003e Check for open slots...\n\u003e\u003e\u003e Check slots coverage...\n[OK] All 16384 slots covered.\n```\n\n使用 Redis-Cli 客户端操作 Redis 集群\n```shell\nredis-cli -p 6381 -a CKuTkdUAT_HManA8 -c\n127.0.0.1:6381\u003e get key\n-\u003e Redirected to slot [12539] located at 175.100.0.63:6383\n(nil)\n175.100.0.63:6383\u003e \n```\n\n### Kafka 配置\n\n```\n docker-compose -f docker-compose-kafka.yml up -d \n docker-compose -f docker-compose-kafka.yml down\n```\n\n```shell\ncomposer require nmred/kafka-php \n```\n\n生产者：\n\n```php\n\u003c?php\n\ninclude __DIR__ . \"/../vendor/autoload.php\";\n\ndate_default_timezone_set('PRC');\n\nuse Monolog\\Logger;\n\nclass Message\n{\n    public string $id;\n\n    public function __construct($id)\n    {\n        $this-\u003eid = $id;\n    }\n}\n\n// Create the logger\n$logger = new Logger('my_logger');\n// Now add some handlers\n//$logger-\u003epushHandler(new \\Monolog\\Handler\\PHPConsoleHandler());\n\n$config = \\Kafka\\ProducerConfig::getInstance();\n$config-\u003esetMetadataRefreshIntervalMs(10000);\n$config-\u003esetMetadataBrokerList('127.0.0.1:9092');\n$config-\u003esetBrokerVersion('1.0.0');\n$config-\u003esetRequiredAck(1);\n$config-\u003esetIsAsyn(false);\n$config-\u003esetProduceInterval(500);\n\n$message = new Message(rand(1000, 9999));\n\n$producer = new \\Kafka\\Producer(\n    function () use ($message){\n        return [\n            [\n                'topic' =\u003e 'test-message',\n                'value' =\u003e serialize($message),\n                'key' =\u003e rand(100000, 999999),\n            ],\n        ];\n    }\n);\n$producer-\u003esetLogger($logger);\n$producer-\u003esuccess(function ($result) {\n    var_dump('成功');\n});\n$producer-\u003eerror(function ($errorCode) {\n    var_dump($errorCode);\n    var_dump('错误');\n});\n$producer-\u003esend(true);\n```\n\n消费者：\n\n```php\n\u003c?php\n\ninclude __DIR__ . \"/../vendor/autoload.php\";\n\ndate_default_timezone_set('PRC');\n\nuse Monolog\\Logger;\n\nclass Message\n{\n    public string $id;\n\n    public function __construct($id)\n    {\n        $this-\u003eid = $id;\n    }\n}\n\n// Create the logger\n$logger = new Logger('my_logger');\n// Now add some handlers\n//$logger-\u003epushHandler(new StdoutHandler());\n\n$config = \\Kafka\\ConsumerConfig::getInstance();\n$config-\u003esetMetadataRefreshIntervalMs(1000);\n$config-\u003esetMetadataBrokerList('127.0.0.1:9092');\n$config-\u003esetGroupId('test-group');\n$config-\u003esetBrokerVersion('1.0.0');\n$config-\u003esetTopics(array('test-message'));\n\n//$config-\u003esetOffsetReset('earliest');\n$consumer = new \\Kafka\\Consumer();\n$consumer-\u003esetLogger($logger);\n$consumer-\u003estart(function($topic, $part, $message) {\n    $object = unserialize($message['message']['value']);\n    printf(\"%s %s 对象属性：%s %s\\n\", $topic, $part, $object-\u003eid, json_encode($message));\n});\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelingfeng%2Fdocker-lnmp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelingfeng%2Fdocker-lnmp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelingfeng%2Fdocker-lnmp/lists"}