Оптимізуйте розробку Flask: Використовуйте PostgreSQL та Docker Compose

PostgreSQL: Відкрита, потужна та багата на функції система управління реляційними базами даних (RDBMS), ідеально підходить для роботи з великими даними.

pic

Сучасна розробка веб-додатків вимагає ефективності, масштабованості та портативності.

У контексті розробки Python-додатків з використанням фреймворку Flask, використання надійної бази даних, такої як PostgreSQL, в поєднанні з оркестрацією контейнерів за допомогою Docker Compose та визначенням образів через Dockerfile, може значно підвищити продуктивність і якість додатків.

Ця стаття розгляне, як інтегрувати ці три технології для створення оптимального середовища розробки.

https://www.youtube.com/@halovina

Чому варто вибрати Flask, PostgreSQL і Docker?

  1. Flask: Легковаговий і гнучкий Python мікрофреймворк, ідеально підходить для побудови простих і складних веб-додатків з повним контролем.
  2. PostgreSQL: Відкрита, потужна та багата на функції система управління реляційними базами даних (RDBMS), ідеально підходить для роботи з великими даними.
  3. Docker: Платформа контейнеризації, яка дозволяє розробникам пакувати додатки та їх залежності в портативні одиниці, звані контейнерами.
  4. Docker Compose: Інструмент для визначення та управління багатоконтейнерними додатками Docker.
  5. Dockerfile: Текстовий файл, що містить інструкції для побудови Docker образу.

Переваги цього поєднання

  1. Консистентність середовища: Забезпечує однакову роботу додатків в різних середовищах (розробка, тестування, продакшн).
  2. Ізоляція: Запобігає конфліктам залежностей між проектами.
  3. Масштабованість: Полегшує масштабування додатків шляхом додавання контейнерів.
  4. Портативність: Дозволяє запускати додатки на різних платформах, що підтримують Docker.
  5. Легке управління залежностями: Всі залежності, включаючи 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

Пояснення

  1. docker-compose.yml визначає два сервіси: web (Flask додаток) та db (PostgreSQL).
  2. dependson_ гарантує, що база даних буде працювати до запуску додатку.
    volumes використовується для збереження даних бази даних.
  3. Змінні середовища використовуються для конфігурації бази даних.

Висновок

Інтегруючи Flask, PostgreSQL, Docker Compose і Dockerfile, ви можете створити ефективне, портативне та масштабоване середовище для розробки.

Цей підхід особливо корисний для складних проектів, які вимагають консистентності в різних середовищах.

Дотримуючись вказаних кроків, ви можете почати оптимізувати ваш робочий процес розробки на Flask.

Перекладено з: Optimize Flask Development: Leverage PostgreSQL and Docker Compose

Leave a Reply

Your email address will not be published. Required fields are marked *