Ласкаво просимо на фінальний рівень курсу по Docker!
На цьому рівні ми зберемо докупи всі набуті знання та навички.
У лекціях можуть траплятися незнайомі вам мови програмування або технології. Вам доведеться прописувати порти або додавати назви методів – і все це на основі готового коду, де вже зроблено 99% роботи.
Не хвилюйтесь, якщо щось здасться незнайомим – це зроблено навмисно для прокачування навичок: "я цього не знаю, але можу швидко розібратися".
1.1 Постановка задачі
Давай створимо невеликий багатоконтейнерний додаток і покроково розберемо весь процес розробки: від постановки задачі до демонстрації готового продукту.
Мета: створити багатоконтейнерний додаток для управління задачами, який дозволяє користувачам створювати, редагувати, видаляти задачі та призначати їх іншим користувачам. Додаток складатиметься з трьох основних компонентів: фронтенду на ReactJS, бекенду на Python (Flask) і бази даних PostgreSQL.
Основні задачі:
- Визначити функціональні вимоги для кожного компонента додатку.
- Обрати використовувані технології та інструменти.
- Підготувати середовище для розробки.
1.2 Визначення функціональних вимог
Функціональні вимоги для застосунку управління завданнями:
- Реєстрація та авторизація користувачів:
- Користувач може зареєструватися в системі.
- Користувач може авторизуватися в системі.
- Управління завданнями:
- Користувач може створювати завдання.
- Користувач може редагувати завдання.
- Користувач може видаляти завдання.
- Користувач може переглядати список завдань.
- Користувач може призначати завдання іншим користувачам.
- Перегляд та фільтрація завдань:
- Користувач може фільтрувати завдання за статусом (виконані/невиконані).
- Користувач може переглядати завдання, призначені іншим користувачам.
1.3 Визначення використовуваних технологій та інструментів
Для реалізації цього застосунку будуть використані наступні технології та інструменти:
- Frontend:
- ReactJS: бібліотека для створення інтерфейсів користувача.
- Axios: бібліотека для виконання HTTP-запитів.
- Backend:
- Python: мова програмування для створення серверної частини.
- Flask: веб-фреймворк для створення REST API.
- SQLAlchemy: ORM для взаємодії з базою даних.
- Database:
- PostgreSQL: реляційна база даних для зберігання інформації про користувачів та завдання.
- Контейнеризація та оркестрація:
- Docker: платформа для контейнеризації застосунків.
- Docker Compose: інструмент для керування багатоконтейнерними застосунками.
1.4 Підготовка середовища для розробки
Для успішного виконання проєкту необхідно налаштувати середовище для розробки і впевнитися, що всі необхідні інструменти встановлені.
Кроки для підготовки середовища:
- Встановлення Docker:
- Якщо ти ще цього не зробив, повернись до лекції 4 першого рівня або слідуй інструкціям на офіційному сайті Docker.
- Встановлення Docker Compose:
- Якщо Docker Compose ще не встановлено, звернись до лекції 2 рівня 4 або слідуй інструкціям на офіційному сайті Docker Compose.
- Створення структури проєкту:
- Створи директорію для проєкту і основні піддиректорії для кожного сервісу:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- Ініціалізація проєкту:
- У директорії frontend ініціалізуй новий ReactJS проєкт:
cd frontend
npx create-react-app .
cd ..
• У директорії backend створи структуру для Python/Flask додатку:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• У директорії database створи Dockerfile для PostgreSQL (якщо необхідно):
cd database
touch Dockerfile
cd ..
1.5 Приклад вмісту файлів:
Файл backend/app/__init__.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
Файл backend/app/models.py:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Файл backend/app/routes.py:
from app import app
@app.route('/')
def index():
return "Привіт, Task Management App!"
Файл backend/run.py:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
Файл backend/requirements.txt:
Flask
Flask-SQLAlchemy
psycopg2-binary
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