Доброго времени суток! В данной статье и следующих я расскажу и покажу, как настроить окружение
разработки c помощью Docker в котором можно будет создавать PHP и JavaScript проекты.
О том, что такое Docker и зачем он нужен я уже рассказывал здесь.
Фактически в рамках данной статьи мы рассмотрим как создать и настроить связку Nginx+PHP(PHP-FPM)+NodeJS+MySQL с помощью Docker-a.
Все зависимости мы будем прописывать в конфигурационных файлах, так, что каждый у кого есть установленные Docker и Docker Compose,
хоть на Linux, хоть на Windows, сможет запустить проекта буквально одной командой.
Установка Docker на Windows ничем не отличается от установки большинства программ, а для Linux есть подробные инструкции,
которые просто необходимо последовательно выполнить.
Итак, рассмотрим файловую структуру проекта.
.
├── bin
│ └── dapp
├── docker
│ ├── mysql
│ │ ├── conf.d
│ │ ├── init
│ │ └── lib
│ ├── nginx
│ │ ├── cert_data
│ │ ├── common
│ │ │ └── cors.conf
│ │ ├── conf.d
│ │ │ ├── api.dapp.local.conf
│ │ │ └── dapp.local.conf
│ │ ├── generated_certs
│ │ ├── logs
│ │ │ ├── access.log
│ │ │ ├── dapp.access.log
│ │ │ ├── dapp_api.access.log
│ │ │ ├── dapp_api.error.log
│ │ │ ├── dapp.error.log
│ │ │ └── error.log
│ │ ├── ssl
│ │ │ ├── certs
│ │ │ └── private
│ │ ├── Dockerfile
│ │ ├── generate-ssl-2.sh
│ │ ├── nginx.conf
│ │ └── openssl.cnf
│ └── php
│ ├── conf.d
│ │ ├── error_reporting.ini
│ │ └── xdebug.ini
│ ├── Dockerfile
│ └── local.ini
├── src
├── docker-compose.yml
└── update_hosts.sh
Теперь рассмотрим подробнее часть основных файлов и папок проекта.
bin/dapp
Основной скрипт, которые отвечает за запуск и остановку контейнеров. Также с помощью данной скрипта можно войти
в контейнер и работать с файлами в нем, как с обычными файлами. Все изменения сделанные в контейнере будут отображаться
на файлы проекта в папке src/#название проекта#. Далее содержимое этого файла:
#!/usr/bin/env bash
set -e
COMMAND_UP="docker compose up -d"
COMMAND_STOP="docker compose stop"
COMMAND_PS="docker ps"
COMMAND_APP="docker exec -it -u dapp:dapp dapp-php /bin/bash"
COMMAND_APP_AS_ROOT="docker exec -it dapp-php /bin/bash"
COMMAND_APP_EXEC="docker exec -u dapp:dapp dapp-php ${2}"
COMMAND_SERVER="docker exec -it dapp-nginx /bin/bash"
COMMAND_DB="docker exec -it dapp-mysql /bin/bash"
COMMAND_LOGS="docker logs dapp-$2 $3"
COMMAND_RESTART="docker compose restart"
COMMAND_HELP="echo DApp available commands: up, stop, restart, ps, app, app:root, exec, server, db, logs"
cli_command="$1"
case "$cli_command" in
up|UP ) $COMMAND_UP;;
stop|STOP ) $COMMAND_STOP;;
ps|PS ) $COMMAND_PS;;
app|APP ) $COMMAND_APP;;
db|DB ) $COMMAND_DB;;
logs ) $COMMAND_LOGS;;
server ) $COMMAND_SERVER;;
restart ) $COMMAND_RESTART;;
exec ) $COMMAND_APP_EXEC;;
app:root ) $COMMAND_APP_AS_ROOT;;
* ) $COMMAND_HELP;;
esac
Работаем с этим файлом следующим образом:
$ bin/dapp up # запускает наши контейнеры (nginx, php, mysql)
$ bin/dapp stop # останавливает контейнеры
$ bin/dapp app # открывает командную строку в контейнере с PHP, рабочей папкой является папка src из хостовой файловой системы
update_hosts.sh
#!/usr/bin/env bash
HOST_BASE="dapp.local"
set -e
function create_hosts_entries {
hub_template="$1"
{
printf "n"
printf "# =========== DApp Dev Domains ======================= #"
printf "n"
printf "127.0.0.1t %sn" "$HOST_BASE"
printf "127.0.0.1t %s.%sn" "$hub_template" "$HOST_BASE"
printf "# =========== added by scripts/update_hosts.sh ========== #"
printf "n"
} >> /etc/hosts
printf "/etc/hosts with %s hub updated!n" "$1"
}
create_hosts_entries "api"
Скрипт выше предназначен для автоматического обновления файла /etc/hosts (это для Linux, для Windows файл C:WindowsSystem32driversetchosts
нужно отредактировать вручную), чтобы к локальному сайту можно было обращаться в браузере по имени хоста, в нашем случае dapp.local.
Таким образом в данной статье мы начали рассматривать с Вами, как с помощью Docker можно настроить локальную среду разработки Nginx+PHP+MySQL,
в следующих статьях посмотрим как собрать в Docker нужный именно нам образ PHP и опишем конфигурацию проекта с помощью docker-compose.yml.