DNMP (Docker + Nginx/Openresty + MySQL5,8 + PHP5,7,8 + Redis + ElasticSearch + MongoDB + RabbitMQ) adalah program instalasi sekali klik LNMP berfitur lengkap yang mendukung Arm CPU .
Ada beberapa rekomendasi peluang kerja di luar negeri. Teman-teman yang berminat bisa melihatnya.
100%
sumber terbuka100%
sesuai dengan standar Dockerpdo_mysql
, mysqli
, mbstring
, gd
, curl
, opcache
, dll., dan dapat dikonfigurasi secara fleksibel sesuai dengan lingkungan.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
, Anda juga perlu menambahkan pengguna saat ini ke grup pengguna docker
: ```
$ sudo gpasswd -a ${USER} docker
```
copy
), dan mulai: ```
$ 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
atau https://localhost
(demo HTTPS yang ditandatangani sendiri) untuk melihat efeknya. Kode PHP ada di file ./www/localhost/index.php
. Pertama, Anda perlu menjalankan versi PHP lain, seperti PHP5.4, lalu menghapus komentar di depan PHP5.4 di file docker-compose.yml
, lalu memulai container PHP5.4.
Setelah PHP5.4 dimulai, buka konfigurasi Nginx dan ubah alamat host fastcgi_pass
dari php
menjadi php54
, sebagai berikut:
fastcgi_pass php:9000;
untuk:
fastcgi_pass php54:9000;
dimana php
dan php54
adalah nama server pada file docker-compose.yml
.
Terakhir, restart Nginx agar diterapkan.
$ docker exec -it nginx nginx -s reload
Ada dua nginx
di sini, yang pertama adalah nama container, dan yang kedua adalah program nginx
di dalam container.
Banyak fungsi PHP diimplementasikan melalui ekstensi, dan memasang ekstensi adalah proses yang sedikit memakan waktu. Oleh karena itu, selain ekstensi bawaan PHP, kami hanya menginstal beberapa ekstensi secara default di file env.sample
instal lebih banyak ekstensi, silakan Buka file .env
Anda dan ubah konfigurasi PHP berikut, tambahkan ekstensi PHP yang diperlukan:
PHP_EXTENSIONS=pdo_mysql,opcache,redis # PHP 要安装的扩展列表,英文逗号隔开
PHP54_EXTENSIONS=opcache,redis # PHP 5.4要安装的扩展列表,英文逗号隔开
Kemudian membangun kembali gambar PHP.
docker-compose build php
Untuk ekstensi yang tersedia, lihat blok komentar env.sample
di file yang sama.
1. Masukkan wadahnya:
docker exec -it php /bin/sh
install-php-extensions apcu
2. Mendukung instalasi cepat daftar ekstensi
Perpanjangan | 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 | ||||||||||||
aplikasi | ||||||||||||
apcu_bc | ||||||||||||
ast | ||||||||||||
bcmath | ||||||||||||
kumpulan bit | ||||||||||||
api hitam | ||||||||||||
bz2 | ||||||||||||
kalender | ||||||||||||
cassandra* | ||||||||||||
tanda cm | ||||||||||||
csv | ||||||||||||
dba | ||||||||||||
jejak dd* | ||||||||||||
desimal | ||||||||||||
ds | ||||||||||||
ecma_intl* | ||||||||||||
mempesona | ||||||||||||
ev | ||||||||||||
peristiwa | ||||||||||||
excimer | ||||||||||||
exik | ||||||||||||
ffi | ||||||||||||
ftp | ||||||||||||
gd | ||||||||||||
tukang gigi | ||||||||||||
geoip | ||||||||||||
geo* | ||||||||||||
geospasial | ||||||||||||
dapatkan teks | ||||||||||||
ajaib | ||||||||||||
gmp | ||||||||||||
gnupg | ||||||||||||
grpc | ||||||||||||
http | ||||||||||||
igbiner | ||||||||||||
bayangkan | ||||||||||||
gambar | ||||||||||||
memberi tahu | ||||||||||||
antar pangkalan | ||||||||||||
internasional | ||||||||||||
ion | ||||||||||||
ioncube_loader | ||||||||||||
jsmin | ||||||||||||
json_post | ||||||||||||
jsonpath | ||||||||||||
ldap | ||||||||||||
luasandbox | ||||||||||||
lz4* | ||||||||||||
zf | ||||||||||||
parse surat | ||||||||||||
maxminddb | ||||||||||||
mcrypt | ||||||||||||
memcache | ||||||||||||
memcache | ||||||||||||
memprof* | ||||||||||||
mongo | ||||||||||||
mongodb | ||||||||||||
nyamuk | ||||||||||||
paket pesan | ||||||||||||
mssql | ||||||||||||
mysql | ||||||||||||
mysqli | ||||||||||||
peninggalan baru | ||||||||||||
sumpah | ||||||||||||
oci8 | ||||||||||||
odbc | ||||||||||||
opcache | ||||||||||||
sensus terbuka | ||||||||||||
openwoole | ||||||||||||
telemetri terbuka | ||||||||||||
paralel* | ||||||||||||
parle* | ||||||||||||
pcntl | ||||||||||||
pcov | ||||||||||||
pdo_dblib | ||||||||||||
pdo_firebird | ||||||||||||
pdo_mysql | ||||||||||||
pdo_oci | ||||||||||||
pdo_odbc | ||||||||||||
pdo_pgsql | ||||||||||||
pdo_sqlsrv | ||||||||||||
pgsql | ||||||||||||
elang | ||||||||||||
php_trie | ||||||||||||
phpy* | ||||||||||||
pkcs11 | ||||||||||||
hal | ||||||||||||
propro | ||||||||||||
protobuf | ||||||||||||
mantra | ||||||||||||
psr | ||||||||||||
benang p* | ||||||||||||
raphf | ||||||||||||
rdkafka | ||||||||||||
kode ulang | ||||||||||||
redis | ||||||||||||
menyampaikan | ||||||||||||
sakson* | ||||||||||||
klik laut | ||||||||||||
log laut | ||||||||||||
omong kosong | ||||||||||||
simdjson* | ||||||||||||
klien kecil | ||||||||||||
tajam | ||||||||||||
snmp | ||||||||||||
snuffleupagus | ||||||||||||
sabun | ||||||||||||
soket | ||||||||||||
sodium* | ||||||||||||
cerah | ||||||||||||
penjaga sumber | ||||||||||||
spx | ||||||||||||
sqlsrv* | ||||||||||||
ssh2 | ||||||||||||
menginjak | ||||||||||||
berputar-putar | ||||||||||||
sybase_ct | ||||||||||||
sinkronisasi | ||||||||||||
sysvmsg | ||||||||||||
sistem | ||||||||||||
sysvshm | ||||||||||||
tensor | ||||||||||||
jalur pasang surut | ||||||||||||
rapi | ||||||||||||
zona waktudb | ||||||||||||
uopz | ||||||||||||
kemajuan unggahan | ||||||||||||
uuid | ||||||||||||
sinar UV | ||||||||||||
VIP* | ||||||||||||
vld | ||||||||||||
xx | ||||||||||||
wikidiff2* | ||||||||||||
xdebug | ||||||||||||
xdiff | ||||||||||||
xhpr | ||||||||||||
xlswriter | ||||||||||||
xmldiff | ||||||||||||
xmlrpc | ||||||||||||
xpass* | ||||||||||||
xsl | ||||||||||||
yac | ||||||||||||
yaml | ||||||||||||
ya | ||||||||||||
zephir_parser | ||||||||||||
ritsleting | ||||||||||||
zq | ||||||||||||
penjaga kebun binatang | ||||||||||||
zstd |
Jumlah ekstensi yang didukung: 150
Ekstensi ini berasal dari https://github.com/mlocati/docker-php-extension-installer File contoh referensi
~/.bashrc
host. 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
Metode 1: Gunakan perintah komposer pada host
~/dnmp
, maka jalur cache composer adalah ~/dnmp/data/composer
.~/.bashrc
host.Yang perlu diperhatikan di sini adalah direktori
~/dnmp/data/composer
pada file contoh harus merupakan direktori yang ditentukan pada langkah pertama.
source ~ /.bashrc
cd ~ /dnmp/www/
composer create-project yeszao/fastphp project --no-dev
~/dnmp/data/composer
. Anda dapat menentukan gudang domestik di file ini, misalnya: {
"config" : {},
"repositories" : {
"packagist" : {
"type" : " composer " ,
"url" : " https://mirrors.aliyun.com/composer/ "
}
}
}
Metode 2: Gunakan perintah komposer dalam wadah
Ada cara lain yaitu masuk ke container lalu jalankan perintah composer
. Ambil contoh container PHP7:
docker exec -it php /bin/sh
cd /www/localhost
composer update
Untuk mengelola layanan, tambahkan nama server setelah perintah, misalnya:
$ 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 # 停止并删除容器,网络,图像和挂载卷
Selama pengembangan, kita mungkin sering menggunakan docker exec -it
untuk memasuki container. Ini adalah metode bebas masalah untuk membuat alias perintah yang umum digunakan.
Pertama, periksa container yang tersedia di host:
$ docker ps # 查看所有运行中的容器
$ docker ps -a # 所有容器
Kolom output NAMES
adalah nama container. Jika konfigurasi default yang digunakan, namanya nginx
, php
, php56
, mysql
, dll.
Kemudian, buka file ~/.bashrc
atau ~/.zshrc
dan tambahkan:
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 '
Akan sangat cepat untuk masuk ke container lain kali. Misalnya, masukkan container php:
$ dphp
ifconfig docker0
Digunakan untuk mengisi alamat hosts
dari container extra_hosts
untuk mengakses mesin host
Lokasi di mana file log dibuat bergantung pada nilai setiap konfigurasi log di bawah conf.
Log Nginx adalah log yang paling sering kami gunakan, jadi kami meletakkannya secara terpisah di direktori root log
.
Direktori log
memetakan direktori /var/log/nginx
dari container Nginx, jadi pada file konfigurasi Nginx, dimana log perlu dikeluarkan, kita perlu mengkonfigurasinya ke direktori /var/log/nginx
, seperti:
error_log /var/log/nginx/nginx.localhost.error.log warn;
Dalam kebanyakan kasus, log PHP-FPM akan di-output ke log Nginx, sehingga tidak diperlukan konfigurasi tambahan.
Selain itu, disarankan untuk membuka log kesalahan langsung di PHP:
error_reporting ( E_ALL );
ini_set ( ' error_reporting ' , ' on ' );
ini_set ( ' display_errors ' , ' on ' );
Jika benar-benar membutuhkannya, ikuti langkah membukanya (di dalam wadahnya).
$ 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
pada host, cari baris berikut, hapus komentar, dan ubah nilainya menjadi: php_admin_value[error_log] = /var/log/php/php-fpm.error.log
Karena MySQL dalam wadah MySQL dimulai oleh pengguna mysql
, ia tidak dapat menambahkan file log di bawah /var/log
dengan sendirinya. Oleh karena itu, kami meletakkan log MySQL di direktori yang sama dengan data, yaitu di bawah direktori mysql
proyek, sesuai dengan direktori /var/log/mysql/
di dalam container.
slow-query-log-file = /var/log/mysql/mysql.slow.log
log-error = /var/log/mysql/mysql.error.log
Di atas adalah konfigurasi file log di mysql.conf.
Secara default, proyek ini tidak mengaktifkan phpMyAdmin untuk manajemen online MySQL dan phpRedisAdmin untuk manajemen online redis di docker-compose.yml
Mereka dapat dimodifikasi atau dihapus sesuai kebutuhan.
Alamat port yang dipetakan oleh container phpMyAdmin ke host adalah: 8080
, jadi alamat untuk mengakses phpMyAdmin di host adalah:
http://localhost:8080
Informasi koneksi MySQL:
3306
Alamat port yang dipetakan oleh container phpRedisAdmin ke host adalah: 8081
, jadi alamat untuk mengakses phpMyAdmin di host adalah:
http://localhost:8081
Informasi koneksi Redis adalah sebagai berikut:
6379
Untuk digunakan dalam lingkungan produksi:
Lihat masalah ini: #91
Docker menggunakan tugas terjadwal cron
Waktu kontainer dikonfigurasikan dengan variabel TZ
di file .env. Untuk semua zona waktu yang didukung, silakan lihat daftar zona waktu·Wikipedia atau daftar zona waktu yang didukung oleh situs web resmi PHP·PHP.
Hal ini dapat dibagi menjadi dua situasi,
Kasus pertama, dalam kode PHP .
// 连接MySQL
$ dbh = new PDO ( ' mysql:host=mysql;dbname=mysql ' , ' root ' , ' 123456 ' );
// 连接Redis
$ redis = new Redis ();
$ redis -> connect ( ' redis ' , 6379 );
Karena container dan container terhubung melalui port expose
dan berada dalam networks
yang sama, parameter host
koneksi langsung menggunakan nama container, dan parameter port
adalah port di dalam container. Untuk informasi lebih lanjut, silakan lihat "Perbedaan Antara Port Docker-compose dan Expose".
Dalam kasus kedua, sambungkan melalui baris perintah atau Navicat dan alat lain di host . Jika host ingin menghubungkan mysql dan redis, container harus memetakan port ke host melalui ports
. Mengambil mysql sebagai contoh, ada konfigurasi ports
di file docker-compose.yml
: 3306:3306
, yang berarti port 3306 dari host dan port 3306 dari container membentuk pemetaan, sehingga kita dapat terhubung seperti ini:
$ mysql -h127.0.0.1 -uroot -p123456 -P3306
$ redis-cli -h127.0.0.1
Parameter host
tidak dapat menggunakan localhost di sini karena berkomunikasi dengan mysql melalui file sock secara default, dan container serta sistem file host telah diisolasi, sehingga perlu dihubungkan melalui TCP, sehingga IP perlu ditentukan.
1. Host mengeksekusi ifconfig docker0
untuk mendapatkan inet
, yang merupakan alamat ip
yang akan dihubungkan.
$ 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. Jalankan baris perintah host 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. Kemudian koneksikan langsung ke container php menggunakan 172.0.17.1:3306
8.0.28
atau lebih tinggi, versi PHP memerlukan 7.4.7
atau lebih tinggi untuk terhubung.Cara menghasilkan nama kontainer ketika nama kontainer tidak ditentukan
MIT