DNMP (Docker + Nginx/Openresty + MySQL5,8 + PHP5,7,8 + Redis + ElasticSearch + MongoDB + RabbitMQ) هو برنامج تثبيت LNMP كامل المواصفات بنقرة واحدة ويدعم Arm CPU .
هناك بعض التوصيات لفرص العمل في الخارج التي يمكن للأصدقاء المهتمين إلقاء نظرة عليها.
100%
مفتوح المصدر100%
مع معايير Dockerpdo_mysql
، mysqli
، mbstring
، gd
، و curl
، و opcache
، وما إلى ذلك، ويمكن تهيئته بمرونة وفقًا للبيئة.100%
install-php-extensions apcu
/
├── data 数据库数据目录
│ ├── esdata ElasticSearch 数据目录
│ ├── mongo MongoDB 数据目录
│ ├── mysql MySQL8 数据目录
│ └── mysql5 MySQL5 数据目录
├── services 服务构建文件和配置文件目录
│ ├── elasticsearch ElasticSearch 配置文件目录
│ ├── mysql MySQL8 配置文件目录
│ ├── mysql5 MySQL5 配置文件目录
│ ├── nginx Nginx 配置文件目录
│ ├── php PHP5.6 - PHP7.4 配置目录
│ ├── php54 PHP5.4 配置目录
│ └── redis Redis 配置目录
├── logs 日志目录
├── docker-compose.sample.yml Docker 服务配置示例文件
├── env.smaple 环境配置示例文件
└── www PHP 代码目录
- `git`
- `Docker`(系统需为Linux,Windows 10 Build 15063+,或MacOS 10.12+,且必须要`64`位)
- `docker-compose 1.7.0+`
clone
: ```
$ git clone https://github.com/yeszao/dnmp.git
```
root
، فستحتاج أيضًا إلى إضافة المستخدم الحالي إلى مجموعة مستخدمي docker
: ```
$ sudo gpasswd -a ${USER} docker
```
copy
)، وابدأ: ```
$ cd dnmp # 进入项目目录
$ cp env.sample .env # 复制环境变量文件。note:安装php扩展请查看文档中的3.2小节
$ cp docker-compose.sample.yml docker-compose.yml # 复制 docker-compose 配置文件。默认启动3个服务:
# Nginx、PHP7和MySQL8。要开启更多其他服务,如Redis、
# PHP5.6、PHP5.4、MongoDB,ElasticSearch等,请删
# 除服务块前的注释
$ docker-compose up # 启动
```
http://localhost
أو https://localhost
(عرض HTTPS التجريبي) لرؤية التأثير. كود PHP موجود في الملف ./www/localhost/index.php
. أولاً، تحتاج إلى تشغيل إصدارات أخرى من PHP، مثل PHP5.4، ثم حذف التعليقات الموجودة أمام PHP5.4 في ملف docker-compose.yml
، ثم تشغيل حاوية PHP5.4.
بعد بدء تشغيل PHP5.4، افتح إعدادات Nginx وقم بتعديل عنوان مضيف fastcgi_pass
من php
إلى php54
، كما يلي:
fastcgi_pass php:9000;
ل:
fastcgi_pass php54:9000;
حيث php
و php54
هما أسماء الخوادم الموجودة في ملف docker-compose.yml
.
وأخيرًا، أعد تشغيل Nginx ليصبح ساري المفعول.
$ docker exec -it nginx nginx -s reload
يوجد هنا نوعان nginx
، الأول هو اسم الحاوية، والثاني هو برنامج nginx
الموجود في الحاوية.
يتم تنفيذ العديد من وظائف PHP من خلال الامتدادات، كما أن تثبيت الامتدادات عملية تستغرق وقتًا قليلًا. لذلك، بالإضافة إلى امتدادات PHP المضمنة، نقوم فقط بتثبيت عدد قليل من الامتدادات بشكل افتراضي في ملف env.sample
إذا كنت ترغب في ذلك قم بتثبيت المزيد من الملحقات، يرجى فتح ملف .env
الخاص بك وتعديل تكوين PHP التالي، وإضافة ملحقات PHP المطلوبة:
PHP_EXTENSIONS=pdo_mysql,opcache,redis # PHP 要安装的扩展列表,英文逗号隔开
PHP54_EXTENSIONS=opcache,redis # PHP 5.4要安装的扩展列表,英文逗号隔开
ثم أعد بناء صورة PHP.
docker-compose build php
للحصول على الملحقات المتاحة، راجع كتلة التعليق env.sample
في نفس الملف.
1. أدخل الحاوية:
docker exec -it php /bin/sh
install-php-extensions apcu
2.Support التثبيت السريع لقائمة التمديد
امتداد | بي إتش بي 8.4 | بي إتش بي 8.3 | بي إتش بي 8.2 | بي إتش بي 8.1 | PHP 8.0 | PHP 7.4 | بي إتش بي 7.3 | بي إتش بي 7.2 | بي إتش بي 7.1 | PHP 7.0 | بي إتش بي 5.6 | PHP 5.5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
com.amqp | ||||||||||||
apcu | ||||||||||||
apcu_bc | ||||||||||||
أست | ||||||||||||
com.bcmath | ||||||||||||
bitset | ||||||||||||
بلاك فاير | ||||||||||||
bz2 | ||||||||||||
تقويم | ||||||||||||
كاساندرا* | ||||||||||||
com.cmark | ||||||||||||
ملف CSV | ||||||||||||
ديسيبل | ||||||||||||
ددتريس* | ||||||||||||
عشري | ||||||||||||
س | ||||||||||||
ecma_intl* | ||||||||||||
سبى | ||||||||||||
إيف | ||||||||||||
حدث | ||||||||||||
excimer | ||||||||||||
com.exif | ||||||||||||
ffi | ||||||||||||
ftp | ||||||||||||
gd | ||||||||||||
gearman | ||||||||||||
com.geoip | ||||||||||||
المواقع الجغرافية* | ||||||||||||
الجغرافية المكانية | ||||||||||||
com.gettext | ||||||||||||
com.gmagick | ||||||||||||
gmp | ||||||||||||
gnupg | ||||||||||||
grpc | ||||||||||||
http | ||||||||||||
igbinary | ||||||||||||
com.imagick | ||||||||||||
IMAP | ||||||||||||
com.inotify | ||||||||||||
com.interbase | ||||||||||||
الدولي | ||||||||||||
أيون | ||||||||||||
ioncube_loader | ||||||||||||
com.jsmin | ||||||||||||
json_post | ||||||||||||
com.jsonpath | ||||||||||||
ldap | ||||||||||||
com.luasandbox | ||||||||||||
lz4* | ||||||||||||
zf | ||||||||||||
تحليل البريد | ||||||||||||
com.maxminddb | ||||||||||||
com.mcrypt | ||||||||||||
com.memcache | ||||||||||||
com.memcached | ||||||||||||
ميمبروف* | ||||||||||||
مونجو | ||||||||||||
com.mongodb | ||||||||||||
البعوض | ||||||||||||
com.msgpack | ||||||||||||
com.mssql | ||||||||||||
mysql | ||||||||||||
mysqli | ||||||||||||
newrelic | ||||||||||||
com.auth | ||||||||||||
oci8 | ||||||||||||
com.odbc | ||||||||||||
OPcache | ||||||||||||
التعداد المفتوح | ||||||||||||
openwoole | ||||||||||||
opentelemetry | ||||||||||||
موازي* | ||||||||||||
التحدث* | ||||||||||||
com.pcntl | ||||||||||||
pcov | ||||||||||||
pdo_dblib | ||||||||||||
pdo_firebird | ||||||||||||
pdo_mysql | ||||||||||||
pdo_oci | ||||||||||||
pdo_odbc | ||||||||||||
pdo_pgsql | ||||||||||||
pdo_sqlsrv | ||||||||||||
com.pgsql | ||||||||||||
فالكون | ||||||||||||
php_trie | ||||||||||||
فبي* | ||||||||||||
pkcs11 | ||||||||||||
pq | ||||||||||||
مناسب | ||||||||||||
بروتوبوف | ||||||||||||
com.pspell | ||||||||||||
psr | ||||||||||||
خيوط * | ||||||||||||
رافف | ||||||||||||
rdkafka | ||||||||||||
إعادة ترميز | ||||||||||||
redis | ||||||||||||
تتابع | ||||||||||||
سكسوني* | ||||||||||||
com.easclick | ||||||||||||
سجل البحار | ||||||||||||
shmop | ||||||||||||
سيمدجسون* | ||||||||||||
com.smbclient | ||||||||||||
لاذع | ||||||||||||
com.snmp | ||||||||||||
snuffleupagus | ||||||||||||
صابون | ||||||||||||
مآخذ | ||||||||||||
الصوديوم* | ||||||||||||
solr | ||||||||||||
com.sourceguardian | ||||||||||||
com.spx | ||||||||||||
سكلسرف* | ||||||||||||
ssh2 | ||||||||||||
ستومب | ||||||||||||
swoole | ||||||||||||
sybase_ct | ||||||||||||
مزامنة | ||||||||||||
com.sysvmsg | ||||||||||||
com.sysvsem | ||||||||||||
com.sysvshm | ||||||||||||
الموتر | ||||||||||||
طرق المد والجزر | ||||||||||||
مرتب | ||||||||||||
timezonedb | ||||||||||||
uopz | ||||||||||||
تحميل التقدم | ||||||||||||
uuid | ||||||||||||
الأشعة فوق البنفسجية | ||||||||||||
كبار الشخصيات* | ||||||||||||
vld | ||||||||||||
xx | ||||||||||||
ويكي ديف2* | ||||||||||||
com.xdebug | ||||||||||||
com.xdiff | ||||||||||||
com.xhpr | ||||||||||||
com.xlswriter | ||||||||||||
com.xmldiff | ||||||||||||
com.xmlrpc | ||||||||||||
اكس باس* | ||||||||||||
xsl | ||||||||||||
الياك | ||||||||||||
yaml | ||||||||||||
يار | ||||||||||||
zephir_parser | ||||||||||||
أَزِيز | ||||||||||||
zq | ||||||||||||
حارس حديقة الحيوان | ||||||||||||
zstd |
عدد الامتدادات المدعومة: 150
يأتي هذا الامتداد من https://github.com/mlocati/docker-php-extension-installer نموذج الملف المرجعي
~/.bashrc
الخاص بالمضيف. source ~ /.bashrc
~ php -v
PHP 7.2.13 (cli) (built: Dec 21 2018 02:22:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans
الطريقة الأولى: استخدم أمر الملحن على المضيف
~/dnmp
، فإن مسار ذاكرة التخزين المؤقت للمؤلف هو ~/dnmp/data/composer
.~/.bashrc
الخاص بالمضيف.ما يجب ملاحظته هنا هو أن الدليل
~/dnmp/data/composer
في ملف المثال يجب أن يكون هو الدليل المحدد في الخطوة الأولى.
source ~ /.bashrc
cd ~ /dnmp/www/
composer create-project yeszao/fastphp project --no-dev
~/dnmp/data/composer
. يمكنك تحديد المستودع المحلي في هذا الملف، على سبيل المثال: {
"config" : {},
"repositories" : {
"packagist" : {
"type" : " composer " ,
"url" : " https://mirrors.aliyun.com/composer/ "
}
}
}
الطريقة الثانية: استخدم أمر الملحن في الحاوية
هناك طريقة أخرى، وهي الدخول إلى الحاوية ثم تنفيذ أمر composer
، خذ حاوية PHP7 كمثال:
docker exec -it php /bin/sh
cd /www/localhost
composer update
لإدارة الخدمة أضف اسم الخادم بعد الأمر، على سبيل المثال:
$ docker-compose up # 创建并且启动所有容器
$ docker-compose up -d # 创建并且后台运行方式启动所有容器
$ docker-compose up nginx php mysql # 创建并且启动nginx、php、mysql的多个容器
$ docker-compose up -d nginx php mysql # 创建并且已后台运行的方式启动nginx、php、mysql容器
$ docker-compose start php # 启动服务
$ docker-compose stop php # 停止服务
$ docker-compose restart php # 重启服务
$ docker-compose build php # 构建或者重新构建服务
$ docker-compose rm php # 删除并且停止php容器
$ docker-compose down # 停止并删除容器,网络,图像和挂载卷
أثناء التطوير، غالبًا ما نستخدم docker exec -it
للدخول إلى الحاوية، وهي طريقة خالية من المتاعب لإنشاء أسماء مستعارة للأوامر شائعة الاستخدام.
أولاً، تحقق من الحاويات المتوفرة على المضيف:
$ docker ps # 查看所有运行中的容器
$ docker ps -a # 所有容器
عمود NAMES
للمخرجات هو اسم الحاوية. إذا تم استخدام التكوين الافتراضي، فسيكون الاسم nginx
، php
، php56
، mysql
، إلخ.
ثم افتح الملف ~/.bashrc
أو ~/.zshrc
وأضف:
alias dnginx= ' docker exec -it nginx /bin/sh '
alias dphp= ' docker exec -it php /bin/sh '
alias dphp56= ' docker exec -it php56 /bin/sh '
alias dphp54= ' docker exec -it php54 /bin/sh '
alias dmysql= ' docker exec -it mysql /bin/bash '
alias dredis= ' docker exec -it redis /bin/sh '
سيكون الدخول إلى الحاوية سريعًا جدًا في المرة القادمة، على سبيل المثال، أدخل حاوية php:
$ dphp
ifconfig docker0
يُستخدم لملء عنوان hosts
لحاوية extra_hosts
للوصول إلى الجهاز المضيف
يعتمد الموقع الذي يتم فيه إنشاء ملف السجل على قيمة كل تكوين سجل ضمن conf.
سجل Nginx هو السجل الذي نستخدمه كثيرًا، لذلك قمنا بوضعه بشكل منفصل في log
الدليل الجذر.
يعيّن دليل log
الدليل /var/log/nginx
لحاوية Nginx، لذلك في ملف تكوين Nginx، حيث يحتاج السجل إلى الإخراج، نحتاج إلى تكوينه إلى الدليل /var/log/nginx
، مثل:
error_log /var/log/nginx/nginx.localhost.error.log warn;
في معظم الحالات، سيتم إخراج سجلات PHP-FPM إلى سجلات Nginx، لذلك لا يلزم أي تكوين إضافي.
بالإضافة إلى ذلك، يوصى بفتح سجل الأخطاء مباشرة في PHP:
error_reporting ( E_ALL );
ini_set ( ' error_reporting ' , ' on ' );
ini_set ( ' display_errors ' , ' on ' );
إذا كنت في حاجة إليها حقًا، فاتبع الخطوات لفتحها (في الحاوية).
$ docker exec -it php /bin/sh
$ mkdir /var/log/php
$ cd /var/log/php
$ touch php-fpm.error.log
$ chmod a+w php-fpm.error.log
conf/php-fpm.conf
على المضيف، وابحث عن السطر التالي، واحذف التعليق، وقم بتغيير القيمة إلى: php_admin_value[error_log] = /var/log/php/php-fpm.error.log
نظرًا لأن MySQL في حاوية MySQL يتم تشغيلها بواسطة مستخدم mysql
، فلا يمكن إضافة ملفات السجل ضمن /var/log
بمفردها. لذلك، نضع سجل MySQL في نفس دليل البيانات، أي ضمن دليل mysql
للمشروع، المطابق للدليل /var/log/mysql/
في الحاوية.
slow-query-log-file = /var/log/mysql/mysql.slow.log
log-error = /var/log/mysql/mysql.error.log
ما ورد أعلاه هو تكوين ملف السجل في mysql.conf.
افتراضيًا، لا يقوم هذا المشروع بتمكين phpMyAdmin لإدارة MySQL عبر الإنترنت و phpRedisAdmin لإدارة redis عبر الإنترنت في docker-compose.yml
ويمكن تعديلهما أو حذفهما حسب الحاجة.
عنوان المنفذ الذي تم تعيينه بواسطة حاوية phpMyAdmin للمضيف هو: 8080
، وبالتالي فإن عنوان الوصول إلى phpMyAdmin على المضيف هو:
http://localhost:8080
معلومات اتصال MySQL:
3306
عنوان المنفذ الذي تم تعيينه بواسطة حاوية phpRedisAdmin للمضيف هو: 8081
، وبالتالي فإن عنوان الوصول إلى phpMyAdmin على المضيف هو:
http://localhost:8081
معلومات اتصال Redis هي كما يلي:
6379
للاستخدام في بيئة الإنتاج:
وراجع هذه المسألة: رقم: ٩١
يستخدم Docker المهام المجدولة cron
تم تكوين وقت الحاوية باستخدام المتغير TZ
في ملف .env للتعرف على كافة المناطق الزمنية المدعومة، يرجى الاطلاع على قائمة المناطق الزمنية · ويكيبيديا أو قائمة المناطق الزمنية المدعومة من موقع PHP · PHP الرسمي.
ويمكن تقسيم هذا إلى حالتين،
الحالة الأولى، في كود PHP .
// 连接MySQL
$ dbh = new PDO ( ' mysql:host=mysql;dbname=mysql ' , ' root ' , ' 123456 ' );
// 连接Redis
$ redis = new Redis ();
$ redis -> connect ( ' redis ' , 6379 );
نظرًا لأن الحاوية والحاوية متصلان من خلال منفذ expose
وموجودان في نفس networks
، فإن المعلمة host
للاتصال تستخدم اسم الحاوية مباشرةً، ومعلمة port
هي المنفذ الموجود داخل الحاوية. لمزيد من المعلومات، يرجى الرجوع إلى "الفرق بين منافذ إنشاء Docker والكشف".
في الحالة الثانية، قم بالاتصال عبر سطر الأوامر أو Navicat والأدوات الأخرى الموجودة على المضيف . إذا أراد المضيف الاتصال بـ mysql وredis، فيجب على الحاوية تعيين المنفذ للمضيف من خلال ports
. بأخذ الخلية كمثال، يوجد تكوين ports
في ملف docker-compose.yml
: 3306:3306
، مما يعني أن منفذ 3306 للمضيف ومنفذ 3306 للحاوية يشكلان تعيينًا، حتى نتمكن من الاتصال مثل هذا:
$ mysql -h127.0.0.1 -uroot -p123456 -P3306
$ redis-cli -h127.0.0.1
لا يمكن لمعلمة host
استخدام المضيف المحلي هنا لأنها تتواصل مع mysql من خلال ملف الجورب افتراضيًا، وقد تم عزل الحاوية ونظام الملفات المضيف، لذلك يجب أن تكون متصلاً عبر TCP، لذلك يجب تحديد IP.
1. ينفذ المضيف ifconfig docker0
للحصول على inet
، وهو عنوان ip
المراد الاتصال به.
$ ifconfig docker0
docker0: flags= 4099< UP,BROADCAST,MULTICAST > mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
...
2. قم بتشغيل سطر أوامر MySQL للمضيف
mysql > GRANT ALL PRIVILEGES ON * . * TO ' root ' @ ' % ' IDENTIFIED BY ' 123456 ' WITH GRANT OPTION;
mysql > flush privileges;
// 其中各字符的含义:
// * . * 对任意数据库任意表有效
// " root " " 123456 " 是数据库用户名和密码
// ' % ' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新权限信息
3. ثم اتصل مباشرة بحاوية php باستخدام 172.0.17.1:3306
8.0.28
أو أعلى، ويتطلب إصدار PHP الإصدار 7.4.7
أو أعلى للاتصال.كيفية إنشاء اسم حاوية عندما لم يتم تحديد اسم الحاوية
معهد ماساتشوستس للتكنولوجيا