PostgreSQL: Відкрита, потужна та багата на функції система управління реляційними базами даних (RDBMS), ідеально підходить для роботи з великими даними.
Сучасна розробка веб-додатків вимагає ефективності, масштабованості та портативності.
У контексті розробки Python-додатків з використанням фреймворку Flask, використання надійної бази даних, такої як PostgreSQL, в поєднанні з оркестрацією контейнерів за допомогою Docker Compose та визначенням образів через Dockerfile, може значно підвищити продуктивність і якість додатків.
Ця стаття розгляне, як інтегрувати ці три технології для створення оптимального середовища розробки.
https://www.youtube.com/@halovina
Чому варто вибрати Flask, PostgreSQL і Docker?
- Flask: Легковаговий і гнучкий Python мікрофреймворк, ідеально підходить для побудови простих і складних веб-додатків з повним контролем.
- PostgreSQL: Відкрита, потужна та багата на функції система управління реляційними базами даних (RDBMS), ідеально підходить для роботи з великими даними.
- Docker: Платформа контейнеризації, яка дозволяє розробникам пакувати додатки та їх залежності в портативні одиниці, звані контейнерами.
- Docker Compose: Інструмент для визначення та управління багатоконтейнерними додатками Docker.
- Dockerfile: Текстовий файл, що містить інструкції для побудови Docker образу.
Переваги цього поєднання
- Консистентність середовища: Забезпечує однакову роботу додатків в різних середовищах (розробка, тестування, продакшн).
- Ізоляція: Запобігає конфліктам залежностей між проектами.
- Масштабованість: Полегшує масштабування додатків шляхом додавання контейнерів.
- Портативність: Дозволяє запускати додатки на різних платформах, що підтримують Docker.
- Легке управління залежностями: Всі залежності, включаючи PostgreSQL, керуються всередині контейнерів.
Кроки реалізації
a) Структура проекту
flask-postgresql-docker/
├── app/
│ ├── __init__.py
│ ├── routes.py
│ └── models.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
b) app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL') or 'postgresql://user:password@db:5432/mydatabase'
db = SQLAlchemy(app)
from app import routes, models
c) 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)
def __repr__(self):
return '' % self.username
d) Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
e) docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
environment:
- DATABASE_URL=postgresql://user:password@db:5432/mydatabase
db:
image: postgres:14
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
f) requirements.txt
Flask
Flask-SQLAlchemy
psycopg2-binary
Пояснення
- docker-compose.yml визначає два сервіси: web (Flask додаток) та db (PostgreSQL).
- dependson_ гарантує, що база даних буде працювати до запуску додатку.
volumes використовується для збереження даних бази даних. - Змінні середовища використовуються для конфігурації бази даних.
Висновок
Інтегруючи Flask, PostgreSQL, Docker Compose і Dockerfile, ви можете створити ефективне, портативне та масштабоване середовище для розробки.
Цей підхід особливо корисний для складних проектів, які вимагають консистентності в різних середовищах.
Дотримуючись вказаних кроків, ви можете почати оптимізувати ваш робочий процес розробки на Flask.
Перекладено з: Optimize Flask Development: Leverage PostgreSQL and Docker Compose