/Inception

:desktop_computer: Docker images with services such as MariaDB, Nginx, WordPress, Redis, FTP-server, Adminer and Portainer in virtual machine

Primary LanguageShell

Inception

Цели данного проекта:

  • Расширение знаний в области системного администрирования с помощью Docker
  • Виртуализация нескольких образов Docker на виртуальной машине

Обязательная часть

Теоретический материал простым языком

  1. A beginner’s guide to Docker — how to create your first Docker application
  2. How to Deploy MariaDB Server to a Docker Container
  3. Руководство по Docker Compose для начинающих
  4. Nginx, Php-Fpm и что это вообще?
  5. MariaDB
  6. Установка WordPress с помощью Docker Compose
  7. Running MariaDB in a Docker Container

Последняя статья пригодится во время сдачи проекта при проверке базы данных (см. Checklist)

Руководство по реализации VirualBox - Debian 10.12 (buster), Containers - debian:buster

  1. Как установить Debian в VirualBox. Полная пошаговая инструкция

Скачать образ debian-10.12.0-amd64-xfce-CD-1.iso можно здесь

Если вы работаете на школьных Mac, не забудьте выбрать папку goinfre

Чтобы увеличить размер окна виртуальной машины в MacOS, либо нажмите на окно виртуальной машины, затем на панели основной ОС в верхей левой части экрана нажмите View->Virtual Screen 1->Scale to 200% (autoscaled output), либо измените разрешение экрана в настройках виртуальной машины (возможно, появление торможения виртуальной машины)

  1. Устанавливаем необходимые для работы программы Vim, Make, Git
  1. Настройка SSH в Debian для работы в терминале в основной ОС

Поле "Адрес гостя" можно оставить пустым

  • При возникновении ошибки "Такое подключение уже существует", удалите файл 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, снова введите пароль пользователя виртуальной машины и создайте новый терминал
  1. Изменим доменное имя в Debian. Открываем файл hosts с правами администратора (root):
sudo vim /etc/hosts

Далее в терминале вводим пароль администратора (root) и в файле hosts меняем localhost на <your_login>.42.fr

Надеюсь, что Вы полностью выполнили пункт 2

  1. Установите Docker CE и Docker Compose на Debian 11/10
  1. Создаем ожидаемую структуру каталогов, указанную в Subject
  2. Создаем Makefile

Сборка проекта начинается с 5 пункта статьи

  1. Создаем файл docker-compose.yml, который будет содержать инструкции, необходимые для запуска и настройки сервисов

Вручную создайте директории, указанные в docker-compose.yml->volumes->device (или пропишите их создание в Makefile). Например:

mkdir -p /home/${USER}/data/db
mkdir -p /home/${USER}/data/wp
  1. MariaDB

host_name должен быть либо %, либо Вы должны задать host_name принудительно и использовать его имя

  • Создаем файл 50-server.cnf в директории srcs/requirements/mariadb/conf
  • Создаем .dockerignore и Dockerfile — файл Docker, который будет содержать инструкции, необходимые для создания окружения сервера

Так как контейнер Docker работает полностью изолированно от хост-среды, то, чтобы получить доступ к среде (файлам) контейнера, необходимо в консоли ввести команду:

docker exec -it <container_name> bash
  1. Nginx
  • Создаем конфигурационный файл, который описывает виртуальный хост, в директории srcs/requirements/nginx/conf
  • Пишем скрипт для создания самозаверяющего сертификата для сервера в директории srcs/requirements/nginx/tools
  • Создаем .dockerignore и Dockerfile. В Dockerfile задаем базовый (родительский) образ, прописываем выполнение команд для установки пакетов nginx и openssl в контейнер, указываем на необходимость открыть порт 443, прописываем копирование конфигурационного файла default в директорию /etc/nginx/sites-enabled и скрипта в любую директорию (например, /var/www/) и описываем команду bash со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен
  1. 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 со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен
  1. Запустите контейнеры с помощью Makefile и зайдите на страницу WordPress в браузере своей виртуальной машины в VirtualBox по адресу своего хоста <your_login>.42.fr

Если все работает верно, то при первом входе на сайт появится предупреждение. Нажмите "Дополнительно...", затем спуститесь вниз и нажмите "Принять риск и продолжить"

VirtualBox_Debian Clone_26_05_2022_13_56_48

Ваша тема WordPress может отличаться от темы, представленной на данном скриншоте

Бонусная часть

Список бонусов:

  • Настройте кеш Redis для своего веб-сайта WordPress, чтобы правильно управлять кешем.
  • Настройте контейнер FTP-сервер, указывающий на том вашего сайта WordPress.
  • Создайте простой статический веб-сайт на выбранном вами языке, кроме PHP (да, PHP исключен!). Например, сайт-витрина или сайт для представления вашего резюме.
  • Настроить Adminer.
  • Настройте сервис по вашему выбору, который вы считаете полезным. Во время защиты вам придется обосновать свой выбор.

Полезные источники

  1. Установка Redis средствами Docker
  2. Настройка Redis для WordPress
  3. Установка и настройка Vsftpd в linux Debian с загрузкой файлов в каталог пользователя
  4. WordPress (FPM Edition) - Docker
  5. Установка Docker Portainer