Skip to content

Deploying a Docker site on the Wordpress engine with the Mariadb database and the Nginx web server in separate containers.

Notifications You must be signed in to change notification settings

luta-wolf/inception

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 

Repository files navigation

Inception

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

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

Subject

subject

Общие рекомендации

Этот проект должен быть выполнен на виртуальной машине.

  • Все файлы, необходимые для настройки вашего проекта, должны быть помещены в папку srcs.
  • Также требуется Makefile, который должен находиться в корне вашего каталога. Он должен настроить все ваше приложение (т. е. он должен создать образы Docker с помощью docker-compose.yml).
  • Этот предмет требует применения на практике понятий, которые, в зависимости от вашего образования, вы, возможно, еще не усвоили. Поэтому мы советуем вам без колебаний прочитать много документации, связанной с использованием Docker, а также все, что вы найдете полезным для выполнения этого задания.

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

Этот проект заключается в том, что вы настроили небольшую инфраструктуру, состоящую из различных сервисов по определенным правилам. Весь проект должен быть выполнен в виртуальной машине. Вы должны использовать docker compose. Каждый образ Docker должен иметь то же имя, что и соответствующая служба. Каждая служба должна работать в выделенном контейнере. Для повышения производительности контейнеры должны быть собраны либо из предпоследней стабильной версии Alpine, либо из Debian. Выбор за вами. Вы также должны написать свои собственные Dockerfiles, по одному на каждую службу. Файлы Dockerfile должны вызываться в вашем файле docker-compose.yml вашим Makefile. Это означает, что вы должны сами создавать образы Docker для своего проекта. Затем запрещается извлекать готовые образы Docker, а также использовать такие сервисы, как DockerHub (Alpine/Debian исключены из этого правила).

Затем необходимо настроить:

  • Контейнер Docker, содержащий NGINX только с TLSv1.2 или TLSv1.3.
  • Контейнер Docker, содержащий WordPress + php-fpm (он должен быть установлен и настроен) только без nginx.
  • Контейнер Docker, содержащий только MariaDB без nginx.
  • Том, содержащий вашу базу данных WordPress.
  • Второй том, содержащий файлы вашего веб-сайта WordPress.
  • Docker-сеть, которая устанавливает соединение между вашими контейнерами.

Ваши контейнеры должны быть перезапущены в случае сбоя.

Важно помнить

  • Контейнер Docker — это не виртуальная машина. Таким образом, не рекомендуется использовать какой-либо хакерский патч, основанный на «tail -f» и т. д., при попытке запустить его. Прочтите о том, как работают демоны и стоит ли их использовать.
  • Конечно, использование network:host или --link или links: запрещено. Строка network должна присутствовать в вашем файле dockercompose.yml. Ваши контейнеры не должны запускаться командой, запускающей бесконечный цикл. Таким образом, это также относится к любой команде, используемой в качестве точки входа или используемой в сценариях точки входа. Ниже приведены несколько запрещенных хакерских патчей: tail -f, bash, sleep infinity, while true.
  • Прочтите о PID 1 и лучших методах написания файлов Dockerfile.
  • В вашей базе данных WordPress должно быть два пользователя, один из которых является администратором. Имя пользователя администратора не может содержать «admin/Admin» или «admin/Administrator» (например, «admin», «admin», «Administrator», «admin-123» и т. д.).
  • Ваши тома будут доступны в папке /home/login/data на хост-компьютере с помощью Docker. Логин, естественно, придется заменить на свой.
  • Чтобы упростить задачу, вы должны настроить свое доменное имя так, чтобы оно указывало на ваш локальный IP-адрес. Это доменное имя должно быть login.42.fr. Опять же, вы должны использовать свой собственный логин. Например, если ваш логин wil, wil.42.fr будет перенаправлять на IP-адрес, указывающий на сайт wil.
  • Последний тег запрещен.
    • В ваших файлах Dockerfile не должно быть пароля.
    • Обязательно использовать переменные окружения.
    • Кроме того, настоятельно рекомендуется использовать файл .env для хранения переменных среды. Файл .env должен находиться в корне каталога srcs.
    • Ваш контейнер NGINX должен быть единственной точкой входа в вашу инфраструктуру только через порт 443, используя протокол TLSv1.2 или TLSv1.3.

Примерная диаграмма ожидаемого результата:

image

Теоретический материал

