DNMP (Docker + Nginx/Openresty + MySQL5,8 + PHP5,7,8 + Redis + ElasticSearch + MongoDB + RabbitMQ) ist ein voll ausgestattetes LNMP-Ein-Klick-Installationsprogramm, das Arm CPU unterstützt .
Es gibt einige Empfehlungen für Jobmöglichkeiten im Ausland. Interessierte können einen Blick darauf werfen.
100%
Open Source100%
konform mit den Docker-Standardspdo_mysql
, mysqli
, mbstring
, gd
, curl
, opcache
usw. und kann je nach Umgebung flexibel konfiguriert werden.100%
Verfügbarkeit sicherzustelleninstall-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
-Benutzer ist, müssen Sie den aktuellen Benutzer auch zur docker
-Benutzergruppe hinzufügen: ```
$ sudo gpasswd -a ${USER} docker
```
copy
) und starten Sie: ```
$ 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
oder https://localhost
(selbstsignierte HTTPS-Demo), um den Effekt zu sehen. Der PHP-Code befindet sich in der Datei ./www/localhost/index.php
. Zuerst müssen Sie andere PHP-Versionen wie PHP5.4 starten, dann die Kommentare vor PHP5.4 in der Datei docker-compose.yml
löschen und dann den PHP5.4-Container starten.
Öffnen Sie nach dem Start von PHP5.4 die Nginx-Konfiguration und ändern Sie die Hostadresse von fastcgi_pass
von php
in php54
wie folgt:
fastcgi_pass php:9000;
für:
fastcgi_pass php54:9000;
Dabei sind php
und php54
die Namen der Server in der Datei docker-compose.yml
.
Starten Sie abschließend Nginx neu , damit es wirksam wird.
$ docker exec -it nginx nginx -s reload
Hier gibt es zwei nginx
, der erste ist der Containername und der zweite ist das nginx
-Programm im Container.
Viele Funktionen von PHP werden durch Erweiterungen implementiert, und die Installation von Erweiterungen ist ein etwas zeitaufwändiger Prozess. Daher installieren wir zusätzlich zu den integrierten Erweiterungen von PHP standardmäßig nur einige Erweiterungen in der Datei env.sample
Installieren Sie weitere Erweiterungen. Öffnen Sie bitte Ihre .env
Datei und ändern Sie die folgende PHP-Konfiguration, indem Sie die erforderlichen PHP-Erweiterungen hinzufügen:
PHP_EXTENSIONS=pdo_mysql,opcache,redis # PHP 要安装的扩展列表,英文逗号隔开
PHP54_EXTENSIONS=opcache,redis # PHP 5.4要安装的扩展列表,英文逗号隔开
Erstellen Sie dann das PHP-Image neu.
docker-compose build php
Informationen zu verfügbaren Erweiterungen finden Sie im Kommentarblock env.sample
in derselben Datei.
1. Betreten Sie den Container:
docker exec -it php /bin/sh
install-php-extensions apcu
2.Unterstützt die schnelle Installation der Erweiterungsliste
Verlängerung | PHP 8.4 | PHP 8.3 | PHP 8.2 | PHP 8.1 | PHP 8.0 | PHP 7.4 | PHP 7.3 | PHP 7.2 | PHP 7.1 | PHP 7.0 | PHP 5.6 | PHP 5.5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
amqp | ||||||||||||
apcu | ||||||||||||
apcu_bc | ||||||||||||
ast | ||||||||||||
bcmath | ||||||||||||
Bitsatz | ||||||||||||
Schwarzfeuer | ||||||||||||
bz2 | ||||||||||||
Kalender | ||||||||||||
Kassandra* | ||||||||||||
cmark | ||||||||||||
csv | ||||||||||||
dba | ||||||||||||
ddtrace* | ||||||||||||
dezimal | ||||||||||||
ds | ||||||||||||
ecma_intl* | ||||||||||||
verzaubern | ||||||||||||
ev | ||||||||||||
Ereignis | ||||||||||||
Excimer | ||||||||||||
exif | ||||||||||||
ffi | ||||||||||||
ftp | ||||||||||||
gd | ||||||||||||
Gearman | ||||||||||||
geoip | ||||||||||||
Geos* | ||||||||||||
Geodaten | ||||||||||||
gettext | ||||||||||||
gmagick | ||||||||||||
gmp | ||||||||||||
gnupg | ||||||||||||
grpc | ||||||||||||
http | ||||||||||||
igbinär | ||||||||||||
Bild | ||||||||||||
imap | ||||||||||||
inotify | ||||||||||||
Interbase | ||||||||||||
intl | ||||||||||||
Ion | ||||||||||||
ioncube_loader | ||||||||||||
jsmin | ||||||||||||
json_post | ||||||||||||
jsonpath | ||||||||||||
ldap | ||||||||||||
luasandbox | ||||||||||||
lz4* | ||||||||||||
zf | ||||||||||||
mailparse | ||||||||||||
maxminddb | ||||||||||||
mcrypt | ||||||||||||
Memcache | ||||||||||||
zwischengespeichert | ||||||||||||
memprof* | ||||||||||||
Mongo | ||||||||||||
mongodb | ||||||||||||
Mücke | ||||||||||||
msgpack | ||||||||||||
mssql | ||||||||||||
MySQL | ||||||||||||
mysqli | ||||||||||||
neues Relikt | ||||||||||||
oauth | ||||||||||||
oci8 | ||||||||||||
odbc | ||||||||||||
opcache | ||||||||||||
offene Volkszählung | ||||||||||||
openwoole | ||||||||||||
offene Telemetrie | ||||||||||||
parallel* | ||||||||||||
parle* | ||||||||||||
pcntl | ||||||||||||
pcov | ||||||||||||
pdo_dblib | ||||||||||||
pdo_firebird | ||||||||||||
pdo_mysql | ||||||||||||
pdo_oci | ||||||||||||
pdo_odbc | ||||||||||||
pdo_pgsql | ||||||||||||
pdo_sqlsrv | ||||||||||||
pgsql | ||||||||||||
Phalkon | ||||||||||||
php_trie | ||||||||||||
phpy* | ||||||||||||
pkcs11 | ||||||||||||
pq | ||||||||||||
propro | ||||||||||||
protobuf | ||||||||||||
pspell | ||||||||||||
psr | ||||||||||||
pthreads* | ||||||||||||
raphf | ||||||||||||
rdkafka | ||||||||||||
neu kodieren | ||||||||||||
redis | ||||||||||||
Relais | ||||||||||||
sächsisch* | ||||||||||||
Meeresklick | ||||||||||||
Seegang | ||||||||||||
shmop | ||||||||||||
simdjson* | ||||||||||||
smbclient | ||||||||||||
bissig | ||||||||||||
SNMP | ||||||||||||
Schnupftabak | ||||||||||||
Seife | ||||||||||||
Steckdosen | ||||||||||||
Natrium* | ||||||||||||
solr | ||||||||||||
Quellenwächter | ||||||||||||
spx | ||||||||||||
sqlsrv* | ||||||||||||
ssh2 | ||||||||||||
stampfen | ||||||||||||
swoole | ||||||||||||
sybase_ct | ||||||||||||
synchronisieren | ||||||||||||
sysvmsg | ||||||||||||
sysvsem | ||||||||||||
sysvshm | ||||||||||||
Tensor | ||||||||||||
Gezeitenwege | ||||||||||||
ordentlich | ||||||||||||
timezonedb | ||||||||||||
uopz | ||||||||||||
Upload-Fortschritt | ||||||||||||
uuid | ||||||||||||
UV | ||||||||||||
VIPs* | ||||||||||||
vld | ||||||||||||
xx | ||||||||||||
wikidiff2* | ||||||||||||
xdebug | ||||||||||||
xdiff | ||||||||||||
xhpr | ||||||||||||
XLSwriter | ||||||||||||
xmldiff | ||||||||||||
xmlrpc | ||||||||||||
xpass* | ||||||||||||
xsl | ||||||||||||
yac | ||||||||||||
Yaml | ||||||||||||
Jahr | ||||||||||||
zephir_parser | ||||||||||||
Reißverschluss | ||||||||||||
zq | ||||||||||||
Tierpfleger | ||||||||||||
zstd |
Anzahl unterstützter Erweiterungen: 150
Diese Erweiterung stammt aus der Referenzbeispieldatei https://github.com/mlocati/docker-php-extension-installer
~/.bashrc
des Hosts. 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
Methode 1: Verwenden Sie den Composer-Befehl auf dem Host
~/dnmp
heruntergeladen wird, lautet der Cache-Pfad von Composer ~/dnmp/data/composer
.~/.bashrc
des Hosts.Hierbei ist zu beachten, dass das Verzeichnis
~/dnmp/data/composer
in der Beispieldatei das im ersten Schritt festgelegte Verzeichnis sein muss.
source ~ /.bashrc
cd ~ /dnmp/www/
composer create-project yeszao/fastphp project --no-dev
~/dnmp/data/composer
generiert. Sie können das inländische Warehouse in dieser Datei angeben, zum Beispiel: {
"config" : {},
"repositories" : {
"packagist" : {
"type" : " composer " ,
"url" : " https://mirrors.aliyun.com/composer/ "
}
}
}
Methode 2: Verwenden Sie den Composer-Befehl im Container
Es gibt eine andere Möglichkeit, den Container einzugeben und dann den composer
-Befehl auszuführen. Nehmen Sie den PHP7-Container als Beispiel:
docker exec -it php /bin/sh
cd /www/localhost
composer update
Um den Dienst zu verwalten, fügen Sie den Servernamen nach dem Befehl hinzu, zum Beispiel:
$ 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 # 停止并删除容器,网络,图像和挂载卷
Während der Entwicklung verwenden wir möglicherweise häufig docker exec -it
um auf den Container zuzugreifen. Dies ist eine problemlose Methode, um häufig verwendete Befehlsaliase zu erstellen.
Überprüfen Sie zunächst die verfügbaren Container auf dem Host:
$ docker ps # 查看所有运行中的容器
$ docker ps -a # 所有容器
Die Ausgabespalte NAMES
ist der Name des Containers. Wenn die Standardkonfiguration verwendet wird, lautet der Name nginx
, php
, php56
, mysql
usw.
Öffnen Sie dann die Datei ~/.bashrc
oder ~/.zshrc
und fügen Sie Folgendes hinzu:
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 '
Beim nächsten Mal wird es sehr schnell gehen, den Container einzugeben. Geben Sie beispielsweise den PHP-Container ein:
$ dphp
ifconfig docker0
Wird verwendet, um die hosts
-Adresse des Containers extra_hosts
einzugeben, um auf den Host-Computer zuzugreifen
Der Speicherort, an dem die Protokolldatei generiert wird, hängt vom Wert jeder Protokollkonfiguration unter conf ab.
Das Nginx-Protokoll ist das Protokoll, das wir am häufigsten verwenden, daher legen wir es separat im Stammverzeichnis log
ab.
Das log
ordnet das Verzeichnis /var/log/nginx
des Nginx-Containers zu. Daher müssen wir es in der Nginx-Konfigurationsdatei, in der das Protokoll ausgegeben werden muss, für das Verzeichnis /var/log/nginx
konfigurieren, z. B.:
error_log /var/log/nginx/nginx.localhost.error.log warn;
In den meisten Fällen werden die Protokolle von PHP-FPM in Nginx-Protokolle ausgegeben, sodass keine zusätzliche Konfiguration erforderlich ist.
Zusätzlich empfiehlt es sich, das Fehlerprotokoll direkt in PHP zu öffnen:
error_reporting ( E_ALL );
ini_set ( ' error_reporting ' , ' on ' );
ini_set ( ' display_errors ' , ' on ' );
Wenn Sie es wirklich brauchen, befolgen Sie die Schritte zum Öffnen (im Behälter).
$ 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
auf dem Host, suchen Sie die folgende Zeile, löschen Sie den Kommentar und ändern Sie den Wert in: php_admin_value[error_log] = /var/log/php/php-fpm.error.log
Da MySQL im MySQL-Container vom mysql
-Benutzer gestartet wird, kann es selbst keine Protokolldateien unter /var/log
hinzufügen. Daher legen wir das MySQL-Protokoll im selben Verzeichnis wie die Daten ab, nämlich im mysql
-Verzeichnis des Projekts, das dem Verzeichnis /var/log/mysql/
im Container entspricht.
slow-query-log-file = /var/log/mysql/mysql.slow.log
log-error = /var/log/mysql/mysql.error.log
Das Obige ist die Konfiguration der Protokolldatei in mysql.conf.
Standardmäßig aktiviert dieses Projekt phpMyAdmin für die MySQL-Onlineverwaltung und phpRedisAdmin für die Redis-Onlineverwaltung in docker-compose.yml
Sie können nach Bedarf geändert oder gelöscht werden.
Die vom phpMyAdmin-Container dem Host zugeordnete Portadresse lautet: 8080
Die Adresse für den Zugriff auf phpMyAdmin auf dem Host lautet also:
http://localhost:8080
Informationen zur MySQL-Verbindung:
3306
Die vom phpRedisAdmin-Container dem Host zugeordnete Portadresse lautet: 8081
Die Adresse für den Zugriff auf phpMyAdmin auf dem Host lautet also:
http://localhost:8081
Die Redis-Verbindungsinformationen lauten wie folgt:
6379
Für den Einsatz in einer Produktionsumgebung:
Siehe dieses Problem: Nr. 91
Docker verwendet geplante Cron-Aufgaben
Die Containerzeit wird mit der TZ
Variablen in der .env-Datei konfiguriert. Informationen zu allen unterstützten Zeitzonen finden Sie in der Zeitzonenliste·Wikipedia oder auf der offiziellen PHP-Website.
Dies kann in zwei Situationen unterteilt werden:
Der erste Fall im PHP-Code .
// 连接MySQL
$ dbh = new PDO ( ' mysql:host=mysql;dbname=mysql ' , ' root ' , ' 123456 ' );
// 连接Redis
$ redis = new Redis ();
$ redis -> connect ( ' redis ' , 6379 );
Da der Container und der Container über den expose
-Port verbunden sind und sich in denselben networks
befinden, verwendet der host
Parameter der Verbindung direkt den Containernamen und port
Parameter ist der Port innerhalb des Containers. Weitere Informationen finden Sie unter „Der Unterschied zwischen Docker-Compose-Ports und Expose“.
Im zweiten Fall stellen Sie eine Verbindung über die Befehlszeile oder Navicat und andere Tools auf dem Host her. Wenn der Host MySQL und Redis verbinden möchte, muss der Container den Port über ports
dem Host zuordnen. Am Beispiel von MySQL gibt es ports
in der Datei docker-compose.yml
: 3306:3306
. Dies bedeutet, dass der 3306-Port des Hosts und der 3306-Port des Containers eine Zuordnung bilden, sodass wir eine Verbindung herstellen können Das:
$ mysql -h127.0.0.1 -uroot -p123456 -P3306
$ redis-cli -h127.0.0.1
Der host
Parameter kann hier nicht localhost verwenden, da er standardmäßig über die Sock-Datei mit MySQL kommuniziert und der Container und das Host-Dateisystem isoliert wurden. Daher muss eine Verbindung über TCP hergestellt werden, sodass die IP angegeben werden muss.
1. Der Host führt ifconfig docker0
aus, um inet
abzurufen, die ip
Adresse, mit der eine Verbindung hergestellt werden soll.
$ 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. Führen Sie die Host-MySQL-Befehlszeile aus
mysql > GRANT ALL PRIVILEGES ON * . * TO ' root ' @ ' % ' IDENTIFIED BY ' 123456 ' WITH GRANT OPTION;
mysql > flush privileges;
// 其中各字符的含义:
// * . * 对任意数据库任意表有效
// " root " " 123456 " 是数据库用户名和密码
// ' % ' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新权限信息
3. Stellen Sie dann über 172.0.17.1:3306
eine direkte Verbindung zum PHP-Container her
8.0.28
oder höher verwendet. Für die PHP-Version ist 7.4.7
oder höher erforderlich, um eine Verbindung herzustellen.So generieren Sie einen Containernamen, wenn der Containername nicht angegeben ist
MIT