Зачем Docker владельцу сайта?

Не давайте свои логины и пароли непроверенным людям, не записывайте их на стикерах в офисе, Вам же не приходит в голову оставить ключи от квартиры с запиской с адресом где нибудь в людном месте!

Что такое Docker?

Docker - это инструмент позволяющий Вам сделать виртуальную копию Вашего сайта, которую Вы сможете передать разработчикам, аудиторам, Seo-специалистам для проведения работ и будете уверены, что с Вашим реальным сайтом все будет в порядке, так как Вы не должны теперь передавать логины и пароли третьим лицам!

Зачем он нужен владельцу сайта?

Как я описал ранее, Вы получаете виртуальную копию Вашего сайта, это значит что Вы полностью сохраняете контроль над Вашим реальным сайтом, у Вас нет необходимости передавать такую критическую информацию как логины и пароли от админки сайта, от панели управления хостингом и протоколы доступа по SSH, SFTP/FTP. А это значит - Вы и Ваш сайт в полной безопасности!

Разработчик, аудитор или SEO-специалист проведут все необходимые работы у себя на локальном компьютере, а Вы сможете через TeamViewer, Skype или аналогичные сервисы посмотреть на результат, и уже после этого, убедившись в качестве выполненных работ, принять решение доверить ли доступы к Вашему сайту и хостинг панели.

Также Вы можете сохранить конфиденциальность Вашего домена (адрес сайта), так как в Docker Вы можете задать ему произвольное имя!

Как сделать копию Вашего сайта с помощью Docker

Если у Вас есть представление о командной строке (для Windows) и терминале (Mac OS и Linux), и Вы умеете делать импорт-экспорт Баз Данных используя Вашу хостинг панель или PHPMySQLAdmin, то Вы вполне можете сделать это все самостоятельно!

Либо нанять специалиста на фриланс ресурсах (FL.ru и аналогичных), предоставить ему все доступы, а затем проверив работу обязательно сменить все пароли! Как правило специалист затратит от 1,5 до 2 часов. И в итоге передаст Вам готовый архив, который Вы сможете самостоятельно проверить.

Установка Docker на Windows и MacOS

