{"id":34499106,"url":"https://github.com/suyar/docker-php-env","last_synced_at":"2025-12-24T01:58:07.137Z","repository":{"id":42432128,"uuid":"506536530","full_name":"suyar/docker-php-env","owner":"suyar","description":"基于 Docker 的 PHP 开发环境","archived":false,"fork":false,"pushed_at":"2024-11-01T10:09:27.000Z","size":176,"stargazers_count":22,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-01T10:25:05.647Z","etag":null,"topics":["development","docker","docker-compose","docker-php","php"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/suyar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-06-23T07:17:56.000Z","updated_at":"2024-11-01T10:07:26.000Z","dependencies_parsed_at":"2023-12-08T03:24:06.121Z","dependency_job_id":"87eef267-088d-4a9f-867e-2cbaae2a721e","html_url":"https://github.com/suyar/docker-php-env","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/suyar/docker-php-env","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suyar%2Fdocker-php-env","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suyar%2Fdocker-php-env/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suyar%2Fdocker-php-env/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suyar%2Fdocker-php-env/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suyar","download_url":"https://codeload.github.com/suyar/docker-php-env/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suyar%2Fdocker-php-env/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27992994,"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","status":"online","status_checked_at":"2025-12-23T02:00:07.087Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["development","docker","docker-compose","docker-php","php"],"created_at":"2025-12-24T01:58:06.794Z","updated_at":"2025-12-24T01:58:07.128Z","avatar_url":"https://github.com/suyar.png","language":"Shell","readme":"本项目是一套用于 PHP 的 Docker 开发环境。\n\n为什么会有这个项目：\n\n1. 开箱即用，首次启动不需要进行构建，启动时间短\n2. 所有镜像 `TZ` 环境变量都会生效\n3. 限制 `docker logs` 日志大小\n4. 等等...\n\n大部分场景下，我们希望开箱即用。当然，凡事都有两面性，不需要构建的代价，就是对镜像的定制化能力变低，看个人取舍。\n\n---\n\n重要的事情说三遍：\n\n**该项目仅适用于本地开发，不能直接用于生产环境**\n\n**该项目仅适用于本地开发，不能直接用于生产环境**\n\n**该项目仅适用于本地开发，不能直接用于生产环境**\n\n---\n\n目前支持开箱即用的服务有：\n\n1. mysql:8.0.37-debian（官方镜像）\n2. redis:7.0.15（官方镜像）\n3. memcached:1（官方镜像）\n4. PHP8.3/PHP8.2/PHP8.1/PHP8.0/PHP7.4/PHP7.3（基于官方的集成镜像 [suyar/php:x.x-integration](https://github.com/suyar/docker-php#%E9%9B%86%E6%88%90%E9%95%9C%E5%83%8F)）\n5. nginx:1.26（官方镜像）\n6. rabbitmq:3-management（官方镜像）\n7. mongo:7.0（官方镜像）\n8. elasticsearch:7.17.25（官方镜像）\n9. kibana:7.17.25（官方镜像）\n10. clickhouse-server:24.8（官方镜像）\n11. kafka:3.8.1（bitnami镜像）\n\n# 目录\n\n- [1. 目录结构](#1-目录结构)\n- [2. 快速使用](#2-快速使用)\n- [3. PHP 扩展](#3-php-扩展)\n    - [3.1 PHP 预置扩展](#31-php-预置扩展)\n    - [3.2 安装 PHP 扩展](#32-安装-php-扩展)\n    - [3.3 在 PHP 容器中执行命令](#33-在-php-容器中执行命令)\n    - [3.4 使用 composer](#34-使用-composer)\n    - [3.5 快捷操作](#35-快捷操作)\n- [4. 常见问题](#4-常见问题)\n    - [4.1 如何在其他容器中请求 nginx 配置的域名](#41-如何在其他容器中请求-nginx-配置的域名)\n    - [4.2 在 PHP 容器中使用 cron 定时任务](#42-在-php-容器中使用-cron-定时任务)\n    - [4.3 在 PHP 容器中使用 supervisor](#43-在-php-容器中使用-supervisor)\n    - [4.4 清空服务数据](#44-清空服务数据)\n- [License](#license)\n\n## 1. 目录结构\n\n```\n/\n├── logs                        日志存放目录\n├── data                        数据存放目录\n├── config\n│   ├── clickhouse              ClickHouse 配置目录\n│   ├── elasticsearch           Elasticsearch 配置目录\n│   ├── mongodb                 MongoDB 配置目录\n│   ├── mysql                   Mysql 配置目录\n│   ├── nginx                   Nginx 配置目录\n│   │   ├── conf.d              Nginx Vhost 配置目录\n│   │   └── ssl                 Nginx 证书目录\n│   ├── php73                   PHP7.3 配置目录\n│   ├── php74                   PHP7.4 配置目录\n│   ├── php80                   PHP8.0 配置目录\n│   ├── php81                   PHP8.1 配置目录\n│   ├── php82                   PHP8.2 配置目录\n│   ├── php83                   PHP8.3 配置目录\n│   ├── rabbitmq                Rabbitmq 配置目录\n│   └── redis                   Redis 配置目录\n├── .bash_aliases.example       .bash_aliases 示例配置\n├── .env.example                .env 变量示例配置\n├── docker-compose.yml.example  docker-compose 示例\n├── dpe.sh                      初始化脚本\n└── www                         默认项目代码挂载目录\n```\n\n## 2. 快速使用\n\n1. 环境要求\n\n    - Windows\n\n        - 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n        - 安装 `wsl2`，建议安装 Ubuntu：`wsl --install -d Ubuntu`\n        - 在 `Docker Desktop` 启用 `Use the WSL 2 base engine`\n        - 在 `Docker Desktop` 启用 `WSL Integration`\n        - 因为 `wsl2` 文件有挂载性能问题，该项目**必须**放在 `wsl2` 系统内，而不能放在 `/mnt/c` 或 `/mnt/d` 这种挂载目录下\n        - 项目代码也建议放在 `wsl2` 系统内，使用 `vscode` 或 `phpstorm` 进行编辑开发\n\n    - Linux\n\n        - 安装 [Docker](https://docs.docker.com/engine/install/)\n        - 安装 [Docker Compose](https://docs.docker.com/compose/install/)\n\n    - MacOS\n\n        - 未尝试\n\n2. `clone` 项目\n\n    \u003e 建议 [**fork**](https://github.com/suyar/docker-php-env/fork) 本项目，方便针对自己的开发需求做定制。\n\n    ```\n    # git clone git@github.com:suyar/docker-php-env.git\n    ```\n\n3. 初始化项目\n\n    该操作会初始化目录权限和相关文件：\n\n    ```\n    # cd docker-php-env\n    # git config core.filemode false\n    # sudo chmod +x dpe.sh\n    # sudo ./dpe.sh init\n    ```\n\n    执行完成后，根据自己的需求，对 `.env` 文件和 `docker-compose.yml` 进行定制。\n\n4. 启动项目\n\n    ```\n    # sudo docker-compose up -d\n    ```\n\n5. 在浏览器中访问：`http://localhost` 或 `http://127.0.0.1`，初始页面显示 `404`。\n\n## 3. PHP 扩展\n\n### 3.1 PHP 预置扩展\n\nPHP 镜像默认安装了下列扩展，暂不支持重新安装指定版本扩展，可以 fork 本项目后，参照 [docker-php](https://github.com/suyar/docker-php) 自己构建。\n\n```\n[PHP Modules]\namqp\napcu\nbcmath\nbz2\ncalendar\nCore\nctype\ncurl\ndate\ndecimal\ndom\nenchant\nevent\nexif\nfileinfo\nfilter\nftp\ngd\ngettext\ngmp\nhash\niconv\nigbinary\nimagick\nintl\njson\nlibxml\nlzf\nmbstring\nmemcached\nmongodb\nmsgpack\nmysqli\nmysqlnd\nopenssl\npcntl\npcre\nPDO\npdo_mysql\npdo_pgsql\npdo_sqlite\npgsql\nPhar\nposix\nreadline\nredis\nReflection\nsession\nSimpleXML\nsockets\nsodium\nSPL\nsqlite3\nstandard\nswoole\ntidy\ntimezonedb\ntokenizer\nuuid\nxlswriter\nxml\nxmlreader\nxmlwriter\nxsl\nyac\nyaml\nZend OPcache\nzip\nzlib\n\n[Zend Modules]\nZend OPcache\n```\n\n### 3.2 安装 PHP 扩展\n\n除了预置的扩展，如果你还想安装其他扩展，可以直接执行：\n\n```\n# sudo docker-compose exec php83 install-php-extensions xxx\n```\n\n支持的扩展在这边可以在这边查看：[docker-php-extension-installer](https://github.com/mlocati/docker-php-extension-installer#supported-php-extensions)。\n\n\u003e 通过这种方式安装的扩展，在容器销毁后重新创建，不会保留，需要重新安装。\n\n### 3.3 在 PHP 容器中执行命令\n\n```\n# sudo docker-compose exec php83 bash\nroot@php83:/www# php -v\n```\n\n### 3.4 使用 composer\n\n```\n# sudo docker-compose exec php83 bash\nroot@php83:/www# composer install\n```\n\n### 3.5 快捷操作\n\n1. 把 [.bash_aliases.example](.bash_aliases.example) 的内容拷贝到 `~/.bash_aliases` 或 `~/.bashrc`\n2. 修改 `~/.bash_aliases` 的变量 `DPE_COMPOSE` 和 `DPE_SOURCE`\n\n    ```\n    # docker-compose.yml 绝对路径\n    DPE_COMPOSE=/home/suyar/repo/docker-php-env/docker-compose.yml\n    # 挂载的 DIR_SOURCE 绝对路径\n    DPE_SOURCE=/home/suyar/repo\n\n    # 依葫芦画瓢配置其他版本PHP的快捷命令\n\n    ...\n    ```\n\n3. 开始使用快捷命令\n\n    ```\n    # 进入 php83 容器，自动识别挂载目录中的相对路径\n    $ tophp\n    # 进入 php83 容器，自动识别挂载目录中的相对路径\n    $ tophp83\n\n    # 进入 nginx 容器，自动识别挂载目录中的相对路径\n    $ tonginx\n\n    # 进入 mysql 容器\n    $ tomysql\n\n    # 在宿主机执行 php 命令，自动识别挂载目录中的相对路径；如果宿主机有安装php，请在`~/.bash_aliases`中修改`php()`别名\n    $ php\n    $ php83\n\n    # 在宿主机执行 composer 命令，自动识别挂载目录中的相对路径；如果宿主机有安装composer，请在`~/.bash_aliases`中修改`composer()`别名\n    $ composer\n    $ composer83\n    ```\n\n    \u003e 关于 `自动识别挂载目录中的相对路径` 的效果如下：\n\n    ① 假设 `.env` 配置如下：\n\n    ```\n    ...\n    # 挂载到容器的目录\n    DIR_SOURCE=/home/repo\n    ...\n    ```\n\n    ② 假设 `~/.bash_aliases` 变量配置如下：\n\n    ```\n    # docker-php-env 挂载的 DIR_SOURCE 绝对路径\n    DPE_SOURCE=/home/repo\n    ```\n\n    ③ 假设宿主机中，当前目录为 **`/home/repo/laravel`**\n\n    那么我在宿主机执行 `tophp` 命令后：\n\n    ```\n    $ tophp\n    root@php83:/www/laravel#\n    ```\n\n    可以看到，这时候默认进入到 `laravel` 目录。\n\n    如果我在宿主机执行命令：\n\n    ```\n    $ php artisan list\n    ```\n\n    那么实际上，会在容器中的 `/www/laravel` 去执行 `php artisan list` 命令。\n\n## 4 常见问题\n\n### 4.1 如何在其他容器中请求 nginx 配置的域名\n\n在 `docker-compose.yml` 文件中，修改 `nginx` 服务的 `aliases` 配置，把 `nginx` 相关的域名配置成别名：\n\n```\n  nginx:\n    image: nginx:${NGINX_VERSION}\n    environment:\n      TZ: ${TZ}\n    volumes:\n      - ${DIR_SERVICES}/nginx/nginx.conf:/etc/nginx/nginx.conf:ro\n      - ${DIR_SERVICES}/nginx/conf.d:/etc/nginx/conf.d:ro\n      - ${DIR_SERVICES}/nginx/ssl:/etc/nginx/ssl:ro\n      - ${DIR_LOGS}/nginx:/var/log/nginx\n      - ${DIR_SOURCE}:/www\n    working_dir: /www\n    ports:\n      - \"${NGINX_HTTP_HOST_PORT}:80\"\n      - \"${NGINX_HTTPS_HOST_PORT}:443\"\n    networks:\n      default:\n        aliases:\n          - example.laravel.local\n          - test.biz.me\n    restart: unless-stopped\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"10m\"\n        max-file: \"1\"\n```\n\n### 4.2 在 PHP 容器中使用 cron 定时任务\n\n这里以 `php83` 容器举例：\n\n1. 在 `DIR_SOURCE` 所在的目录或项目中，增加一个文件，例如创建 `www/laravel/schedule` 文件，并把定时任务写在里面：\n\n```\n* * * * * cd /www/laravel \u0026\u0026 php artisan schedule:run \u003e\u003e /dev/null 2\u003e\u00261\n```\n\n2. 进入 PHP 容器，添加定时任务：\n\n```\n# sudo docker compose exec php83 bash\n# crontab /www/laravel/schedule\n```\n\n### 4.3 在 PHP 容器中使用 supervisor\n\n这里以 `php83` 容器举例：\n\n1. 修改 `services/php83/supervisor.conf` 的内容\n2. 重启 `php83` 容器\n\n### 4.4 清空服务数据\n\n在某些情况下，你可能需要清空各种生成的数据，重新初始化开发环境，\n\n\u003e 该操作是风险操作，会清空所有容器和持久化数据卷！！！\n\n```\n# sudo docker-compose down\n# sudo ./dpe.sh clean\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuyar%2Fdocker-php-env","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuyar%2Fdocker-php-env","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuyar%2Fdocker-php-env/lists"}