Git Product home page Git Product logo

openshift-homework1's Introduction

Домашнее задание #1: Docker

Формулировка

В рамках первого домашнего задания, требуется для приложения TODO List собрать backend и frontend части и запустить их в docker.

  • Приложение реализует простейший TODO list:
    • добавить заметку;
    • удалить заметку;
    • вывести все заметки.
  • Backend написан на Kotlin + Spring, frontend написан на Typescript + React/Redux.
  • Backend запускается на порту 8080, профиль docker.
  • Backend для хранения данных использует PostgreSQL 13.
  • Frontend мапится наружу на порт 3000, запросы к backend пробрасываются через proxy_pass http://backend-service:8080.

Требования

  • Для успешного выполнения задания нужно установить на host машину:
    • git;
    • OpenJDK 11;
    • Docker.
  • Код backend'а и frontend'а хранится в отдельных репозиториях, они подключаются через Git Modules.
  • Нужно реализовать двухэтапную сборку приложений, сборку контейнеров описать в файлах backend.Dockerfile и frontend.Dockerfile.
  • В файле test.sh дописать необходимые шаги:
    • createNetworks;
    • createVolume;
    • runPostgres;
    • runBackend;
    • runFrontend.
  • Для хранения данных в Postgres нужно создать Volume.
  • Внешний маппинг портов:
    • backend 8080:8080;
    • frontend 3000:80.
  • Нужно создать две разных сети (driver=bridge):
    • для взаимодействия между backend и PostgreSQL;
    • для взаимодействия backend и frontend (для этой сети указать alias для контейнера backend backend-service, т.к. nginx обращается через proxy_pass к http://backend-service:8080).
  • Docker compose использовать нельзя, все ресурсы описываются через docker.
  • Контейнеры называть backend, frontend, postgres.
  • В результате реализации всех описанных выше шагов, должна быть возможность работать TODO list с localhost:3000, т.е. можно открыть страницу в браузере и проверить работу.
  • Для автоматизированной проверки работоспособности выполняется запрос из контейнера frontend в контейнер backend по имени сервиса.

Пояснения

  • Для сборки затяните backend-todo-list и backend-todo-list с помощью команды git submodule update --init --recursive.
  • Backend нужно запустить с профилем docker. Для этого требуется внутрь контейнера пробросить переменную среды SPRING_PROFILES_ACTIVE=docker.
  • Для очистки ресурсов можно использовать cleanup.sh, он удаляет контейнеры, сети, volumes.
  • Для backend нужно в Postgres создать БД todo_list и пользователя program:test. Здесь можно использовать два варианта решения:
    • Можно создать пользователя и БД с помощью переменных среды POSTGRES_* при старте контейнера Postgres. Это рабочий вариант, но созданный пользователь будет иметь права SUPERUSER, что плохо с точки зрения безопасности.
    • Обычно для работы с приложением создают отдельного пользователя. В образе Postgres есть возможность использовать скрипты инициализации для первого страта контейнера (блок Initialization scripts в документации). В backend есть пример такого запуска контейнера Postgres с помощью docker-compose.yml: при старте контейнера создается пользователь с правами SUPERUSER, а в 10-create-user-and-db.sql создается отдельная БД и пользователь для нее. Это нужно, чтобы программа работала с пользателем, ограниченным в правах.

openshift-homework1's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.