Тут все просто переходим по ссылке (https://www.docker.com/get-started), выбираем версию для своей ОС и следуем инструкции установщика.

В итоге у Вас на компьютере есть Docker.

Делаем копию Базы данных сайта

Для этого Вам нужно будет войти в панель управления хостингом и сделать дамп (бэкап БД) используя либо встроенный в хостинг панель инструмен (можете уточнить в технической поддержке Вашего хостинга), или через PHPMySQLAdmin или аналог, у большинства хостинг провайдеров есть его поддержка.

Так же Вы можете напрямую обратиться в техническую поддержку Вашего хостинг провайдера и попросить сделать дамп БД, специалисты сделают его и предоставят Вам ссылку на скачивание архива дампа БД.

Делаем копию файловой структуры Вашего сайта

Это так же можно сделать через хостинг панель Вашего сайта, перейдя в файловом менеджере хостинг панели к корневому каталогу Вашего сайта (там где находится index.php) и выделив все файлы создать архив, который потом можно будет скачать на Ваш компьютер.

Так же Вы можете напрямую обратиться в техническую поддержку Вашего хостинг провайдера и попросить сделать архив с файловой структурой корневого каталога Вашего сайта. В результате Вам также предоставят ссылку для скачивания.

Создаем копию Вашего сайта используя Docker

Скачав архивы с БД и файловой структурой Вашего сайта Вы можете приступить к созданию виртуальной копии Вашего сайта, для этого нам будет необходимо создать папку (например в Документах или на Рабочем столе) с названием проекта, например my-site (название можете выбрать произвольное, но обязательно используя латинские буквы, а не кириллицу).

Затем в папке my-site Вам нужно создать файл docker-compose.yml в котором будут содержаться данные о том какую версию PHP использует Ваш сайт, какой веб-сервер и БД.

Убедитесь что файл сохранен в кодировке UTF-8

Теперь посмотрим, что нам нужно записать в docker-compose.yml, для этого зайдите в админку Вашего сайта и откройте “отчет о состоянии” он находиться по этой ссылке (для Drupal) http://your-site.ru/admin/reports/status, где your-site.ru - это Ваш домен.

На странице отчета Вы увидите какие версии PHP и БД используются у Вас на хостинге и какой веб-сервер используется, эту информацию Вам нужно будет записать, вот скриншот:

Снимок экрана

Отлично, теперь откроем docker-compose.yml который находиться в папке my-site и напишем инструкцию для Docker и укажем версии PHP, MySQL, Apache.

Внимание - на Вашем хостинге могут использоваться другие веб-серверы БД (например MariaDB, PostgreSQL и прочее) и вместо Apache может использоваться Nginx или другой, в этом случае пишите в комментариях или в мессенджеры (они внизу этой страницы) и я Вас проконсультирую!

docker-compose.yml

version: "3.3"

services:

  # Настроавиваем контейнер для PHP
  php:
    image: wodby/drupal-php:7.4 # Указываеи используемую на Вашем сайте версию PHP, достаточно только две первые цифры, в моем случает это вместо 7.4.3 указвать  7.4
    # вместо my-site можете указать Ваше название
    container_name: my-site-php
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S opensmtpd:25
      DB_HOST: mysql
      DB_PORT: "3306"
      DB_USER: user
      DB_PASSWORD: user
      DB_NAME: database
      DB_DRIVER: mysql
      PHP_FPM_USER: wodby
      PHP_FPM_GROUP: wodby
    volumes:
      - ./www:/var/www/html

  # Настроавиваем контейнер для MySQL
  mysql:
    image: mysql:5.7 # Указываеи используемую на Вашем сайте версию MySQL, достаточно только две первые цифры, в моем случает это вместо 5.7.23-24 указвать  5.7
    # вместо my-site можете указать Ваше название
    container_name: my-site-mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: user
      MYSQL_USER: user
      MYSQL_DATABASE: database
    # Позволяем MySQL хранить Базу данных test в папке db которая автоматически будет создана в папке нашего проекта my-site
    volumes:
      - ./db:/var/lib/mysql


  # Настроавиваем контейнер для PHPMySQLAdmin
  pma:
    image: phpmyadmin/phpmyadmin
    # вместо my-site можете указать Ваше название
    container_name: my-site-pma
    environment:
      PMA_HOST: mysql
      PMA_USER: user
      PMA_PASSWORD: user
      UPLOAD_LIMIT: 1G
      PMA_PORT: "3306"
    labels:
      # вместо my-site можете указать Ваше название но оставьте .local
      - "traefik.http.routers.my-site-pma.rule=Host(`pma.my-site.local`)"
    depends_on:
      - mysql

  apache:
    # Указываеи используемую на Вашем сайте версию Apache, достаточно только первую цифру, в моем случает это вместо 2.2.15 (CentOS) указвать 2
    image: wodby/apache:2
    # вместо my-site можете указать Ваше название
    container_name: my-site-apache
    depends_on:
      - php
    environment:
      APACHE_LOG_LEVEL: debug
      APACHE_BACKEND_HOST: php
      APACHE_VHOST_PRESET: php
      APACHE_DOCUMENT_ROOT: /var/www/html
    volumes:
      - ./www:/var/www/html
    labels:
      # вместо my-site можете указать Ваше название но оставьте .local
      - "traefik.http.routers.my-site-apache.rule=Host(`my-site.local`)"

    # Настройки для Traefik
  traefik:
    image: traefik
    # вместо my-site можете указать Ваше название
    container_name: my-site-traefik
    restart: "always"
    ports:
      - "80:80"
    command: --api.insecure=true --providers.docker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  # Настройки для Portainer
  portainer:
    image: portainer/portainer
    # вместо my-site можете указать Ваше название
    container_name: my-site-portainer
    command: --no-auth -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.http.routers.my-site-portainer.rule=Host(`portainer.my-site.local`)"

Теперь давайте добавим в HOSTS вашего компьютера my-site.local, для этого сделаем следующее:

Для Windows командная строка от имени администратора:

notepad C:\Windows\System32\drivers\etc\hosts

Для MacOS:

sudo nano /private/etc/hosts

Добавим в открывшейся файл строки:

127.0.0.1 my-site.local
127.0.0.1 pma.my-site.local
127.0.0.1 portainer.my-site.local

Проверяем правильно ли создан docker-compose.yml
Для проверки корректности созданного Вами файла docker-compose.yml нужно запустить командную строку (для Windows) или терминал (для MacOS и Linux) и перейти в созданную Вами папку my-site, сделать это можно командой:

cd /путь/до/папки/my-site

И далее выполнить команду:

docker-compose up -d

В результате, если Вы не допустили ошибок, увидите примерно такой результат:

Снимок экрана

Теперь Вам доступны следующие адреса:

http://my-site.local/ - там Вы увидите надпись Forbidden You don't have permission to access this resource, значит веб-сервер работает.
http://pma.my-site.local/ - это доступ к PHPMySQLAdmin.
http://portainer.my-site.local/ - это инструмент для управления Docker, он может понадобиться разработчикам Вашего сайта.

Загружем файлы с Вашего реального сайта в Docker

Для этого распакуем скачанный ранее файловый архив в папку www которая появиться автоматически в Вашей папке my-site. В результате Вы увидите, что-то подобное:

Снимок экрана

Теперь откроем http://my-site.local/, там вы увидите либо сообщение об ошибках или вот такое сообщение The provided host name is not valid for this server. Не пугайтесь, Вам нужно изменить настройки settings.php в папке sites/default/settings.php откройте его и найдите строчку $settings['trusted_host_patterns'] она как правило в самом низу файла и замените её на:

$settings['trusted_host_patterns'] = [
  '^my-site\.local$',
];

Теперь Вы увидите либо на странице http://my-site.local/ сообщение The website encountered an unexpected error. Please try again later. Это значит сайт пока не видит Базу данных, давайте в sites/default/settings.php найдем такую строчку $databases['default']['default'] и заменим её на:

$databases['default']['default'] = array (
  'database' => ‘database’,
  'username' => ‘user’,
  'password' => ‘user’,
  'prefix' => '',
  'host' => ‘mysql’,
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

На странице http://my-site.local/ Вы увидите вот такое сообщение от Drupal

Снимок экрана

Отлично, Ваш сайт теперь видит Базу данных, но не спешите следовать инструкциям по установке Drupal, так как у Вас есть архив с Базой данных Вашего реального сайта!

Давайте её импортируем в Docker.

Загружаем Базу Данных с Вашего реального сайта в Docker

Для этого открываем http://pma.my-site.local/ выбираем Базу Данных “database” и переходим на вкладку “Импорт”, далее нажав на кнопку “Обзор” выбираете файл с дампом (бекапом) Вашей БД с реального сайта и нажимаем кнопку “Вперед” внизу страницы.

Снимок экрана

В результате вы увидите сообщение “Импорт успешно завершен”. Это значит, что теперь по адресу http://http://my-site.local/ Вы увидите полную копию Вашего реального сайта!

Снимок экрана

Осталось совсем немного.

Меняем пароль от админки Вашего сайта

Так как мы осуществили импорт БД с Вашего реального сайта, то логин и пароль от админки сейчас находиться в Docker, это не безопасно, так что давайте их поменяем. Для этого заходим в админку Вашего сайта в Docker’е http://my-site.local/user/login и вводим логин и пароль от Вашего реального сайта.

Перейдите на страницу http://my-site.local/admin/people и отсортируйте список пользователей по времени регистрации и выбрав первого пользователя (или Ваш логин) нажмите на “Редактировать”

Снимок экрана

Там просто меняете (по желанию) логин и пароль, сохраняете изменения! Теперь никто не узнает пароль от Вашего реального сайта!

Пишем инструкцию для разработчиков

И самое простое, создаем в папке my-site текстовый файл README.txt и там пишем логин и пароль (те что Вы поменяли в Docker версии сайта) от админки:

login: ваш_логин
password: ваш_пароль

Где вместо ваш_логин и ваш_пароль указываете те, которые указали ранее.

Снимок экрана

Финал

Теперь для того чтобы передать Ваш сайт разработчикам или другим специалистам, достаточно просто сжать (архивировать) папку my-site и передать её на флешке или через облако, никаких доступов и приватной информацией больше делиться не нужно!

Также не забудьте удалить с Вашего компьютера скачанные Docker’ом файлы, образы, контейнеры, про это я писал в статье Docker для ленивых: Локальная разработка сайтов. Часть 1, в самом конце статьи под заголовком “Как очистить компьютер от скачанных Docker’ом файлов”.

Если у Вас появились вопросы, не стесняйтесь пишите мне!
Оставьте Ваш комментарий