Skip to content

Commit c140e62

Browse files
committed
docs: 完成 README
1 parent ed578e8 commit c140e62

1 file changed

Lines changed: 345 additions & 0 deletions

File tree

README.md

Lines changed: 345 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,345 @@
1+
本项目是一套用于 PHP 的 Docker 开发环境,站在巨人[**[DNMP]**](https://github.com/yeszao/dnmp)的肩膀上衍生的一个版本。
2+
3+
为什么会有这个项目:
4+
5+
1. DNMP 首次启动需要进行构建,时间较长,步骤繁琐
6+
2. DNMP 有一些容器抛出的错误日志,没有进行修复
7+
3. DNMP 部分镜像 `TZ` 环境变量不生效
8+
4. DNMP 产生大量 `docker logs` 占用磁盘空间,需要重建容器才能释放
9+
4. 其他问题...
10+
11+
大部分场景下,我们希望开箱即用。当然,凡事都有两面性,不需要构建的代价,就是对镜像的定制化能力变低,看个人取舍。
12+
13+
---
14+
15+
重要的事情说三遍:
16+
17+
**该项目仅适用于本地开发,不能用于生产环境**
18+
19+
**该项目仅适用于本地开发,不能用于生产环境**
20+
21+
**该项目仅适用于本地开发,不能用于生产环境**
22+
23+
---
24+
25+
目前支持开箱即用的服务有:
26+
27+
1. Mysql5.7(使用官方镜像)
28+
2. Mysql8.0(使用官方镜像)
29+
3. phpMyAdmin(使用官方镜像)
30+
4. Redis(使用官方镜像)
31+
5. phpRedisAdmin(使用官方镜像)
32+
6. Memcached(使用官方镜像)
33+
7. 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)
34+
8. Nginx(使用官方镜像)
35+
9. RabbitMQ(使用官方镜像)
36+
10. MongoDB(使用官方镜像)
37+
11. Mongo-Express(使用官方镜像)
38+
12. Elasticsearch(使用官方镜像)
39+
13. Kibana(使用官方镜像)
40+
41+
# 目录
42+
43+
- [1. 目录结构](#1-目录结构)
44+
- [2. 快速使用](#2-快速使用)
45+
- [3. PHP 扩展](#3-php-扩展)
46+
- [3.1 PHP 预置扩展](#31-php-预置扩展)
47+
- [3.2 安装 PHP 扩展](#32-安装-php-扩展)
48+
- [3.3 在 PHP 容器中执行命令](#33-在-php-容器中执行命令)
49+
- [3.4 使用 composer](#34-使用-composer)
50+
- [4. 常见问题](#4-常见问题)
51+
- [4.1 如何在其他容器中请求 nginx 配置的域名](#41-如何在其他容器中请求-nginx-配置的域名)
52+
- [4.2 在 PHP 容器中使用 cron 定时任务](#42-在-php-容器中使用-cron-定时任务)
53+
- [4.3 在 PHP 容器中使用 supervisor](#43-在-php-容器中使用-supervisor)
54+
- [4.4 清空服务数据](#44-清空服务数据)
55+
- [License](#license)
56+
57+
## 1. 目录结构
58+
59+
```
60+
/
61+
├── data
62+
│   ├── composer Composer 缓存
63+
│   ├── elasticsearch Elasticsearch 持久化数据
64+
│   ├── mongodb MongoDB 持久化数据
65+
│   ├── mysql5 Mysql5.7 持久化数据
66+
│   ├── mysql8 Mysql8.0 持久化数据
67+
│   ├── rabbitmq Rabbitmq 持久化数据
68+
│   └── redis Redis 持久化数据
69+
├── logs
70+
│   ├── mongodb MongoDB 日志
71+
│   ├── mysql
72+
│   │   ├── 5 Mysql5.7 日志
73+
│   │   └── 8 Mysql8.0 日志
74+
│   ├── nginx Nginx 日志
75+
│   ├── php
76+
│   │   ├── 73
77+
│   │   │   ├── log PHP7.3 错误日志与慢日志
78+
│   │   │   └── supervisor PHP7.3 里 supervisor 日志
79+
│   │   ├── 74
80+
│   │   │   ├── log PHP7.4 错误日志与慢日志
81+
│   │   │   └── supervisor PHP7.4 里 supervisor 日志
82+
│   │   ├── 80
83+
│   │   │   ├── log PHP8.0 错误日志与慢日志
84+
│   │   │   └── supervisor PHP8.0 里 supervisor 日志
85+
│   │   └── 81
86+
│   │   ├── log PHP8.1 错误日志与慢日志
87+
│   │   └── supervisor PHP8.1 里 supervisor 日志
88+
│   └── rabbitmq Rabbitmq 日志
89+
├── services
90+
│   ├── elasticsearch Elasticsearch 配置目录
91+
│   ├── mongodb MongoDB 配置目录
92+
│   ├── mysql Mysql5.7/Mysql8.0 配置目录
93+
│   ├── nginx Nginx 配置目录
94+
│   │   ├── conf.d Nginx Vhost 配置目录
95+
│   │   └── ssl Nginx 证书目录
96+
│   ├── php
97+
│   │   ├── 73 PHP7.3 配置目录
98+
│   │   ├── 74 PHP7.4 配置目录
99+
│   │   ├── 80 PHP8.0 配置目录
100+
│   │   └── 81 PHP7.1 配置目录
101+
│   ├── phpmyadmin phpMyAdmin 配置目录
102+
│   ├── rabbitmq Rabbitmq 配置目录
103+
│   └── redis Redis 配置目录
104+
├── .env.example .env 变量示例配置
105+
├── docker-compose.yml.example docker-compose 示例
106+
└── www 默认项目代码存放目录
107+
```
108+
109+
## 2. 快速使用
110+
111+
1. 环境要求
112+
113+
- Windows
114+
115+
- 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)
116+
- 安装 `wsl2`,建议安装 Ubuntu:`wsl --install -d Ubuntu`
117+
-`Docker Desktop` 启用 `Use the WSL 2 base engine`
118+
-`Docker Desktop` 启用 `WSL Integration`
119+
- 因为 `wsl2` 文件有挂载性能问题,该项目**必须**放在 `wsl2` 系统内,而不能放在 `/mnt/c``/mnt/d` 这种挂载目录下
120+
- 项目代码也建议放在 `wsl2` 系统内,使用 `vscode``phpstorm` 进行编辑开发
121+
122+
- Linux
123+
124+
- 安装 [Docker](https://docs.docker.com/engine/install/)
125+
- 安装 [Docker Compose](https://docs.docker.com/compose/install/)
126+
127+
- MacOS
128+
129+
- 没有苹果电脑故无法尝试,后续补充
130+
131+
2. `clone` 项目
132+
133+
> 建议 [**fork**](https://github.com/suyar/docker-php-env/fork) 本项目,方便针对自己的开发需求做定制。
134+
135+
```
136+
# git clone [email protected]:suyar/docker-php-env.git
137+
```
138+
139+
3. 初始化项目
140+
141+
该操作会初始化目录权限和相关文件:
142+
143+
```
144+
# cd docker-php-env
145+
# git config core.filemode false
146+
# sudo chmod +x dpe.sh
147+
# sudo ./dpe.sh init
148+
```
149+
150+
执行完成后,根据自己的需求,对 `.env` 文件和 `docker-compose.yml` 进行定制。
151+
152+
4. 启动项目
153+
154+
```
155+
# sudo docker-compose up -d
156+
```
157+
158+
5. 在浏览器中访问:`http://localhost` 或 `http://127.0.0.1`,初始页面会显示 `404`。
159+
160+
## 3. PHP 扩展
161+
162+
### 3.1 PHP 预置扩展
163+
164+
PHP 镜像默认安装了下列扩展,暂不支持重新安装指定版本扩展,如果确实有需要,推荐用 [**[DNMP]**](https://github.com/yeszao/dnmp),也可以 fork 本项目后,参照 [docker-php](https://github.com/suyar/docker-php) 自己构建。
165+
166+
```
167+
[PHP Modules]
168+
amqp
169+
apcu
170+
bcmath
171+
bz2
172+
calendar
173+
Core
174+
ctype
175+
curl
176+
date
177+
decimal
178+
dom
179+
enchant
180+
event
181+
exif
182+
fileinfo
183+
filter
184+
ftp
185+
gd
186+
gettext
187+
gmp
188+
hash
189+
iconv
190+
igbinary
191+
imagick
192+
intl
193+
json
194+
libxml
195+
lzf
196+
mbstring
197+
memcached
198+
mongodb
199+
msgpack
200+
mysqli
201+
mysqlnd
202+
openssl
203+
pcntl
204+
pcre
205+
PDO
206+
pdo_mysql
207+
pdo_pgsql
208+
pdo_sqlite
209+
pgsql
210+
Phar
211+
posix
212+
readline
213+
redis
214+
Reflection
215+
session
216+
SimpleXML
217+
sockets
218+
sodium
219+
SPL
220+
sqlite3
221+
standard
222+
swoole
223+
tidy
224+
timezonedb
225+
tokenizer
226+
uuid
227+
xlswriter
228+
xml
229+
xmlreader
230+
xmlwriter
231+
xsl
232+
yac
233+
yaml
234+
Zend OPcache
235+
zip
236+
zlib
237+
238+
[Zend Modules]
239+
Zend OPcache
240+
```
241+
242+
### 3.2 安装 PHP 扩展
243+
244+
除了预置的扩展,如果你还想安装其他扩展,可以直接执行:
245+
246+
```
247+
# sudo docker-compose exec php81 install-php-extensions xxx
248+
```
249+
250+
支持的扩展在这边可以在这边查看:[docker-php-extension-installer](https://github.com/mlocati/docker-php-extension-installer#supported-php-extensions)。
251+
252+
> 这种方式安装扩展和 DNMP 的方式不同,通过这种方式安装的扩展,在容器销毁后重新创建,不会保留,需要重新安装。
253+
254+
### 3.3 在 PHP 容器中执行命令
255+
256+
```
257+
# sudo docker-compose exec php81 bash
258+
root@08240e17170e:/www# php -v
259+
```
260+
261+
这里移除了 DNMP 中使用 `alias` 的方式在 Host 主机中执行 PHP 命令。
262+
263+
### 3.4 使用 composer
264+
265+
```
266+
# sudo docker-compose exec php81 bash
267+
root@08240e17170e:/www# composer install
268+
```
269+
270+
这里移除了 DNMP 中使用 `alias` 的方式在 Host 主机中执行 `composer` 命令。
271+
272+
## 4 常见问题
273+
274+
### 4.1 如何在其他容器中请求 nginx 配置的域名
275+
276+
在 `docker-compose.yml` 文件中,修改 `nginx` 服务的 `aliases` 配置,把 `nginx` 相关的域名配置成别名:
277+
278+
```
279+
nginx:
280+
image: nginx:${NGINX_VERSION}
281+
environment:
282+
TZ: ${TZ}
283+
volumes:
284+
- ${DIR_SERVICES}/nginx/nginx.conf:/etc/nginx/nginx.conf
285+
- ${DIR_SERVICES}/nginx/conf.d:/etc/nginx/conf.d
286+
- ${DIR_SERVICES}/nginx/ssl:/etc/nginx/ssl
287+
- ${DIR_LOGS}/nginx:/var/log/nginx
288+
- ${DIR_SOURCE}:/www
289+
working_dir: /www
290+
ports:
291+
- "${NGINX_HTTP_HOST_PORT}:80"
292+
- "${NGINX_HTTPS_HOST_PORT}:443"
293+
networks:
294+
default:
295+
aliases:
296+
- example.laravel.me
297+
- test.biz.me
298+
restart: unless-stopped
299+
logging:
300+
driver: "json-file"
301+
options:
302+
max-size: "10m"
303+
max-file: "1"
304+
```
305+
306+
### 4.2 在 PHP 容器中使用 cron 定时任务
307+
308+
这里以 `php81` 容器举例:
309+
310+
1. 在 `DIR_SOURCE` 所在的目录或项目中,增加一个文件,例如创建 `www/laravel/schedule` 文件,并把定时任务写在里面:
311+
312+
```
313+
* * * * * cd /www/laravel && php artisan schedule:run >> /dev/null 2>&1
314+
```
315+
316+
2. 进入 PHP 容器,添加定时任务:
317+
318+
```
319+
# sudo docker compose exec php81 bash
320+
# cd /www/laravel
321+
# crontab -f schedule
322+
```
323+
324+
### 4.3 在 PHP 容器中使用 supervisor
325+
326+
这里以 `php81` 容器举例:
327+
328+
1. 修改 `services/php/81/supervisor.conf` 的内容
329+
2. 重启 `php81` 容器
330+
331+
### 4.4 清空服务数据
332+
333+
在某些情况下,你可能需要清空各种生成的数据,重新初始化开发环境,
334+
335+
> 该操作是风险操作,会清空所有初始化数据!!!
336+
337+
```
338+
# sudo docker-compose down
339+
# ./dpe.sh clean
340+
# ./dpe.sh init
341+
```
342+
343+
## License
344+
345+
MIT

0 commit comments

Comments
 (0)