BOP - The Future of Creative Engineers -


← ホームに戻る

Flask Backend Startup

📏 ディレクトリ構成

.
├── app/
│   ├── __init__.py
│   ├── config.py
│   ├── models/
│   │   ├── __init__.py
│   ├── services/
│   │   ├── __init__.py
│   ├── routes/
│   │   ├── __init__.py
│   ├── schemas/
│   │   ├── __init__.py
├── migrations/
│   └── (Alembicマイグレーションファイル flask db init後に自動生成)
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env
└── run.py

📝 requirements.txt

Flask
Flask-SQLAlchemy
Flask-Migrate
psycopg2-binary

📁 .env

FLASK_APP=run.py
FLASK_ENV=development
DATABASE_URL=postgresql://postgres:password@db:5432/postgr

🐳 Dockerfile

FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "run.py"]

🐳 docker-compose.yml

version: '3'
services:
  db:
    image: postgres:14
    container_name: backend_db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data

  web:
    build: .
    container_name: backend_web
    ports:
      - "8000:5000"
    depends_on:
      - db
    volumes:
      - .:/app
    env_file:
      - .env

volumes:
  db_data:

⚙️ app/config.py

import os

class Config:
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

🌐 app/routes/init.py

# ⬇️⬇️⬇️ routes ファイルをここへインポート
# from app.models.**** import ****_bp

def register_bp(app):
    # ⬇️⬇️⬇️ ここでBlueprintを登録
    # app.register_blueprint(****_bp)
    pass

🔵 app/models/init.py

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from app.config import Config

db = SQLAlchemy()

def setup_db(app):
    app.config.from_object(Config)
    db.init_app(app)
    migrate = Migrate()
    migrate.init_app(app, db)

🔴 app/init.py

from flask import Flask
from app.models import setup_db
from app.routes import register_bp


def create_app():
    app = Flask(__name__)
    setup_db(app)
    register_bp(app)
    return app

🏃 run.py

from app import create_app


if __name__ == "__main__":
    app = create_app()
    app.run(host="0.0.0.0", debug=True)

Alembic(Migration)

# 初回にターミナル上で実行
flask db init

# モデルを作成したらコミット実行
flask db migrate -m "Create xxx table"

# DBに適用実行
flask db upgrade