Цели данного проекта:
- Расширение знаний в области системного администрирования с помощью Docker
- Виртуализация нескольких образов Docker на виртуальной машине
- A beginner’s guide to Docker — how to create your first Docker application
- How to Deploy MariaDB Server to a Docker Container
- Руководство по Docker Compose для начинающих
- Nginx, Php-Fpm и что это вообще?
- MariaDB
- Установка WordPress с помощью Docker Compose
- Running MariaDB in a Docker Container
Последняя статья пригодится во время сдачи проекта при проверке базы данных (см. Checklist)
Скачать образ debian-10.12.0-amd64-xfce-CD-1.iso можно здесь
Чтобы увеличить размер окна виртуальной машины в MacOS, либо нажмите на окно виртуальной машины, затем на панели основной ОС в верхей левой части экрана нажмите View->Virtual Screen 1->Scale to 200% (autoscaled output), либо измените разрешение экрана в настройках виртуальной машины (возможно, появление торможения виртуальной машины)
- Для установки Git достаточно выполнить пункт статьи "Installing Git with Default Packages"
- Включить «sudo» для учетной записи пользователя в Debian
- Достаточно выполнить пункты статьи "Установка SSH в Debian" и "Настройка сервера SSH" (значение порта менять необязательно)
- Не забудьте пробросить порт для SSH в VirtualBox
Поле "Адрес гостя" можно оставить пустым
- При возникновении ошибки "Такое подключение уже существует", удалите файл known_hosts в директории /Users/$USER/.ssh:
rm -rf /Users/$USER/.ssh/known_hosts
- Для подключения Visual Studio Code к виртуальной машине запустите виртуальную машину. Откройте Visual Studio Code на основной ОС. Слева на панели VS Code выберите Extensions (Расширения) и найдите и скачайте расширение "Remote - SSH". Затем в VS Code откройте меню с помощью сочетания клавиш Command+Shift+P, введите "Remote-SSH: Connect to Host..." и нажмите Enter. Там же введите <your_login>@localhost:<your_port>, затем введите пароль пользователя виртуальной машины, откройте необходимую папку через Explorer->Open Folder слева на панели VS Code, снова введите пароль пользователя виртуальной машины и создайте новый терминал
- Изменим доменное имя в Debian. Открываем файл hosts с правами администратора (root):
sudo vim /etc/hosts
Далее в терминале вводим пароль администратора (root) и в файле hosts меняем localhost на <your_login>.42.fr
Надеюсь, что Вы полностью выполнили пункт 2
- Тестировать установку Docker Сompose пока необязательно
- Советую клонировать виртуальную машину в Oracle VM VirtualBox (на случай непредвиденных ошибок)
- Создаем ожидаемую структуру каталогов, указанную в Subject
- Создаем Makefile
Сборка проекта начинается с 5 пункта статьи
- Создаем файл docker-compose.yml, который будет содержать инструкции, необходимые для запуска и настройки сервисов
Вручную создайте директории, указанные в docker-compose.yml->volumes->device (или пропишите их создание в Makefile). Например:
mkdir -p /home/${USER}/data/db mkdir -p /home/${USER}/data/wp
- Создаем базу данных в директории srcs/requirements/mariadb/tools
host_name должен быть либо %, либо Вы должны задать host_name принудительно и использовать его имя
- Создаем файл 50-server.cnf в директории srcs/requirements/mariadb/conf
- Создаем .dockerignore и Dockerfile — файл Docker, который будет содержать инструкции, необходимые для создания окружения сервера
Так как контейнер Docker работает полностью изолированно от хост-среды, то, чтобы получить доступ к среде (файлам) контейнера, необходимо в консоли ввести команду:
docker exec -it <container_name> bash
- Создаем конфигурационный файл, который описывает виртуальный хост, в директории srcs/requirements/nginx/conf
- Пишем скрипт для создания самозаверяющего сертификата для сервера в директории srcs/requirements/nginx/tools
- Создаем .dockerignore и Dockerfile. В Dockerfile задаем базовый (родительский) образ, прописываем выполнение команд для установки пакетов nginx и openssl в контейнер, указываем на необходимость открыть порт 443, прописываем копирование конфигурационного файла default в директорию /etc/nginx/sites-enabled и скрипта в любую директорию (например, /var/www/) и описываем команду bash со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен
- WordPress + настраиваем работу php-fpm
- Создаем файл директив пула www.conf, позволяющий запускать несколько «пулов» дочерних процессов и иметь разные конфигурации, в директории srcs/requirements/wordpress/conf
- Создаем файл конфигурации wp-config.php, который является частью всех автономных сайтов WordPress, в директории srcs/requirements/wordpress/tools
- Создаем скрипт в директории srcs/requirements/wordpress/tools. Скрипт может устанавливать интерфейс командной строки для WordPress и создавать двух пользователей, один из которых является администратором Вашей базы данных WordPress
Имя пользователя администратора не может содержать admin/Admin или administrator/Administrator (например, admin, administrator, Administrator, admin-123, и так далее) (см. Subject)
- Создаем .dockerignore и Dockerfile. В Dockerfile задаем базовый (родительский) образ, прописываем выполнение команд для установки пакетов php7.3, php-mysqli, php-fpm, curl и sendmail с флагом -y в контейнер, указываем на необходимость открыть порт 9000, прописываем копирование конфигурационного файла www.conf в директорию /etc/php/7.3/fpm/pool.d и скрипта в любую директорию (например, /var/www/) и описываем команду bash со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен
- Запустите контейнеры с помощью Makefile и зайдите на страницу WordPress в браузере своей виртуальной машины в VirtualBox по адресу своего хоста <your_login>.42.fr
Если все работает верно, то при первом входе на сайт появится предупреждение. Нажмите "Дополнительно...", затем спуститесь вниз и нажмите "Принять риск и продолжить"
Ваша тема WordPress может отличаться от темы, представленной на данном скриншоте
Список бонусов:
- Настройте кеш Redis для своего веб-сайта WordPress, чтобы правильно управлять кешем.
- Настройте контейнер FTP-сервер, указывающий на том вашего сайта WordPress.
- Создайте простой статический веб-сайт на выбранном вами языке, кроме PHP (да, PHP исключен!). Например, сайт-витрина или сайт для представления вашего резюме.
- Настроить Adminer.
- Настройте сервис по вашему выбору, который вы считаете полезным. Во время защиты вам придется обосновать свой выбор.