{"id":25012666,"url":"https://github.com/839891627/dnmp","last_synced_at":"2025-04-12T21:04:55.312Z","repository":{"id":44477464,"uuid":"221403704","full_name":"839891627/dnmp","owner":"839891627","description":"简单可理解的搭建 dnmp 环境。在此基础上由你自行定制！","archived":false,"fork":false,"pushed_at":"2024-03-13T06:46:32.000Z","size":74907,"stargazers_count":58,"open_issues_count":1,"forks_count":15,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-12T21:04:25.561Z","etag":null,"topics":["docker","lnmp","lnmp-docker"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/839891627.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}},"created_at":"2019-11-13T07:59:11.000Z","updated_at":"2025-01-07T05:22:10.000Z","dependencies_parsed_at":"2022-09-08T06:01:42.536Z","dependency_job_id":null,"html_url":"https://github.com/839891627/dnmp","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/839891627%2Fdnmp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/839891627%2Fdnmp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/839891627%2Fdnmp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/839891627%2Fdnmp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/839891627","download_url":"https://codeload.github.com/839891627/dnmp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631686,"owners_count":21136562,"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","lnmp","lnmp-docker"],"created_at":"2025-02-05T06:17:28.768Z","updated_at":"2025-04-12T21:04:55.280Z","avatar_url":"https://github.com/839891627.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 一、背景\ndocker 是啥、为啥使用它，咱们这里不加赘述。这里和大家分享下我搭建的 php 开发环境。  \n 此仓库尽量遵循 **“精简原则”** 。尽量最小定制化，将定制工作交给使用者。 **授人以鱼不如授人以渔**，我希望通过简单的例子，给大家自行发挥的空间，毕竟每个人的需求有所差别。做大而全的东西，反而**臃肿看不懂**\n\n## 二、特点\n- 简单\n- **辅助脚本**\n- 优化：脚本加速啥的\n- 条理：构建脚本的分组等\n\n## 三、功能说明\n### 1. 目录结构说明\n```\n.\n├── .env  # 环境变量定义。在这里可以定义需要的 php/nginx/msyql 等版本以及端口号\n├── Dockerfile  # php 镜像的构建脚本。里面主要安装了一些扩展以及前端需要的 nodejs、python\n├── config\n│   ├── nginx # nginx 配置文件夹。新项目的配置文件在这里添加 nginx 配置就可以了\n│   ├── php # 这里有 php.ini。 里面我调整了 session.save_handler = redis 和 session.save_path = \"tcp://redis:6379\"。 表示用 redis(容器)来存储 session\n│   └── redis.conf # redis 配置文件\n├── data # 持久化数据库的目录\n│   ├── composer\n│   ├── mysql\n│   └── redis\n├── docker-compose.yml\n├── logs  # 存放 nginx 日志\n│   └── nginx\n└── resources # 预先准备的资源。这些扩展其实可以进入容器后安装，但是在线安装网络太慢了，所以干脆自行编译安装\n    ├── Python-3.8.0.tgz\n    ├── mcrypt-1.0.3.tgz\n    ├── mongodb-1.6.0.tgz\n    ├── node-v12.13.0-linux-x64.tar.xz\n    ├── redis-5.1.1.tgz\n    ├── sources.list\n    ├── swoole-src-4.4.12.zip\n    └── xdebug-2.8.0.tgz\n```\n### 2. 集成的服务\n- mysql\n- php7.2/7.3\n- nginx\n- redis\n\n## 三、使用\n\u003e 使用前强烈建议先将 docker-compose.yml、Dockerfile 两个文件熟悉一遍，很少的内容\n \n1. 将此项目，克隆到你其他开发项目的平级目录\n\n    ├── laravel # 例如有个 laravel 项目在这里  \n    ├── dnmp # 那么，此项目你需要 clone 到这里\n\n2. 启动/创建容器环境\n然后切换到 dnmp 目录下，执行\n    ```\n    docker-compose up -d\n    # 如果使用了 我下面给的 zshrc 的 alias，则是 dup -d 即可\n    ```\n3. 添加相应的 nginx 配置文件。参考 `config/nginx/conf.d/laravel.conf`\n4. 如果有调整 nginx 配置，在 `dnmp` 目录下执行（重启 nginx 容器）  `docker-compose restart nginx`（使用了alias，则执行 `dr nginx`）\n5. 可以项目访问了\n   \u003e 1. 配置宿主机 **hosts**，指定域名 `127.0.0.1 laravel.test`\n   \u003e 2. 项目中使用 mysql/redis 时，需要配置为 **容器名**。例如在 `laravel/env.php` 中\n   \u003e ```ini\n   \u003e REDIS_HOST=redis  # 填写redis, 运行时容器会自动解析的。因为 docker ps 查看，得知 redis 的容器名叫做 \"redis\"\n   \u003e # REDIS_HOST=127.0.0.1 # 而不是填写 ip\n   \u003e REDIS_PASSWORD=null\n   \u003e REDIS_PORT=6379\n   \u003e DB_CONNECTION=mysql\n   \u003e DB_HOST=mysql  # 同理，填写 mysql\n   \u003e #DB_HOST=127.0.0.1\n   \u003e DB_PORT=3306\n   \u003e DB_DATABASE=homestead\n   \u003e DB_USERNAME=homestead\n   \u003e DB_PASSWORD=secret\n   \u003e ```\n   \u003e 3. [可选项]这样用每个项目都得配置 host，比较麻烦，通过 **dnsmasq** 可以达到一劳永逸的目的。可以参照下面的附录\n\n\n### 四、其他功能\n1. 切换 php 版本\n开启 `docker-compose.yml` 内 **php73** 部分，然后 `docker-compose up -d php73`, `nginx.conf` 内 `fastcgi_pass php73:9000;` 即可\n\n2. 安装扩展\n- `docker-php-ext-install -h` 查看可以安装的扩展\n- `docker-php-ext-enable -h` 启用扩展\n    \u003e 如果需要的扩展没有的话，则自行通过 源码包安装。这里不做说明了\n\n3. **执行 `php、composer` 等脚本**\n    需要进入容器内进行 `docker exec -it php72 bash`，然后切换到相应的项目中执行\n    \u003e **php72** 是容器名称,在 docker-compose.yml 中 `container_name: php72` 中定义的  \n     使用 alias 的话，则直接可以在宿主机项目下运行命令，无需进入容器\n\n### 五、附录\n#### 辅助命令\n请参考 `.zshrc`、`.fish` 配置。复制到你对应的配置中\n#### 统一设置 **.test** 域名到本地\n    \u003e mac 下。linux 请自行尝试\n1.  `brew install dnsmasq`\n2. `/usr/local/etc/dnsmasq.conf` 里面配置 ` address=/.test/127.0.0.1`\n3. Create a dns resolver：\n    ```bash \n       sudo mkdir -v /etc/resolver\n       sudo bash -c 'echo \"nameserver 127.0.0.1\" \u003e /etc/resolver/test'\n    ```\n   \n#### xdeug 使用\n    \u003e 安装的是 3.x 版本。端口号默认是 **9003**  \n    \u003e phpstorm 配置可以参照我这里视频：https://www.bilibili.com/video/BV1nV411b7T3?pop_share=1\n    \u003e `config/php/php72.ini`  \n    \u003e 配置中我已经配置好了，开启了 debug 和 profile(如果不需要，直接删除就行了)\nGET/POST/COOKIE 添加参数 'XDEBUG_TRIGGER=任意值'\n\n#### 关于容器内 A 项目 curl 访问 B 项目不同的解决\n**1. 方案一**\n目前通过在 **php容器内**，修改 /etc/hosts 解决\n```bash\ndocker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx # 首先在宿主机中获取 nginx 容器 ip\ndocker exec -it php bash # 进入php容器\necho '第一步中返回的ip domain.test' \u003e\u003e /etc/hosts \n```\n**2. 方案二**\n见 docker-compose.yml \n```yaml\n    extra_hosts:\n      - laravel.test:172.20.128.2 # 此 ip 是nginx容器ip，已经被设置为固定。这样不会因为每次重启，ip 变化的问题\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F839891627%2Fdnmp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F839891627%2Fdnmp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F839891627%2Fdnmp/lists"}