DNMP(Docker + Nginx/Openresty + MySQL5,8 + PHP5,7,8 + Redis + ElasticSearch + MongoDB + RabbitMQ)는 Arm CPU를 지원하는 모든 기능을 갖춘 LNMP 원클릭 설치 프로그램 입니다.
해외 취업 기회에 대한 몇 가지 권장 사항이 있습니다. 관심이 있는 친구는 한 번 살펴볼 수 있습니다.
100%
오픈 소스100%
준수합니다.pdo_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
파일에 있습니다. 먼저 PHP5.4와 같은 다른 버전의 PHP를 시작한 다음 docker-compose.yml
파일에서 PHP5.4 앞의 주석을 삭제한 다음 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. 확장 목록의 빠른 설치 지원
확대 | 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 | ||||||||||||
비트셋 | ||||||||||||
검은 불 | ||||||||||||
bz2 | ||||||||||||
달력 | ||||||||||||
카산드라* | ||||||||||||
cmmark | ||||||||||||
CSV | ||||||||||||
DBA | ||||||||||||
ddtrace* | ||||||||||||
소수 | ||||||||||||
DS | ||||||||||||
ecma_intl* | ||||||||||||
호리다 | ||||||||||||
에브 | ||||||||||||
이벤트 | ||||||||||||
엑시머 | ||||||||||||
엑시프 | ||||||||||||
ffi | ||||||||||||
FTP | ||||||||||||
gd | ||||||||||||
기어맨 | ||||||||||||
거입 | ||||||||||||
지역* | ||||||||||||
지리공간 | ||||||||||||
gettext | ||||||||||||
gmagick | ||||||||||||
gmp | ||||||||||||
그누그 | ||||||||||||
grpc | ||||||||||||
http | ||||||||||||
이진수 | ||||||||||||
상상력 | ||||||||||||
아이맵 | ||||||||||||
inotify | ||||||||||||
인터베이스 | ||||||||||||
국제 | ||||||||||||
이온 | ||||||||||||
ioncube_loader | ||||||||||||
jsmin | ||||||||||||
json_post | ||||||||||||
JSON 경로 | ||||||||||||
LDAP | ||||||||||||
루아샌드박스 | ||||||||||||
lz4* | ||||||||||||
zf | ||||||||||||
메일 분석 | ||||||||||||
maxminddb | ||||||||||||
mcrypt | ||||||||||||
멤캐시 | ||||||||||||
멤캐시드 | ||||||||||||
멤프로프* | ||||||||||||
몽고 | ||||||||||||
몽고디비 | ||||||||||||
모기 | ||||||||||||
msgpack | ||||||||||||
mssql | ||||||||||||
mysql | ||||||||||||
mysqli | ||||||||||||
새로운 유물 | ||||||||||||
맹세하다 | ||||||||||||
oci8 | ||||||||||||
odbc | ||||||||||||
opcache | ||||||||||||
인구 조사 | ||||||||||||
오픈 울 | ||||||||||||
개방형 원격 측정 | ||||||||||||
평행한* | ||||||||||||
팔레* | ||||||||||||
pcntl | ||||||||||||
PCOV | ||||||||||||
pdo_dblib | ||||||||||||
pdo_firebird | ||||||||||||
pdo_mysql | ||||||||||||
pdo_oci | ||||||||||||
pdo_odbc | ||||||||||||
pdo_pgsql | ||||||||||||
pdo_sqlsrv | ||||||||||||
pgsql | ||||||||||||
팔콘 | ||||||||||||
php_trie | ||||||||||||
PHPy* | ||||||||||||
pkcs11 | ||||||||||||
pq | ||||||||||||
프로프로 | ||||||||||||
프로토부프 | ||||||||||||
pspell | ||||||||||||
psr | ||||||||||||
p스레드* | ||||||||||||
라프프 | ||||||||||||
르드카프카 | ||||||||||||
녹음하다 | ||||||||||||
레디스 | ||||||||||||
계전기 | ||||||||||||
색슨 족* | ||||||||||||
바다클릭 | ||||||||||||
바다 기록 | ||||||||||||
shmop | ||||||||||||
심디슨* | ||||||||||||
smb클라이언트 | ||||||||||||
팔팔한 | ||||||||||||
snmp | ||||||||||||
스누플루파구스 | ||||||||||||
비누 | ||||||||||||
소켓 | ||||||||||||
나트륨* | ||||||||||||
솔르 | ||||||||||||
소스가디언 | ||||||||||||
spx | ||||||||||||
sqlsrv* | ||||||||||||
SSH2 | ||||||||||||
밟다 | ||||||||||||
스울 | ||||||||||||
사이베이스_ct | ||||||||||||
동조 | ||||||||||||
sysvmsg | ||||||||||||
sysvsem | ||||||||||||
sysvshm | ||||||||||||
텐서 | ||||||||||||
갯벌 | ||||||||||||
정돈하다 | ||||||||||||
시간대 DB | ||||||||||||
어옵즈 | ||||||||||||
업로드 진행 | ||||||||||||
uuid | ||||||||||||
자외선 | ||||||||||||
VIP* | ||||||||||||
vld | ||||||||||||
더블 엑스 | ||||||||||||
위키디프2* | ||||||||||||
xdebug | ||||||||||||
xdiff | ||||||||||||
xhpr | ||||||||||||
xlswriter | ||||||||||||
xmldiff | ||||||||||||
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
방법 1: 호스트에서 작곡가 명령 사용
~/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.json 파일이 생성됩니다. 이 파일에서 국내 창고를 지정할 수 있습니다. 예를 들면 다음과 같습니다. {
"config" : {},
"repositories" : {
"packagist" : {
"type" : " composer " ,
"url" : " https://mirrors.aliyun.com/composer/ "
}
}
}
방법 2: 컨테이너에서 작곡가 명령 사용
컨테이너에 들어간 다음 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
호스트 시스템에 액세스하기 위해 extra_hosts
컨테이너의 hosts
주소를 입력하는 데 사용됩니다.
로그 파일이 생성되는 위치는 conf의 각 로그 구성 값에 따라 다릅니다.
Nginx 로그는 우리가 가장 많이 사용하는 로그이므로 루트 디렉토리 log
에 별도로 넣어둡니다.
log
디렉터리는 Nginx 컨테이너의 /var/log/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 로그를 데이터와 동일한 디렉터리, 즉 컨테이너의 /var/log/mysql/
디렉터리에 해당하는 프로젝트의 mysql
디렉터리 아래에 넣습니다.
slow-query-log-file = /var/log/mysql/mysql.slow.log
log-error = /var/log/mysql/mysql.error.log
위는 mysql.conf의 로그 파일 구성이다.
기본적으로 이 프로젝트는 docker-compose.yml에서 MySQL 온라인 관리를 위한 phpMyAdmin 및 Redis 온라인 관리를 위한 phpRedisAdmin을 활성화하지 않습니다 docker-compose.yml
필요에 따라 수정하거나 삭제할 수 있습니다.
phpMyAdmin 컨테이너에 의해 호스트에 매핑된 포트 주소는 8080
이므로 호스트에서 phpMyAdmin에 액세스하기 위한 주소는 다음과 같습니다.
http://localhost:8080
MySQL 연결 정보:
3306
phpRedisAdmin 컨테이너에 의해 호스트에 매핑된 포트 주소는 8081
이므로 호스트에서 phpMyAdmin에 액세스하기 위한 주소는 다음과 같습니다.
http://localhost:8081
Redis 연결 정보는 다음과 같습니다.
6379
프로덕션 환경에서 사용하려면:
이 문제를 참조하십시오: #91
Docker는 cron 예약 작업을 사용합니다.
컨테이너 시간은 .env 파일의 TZ
변수로 구성됩니다. 지원되는 모든 시간대는 시간대 목록·Wikipedia 또는 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-compose 포트와 노출의 차이점"을 참조하세요.
두 번째 경우에는 명령줄 이나 Navicat 및 호스트의 다른 도구를 통해 연결합니다. 호스트가 mysql과 redis를 연결하려는 경우 컨테이너는 ports
통해 포트를 호스트에 매핑해야 합니다. mysql을 예로 들면, docker-compose.yml
파일에 다음과 같은 ports
구성이 있습니다: 3306:3306
이는 호스트의 3306 포트와 컨테이너의 3306 포트가 매핑을 형성한다는 의미이므로 다음과 같이 연결할 수 있습니다. 이것:
$ mysql -h127.0.0.1 -uroot -p123456 -P3306
$ redis-cli -h127.0.0.1
여기서 host
파라미터는 기본적으로 sock 파일을 통해 mysql과 통신하기 때문에 localhost를 사용할 수 없으며, 컨테이너와 호스트 파일 시스템이 분리되어 있어 TCP를 통해 연결해야 하므로 IP를 지정해 주어야 한다.
1. 호스트는 ifconfig docker0
실행하여 연결할 ip
주소인 inet
가져옵니다.
$ 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. 그런 다음 172.0.17.1:3306
사용하여 PHP 컨테이너에 직접 연결합니다.
8.0.28
이상을 사용하고 있는 경우, PHP 버전에 연결하려면 7.4.7
이상이 필요합니다.컨테이너 이름이 지정되지 않은 경우 컨테이너 이름을 생성하는 방법
MIT