2020-05, Проверочная работа №3
Постановка задачи
На основании Docker и Docker Compose разработайте систему для формирования и публикации статического сайта с помощью статического генератора сайтов Jekyll.
Система должна предоставлять:
- Возможность запустить встроенный веб-сервер Jekyll в Docker-контейнере для проверки наполнения сайта.
- Возможность запустить контейнер с веб-сервером Nginx, который будет раздавать собранный с помощью Jekyll статический сайт в качестве финальной публикации.
Работа с Jekyll
Jekyll — это генератор статических сайтов, реализованный как джем Ruby. Для его использования на компьютере должен быть установлен интерпретатор языка и поставлена соответствующий джем.
Вы можете следовать использовать следующий шаблон приложения: https://github.com/amvasilyev/2020-unix-jekyll-repository. После клонирования репозитория необходимо поставить зависимости:
bundle install
Запуск встроенного сервера
Для запуска встроенного веб-сервера необходимо выполнить:
bundle exec jekyll serve --host 0.0.0.0 --port 4000
После этого можно открыть сайт по адресу http://localhost:4000.
Создание статического сайта
Для формирования финальной версии сайта необходимо выполнить:
bundle exec jekyll build
Результат сборки будет расположен в каталоге _site
. Данные файлы можно перемещать в любой каталог.
У каждой из задач есть множество параметров, которые можно использовать, но представленных должно хватить для решения задачи.
Предложения по технической реализации
- Склонируйте репозиторий примера сайта Jekyll.
- Добавьте в корне проекта файл
Dockerfile
. - В Dockerfile сформируйте описание базового образа, в котором можно запускать Jekyll-команды из текущего проекта. Назовём его
jekyll-base
.- В качестве базового образа используйте один из официальных Ruby-образов.
- Добавьте в него Gemfile и Gemfile.lock и убедитесь, что все зависимости успешно устанавливаются с помощью Bundler.
- Укажите в образе каталог
/app
в качестве хранилища и рабочего каталога. - В качестве команды для запуска укажите
jekyll serve
.
- На основании этого образа создайте сборочный образ, с помощью которого будет собираться финальное приложение. Синтаксис можно посмотреть по ссылке https://docs.docker.com/develop/develop-images/multistage-build/#use-a-previous-stage-as-a-new-stage. Назовём его
jekyll-build
.- Скопируйте внутрь данного образа всё содержимое приложения в каталог
/build
. - В данном каталоге выполните сборку сайта с помощью
jekyll build
.
- Скопируйте внутрь данного образа всё содержимое приложения в каталог
- Добавьте описание образа для раздачи статического содержимого. Назовём его
publish
.- В качестве базового образа используйте Nginx-контейнер.
- Скопируйте из образа
jekyll-build
файлы для раздачи сайта. - Проверьте, что данные файлы
nginx
сможет раздать.
- Добавьте в корне проекта файл
docker-compose.yml
. В нём необходимо описать 2 службы:- Служба для разработки, основанная на
jekyll-base
-образе. - Служба для развёртывания, основанная на
publish
-образе.
- Служба для разработки, основанная на
Финальный результат
После всей этой реализации пользователь должен иметь возможность:
- Запустить службу для разработки и проверить сайт:
- В корне проекта вызвать
docker-compose up devel
. - Открыть в браузере http://localhost:4000.
- В корне проекта вызвать
- Запустить службу для развёртывания сайта:
- В корне проекта вызывать
docker-copmose up deploy --build
. - Открыть в браузере http://localhost:8080.
- В корне проекта вызывать