Определения

  • Docker – это технология, которая решает проблемы развертывания и масштабирования путем отделения приложений от зависимостей инфраструктуры. Она решает эти проблемы благодаря применению контейнеров, позволяющих упаковать приложение со всеми его зависимостями, включая структуру каталогов, метаданные, пространство процессов, номера сетевых портов и т. д. Приложение, упакованное в контейнер, запускается одинаково на любых машинах и в любых окружениях.
  • Docker-compose — это система сборки, запуска и управления множеством контейнеров. Docker-compose не входит в единый пакет поставки Docker и устанавливается отдельно. Для сборки кластера контейнеров используется docker-compose.yml.
  • Docker-compose.yml — конфигурационный файл в YAML-формате, описывающий логику запуска и взаимодействия контейнеров между собой и внешним миром. В сущности инструкции заложенные в docker-compose.yml по логике работы идентичны ключам команды docker run.
  • Dockerfile — это текстовый файл конфигурации, написанный с использованием специального синтаксиса. В нем описываются пошаговые инструкции по всем командам, которые необходимо выполнить для сборки образа Docker. Файл создаётся по принципу «одна строка — одна команда».
  • Daemon - фоновая служба на хосте, которая отвечает за создание, запуск и уничтожение контейнеров.
  • Client - утилита командной строки в Docker для управления демоном. Любое взаимодействие с контейнером проходит через Daemon.
  • Image - неизменяемый файл (образ), из которого можно неограниченное количество раз развернуть контейнер. Образ — это инертный, неизменяемый файл, который по сути является снимком контейнера. Образы создаются с помощью команды build, и они создают контейнер при запуске с помощью команды run. Образы хранятся в реестре Docker, таком как Registry.hub.docker.com. Поскольку они могут стать довольно большими, образы разработаны так, чтобы состоять из слоев других образов, что позволяет отправлять минимальный объем данных при передаче изображений по сети.
  • Container - запущенное приложение, которое развернули из образа. Используя метафору программирования, если изображение — это класс, то контейнер — это экземпляр класса — объект времени выполнения. Это легкие и портативные инкапсуляции среды, в которой можно запускать приложения.
  • Registry - служба в Docker, выполняющая функции репозитория (хранилища). Позволяет следить за версиями образов, создавать приватные репозитории.
  • Docker Desktop - приложение, позволяющее локально собирать, выполнять и тестировать контейнеры. Работает на Windows и macOS.
  • Docker volumes - тома для постоянного хранения информации. По умолчанию в Docker папки хранилищ создаются на хост-машине, но предусмотрена и возможность подключения удаленных хранилищ. Использование томов позволяет лучшим образом настроить хранение данных.
  • Docker vs virtual machine - основное различие между контейнерами и виртуальными машинами заключается в том, что контейнеры охватывают только уровень приложения и полагаются на базовое ядро операционной системы, в случае виртуальной машины создается новый экземпляр операционной системы.

image

Гайды

Работа с вирутальной машиной из VC Code

  1. Установи плагин Remote - SSH
  2. Окрой командную сроку (нажать ⇧``⌘``P или Shift + Command + P на школьных маках)
  3. Введи / выбери Remote-SSH: Add New SSH Host
  4. Пишем соединение по ssh ssh root@localhost -p 42
  5. Выбираем /Users/einterdi/.ssh/config и жмакаем на кнопку Подключиться
  6. В нижнем левом углу VS Code нажимаем на зеленый значек соединения
  7. В открывшейся командной строки выбирай Connect to Host, выбери localhost, введи пароль (от root пользователя виртуалки) и работай

Команды

Команды docker работают из любой директории

  • docker --help - показать все доступные команды
  • docker info - информация по докерам
  • docker ps - вывести список докеров
  • docker images - вывести образы и их размеры
  • docker network ls - вывести все сетевые соединения
  • docker volume ls - вывести все volume
  • docker exec -it <имя_или_id_контейнера> /bin/sh - зайти в контейнер (ядро alpine)
  • docker exec -it <имя_или_id_контейнера> /bash - зайти в контейнер (ядро debian buster)
  • docker stop <имя_или_id_контейнера> - останавливает выбранный контейнер
  • docker start <имя_или_id_контейнера> - запускает выбранный контейнер
  • docker restart <имя_или_id_контейнера> - перезапускает выбранный контейнер
  • docker exec -it mariadb mysql - позволяет зайти в бд MariaDB под пользователем
  • docker exec -it mariadb mysql -u root - позволяет зайти в бд MariaDB под root
    • show databases; - просмотр бд

Команды docker-compose работают из директории, где находится файл docker-compose.yml

  • docker-compose --help - показать все доступные команды
  • docker-compose ps - вывести список докеров
  • docker-compose up -d - запускает контейнеры по образам
  • docker-compose stop - остановить контейнеры
  • docker-compose down - остановить и удалить контейнеры, сети, образы и тома
  • docker-compose --build - создает образы из Dockerfile
  • docker-compose images вывести образы и их размеры
  • docker-compose kill <имя_или_id_контейнера> - останавливает выбранный контейнер

Бонусы

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

Устанавливаем его из плагинов wordpress image 2. Vsftpd

Из виртуальной машины запускаем приложение FileZilla

Host: 127.0.0.1
Username: ftpuser
Password: ftppass
Port: 21

image

3. Adminer
  • http://localhost:8080 - запуск adminer

image

4. Website
  • http://localhost/

image

  1. Portainer

Запускаем контейнер portainer отдельно от остальных:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1

https://localhost:9443

Login: admin
Password: einterdi

image

Защита

checklist

Полезные материалы

  • Docker Hub - популярный публичный репозиторий, куда вы можете загружать свои образы (images) для совместной работы с командой, заказчиками или другими пользователями.
  • Alpine Linux - дистрибутив Linux, ориентированный на безопасность, легковесность и нетребовательность к ресурсам.

About

Deploying a Docker site on the Wordpress engine with the Mariadb database and the Nginx web server in separate containers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages