Guia de Inicialização e Configuração do Projeto YTU-CE

1. Estrutura do Projeto

O repositório YTU-CE é organizado para separar a aplicação, configurações, infraestrutura e scripts auxiliares. Abaixo está uma visão geral das pastas e arquivos principais:

YTU-CE/
├── .dockerignore
├── .env.example
├── docker-compose.yml
├── manage.py
├── pyproject.toml
├── src/
│   ├── __init__.py
│   ├── extensions.py
│   ├── blueprints/
│   │   ├── __init__.py
│   │   ├── routes.py
│   │   └── schemas.py
│   ├── services/
│   │   └── core.py
│   ├── static/
│   └── templates/
├── tests/
│   └── conftest.py
└── config/
    ├── __init__.py
    ├── base.py
    └── production.py

  • .dockerignore: indica arquivos que não devem entrar na imagem Docker.
  • .env.example: modelo de variáveis de ambiente.
  • docker-compose.yml: orquestração dos serviços da aplicação.
  • manage.py: ponto de entrada da aplicação.
  • pyproject.toml: metadados e dependências do projeto.
  • src/: código-fonte principal.
    • extensions.py: inicialização de extensões como benco de dados e cache.
    • blueprints/: rotas e esquemas organizados em módulos.
    • services/: lógica de negócio reutilizável.
    • static/ e templates/: recursos estáticos e templates HTML.
  • tests/: conjunto de testes com fixtures.
  • config/: módulos de configuração por ambiente.

2. Arquivo de Inicialização

O arquivo manage.py cria a aplicação por meio de uma factory function e inicia o servidor local:

import os
from src import create_app

settings_module = os.getenv('FLASK_ENV', 'config.base')

if __name__ == '__main__':
    app = create_app(settings_module)
    app.run(
        host=app.config.get('HOST', '127.0.0.1'),
        port=app.config.get('PORT', 5000),
        debug=app.config.get('DEBUG', False)
    )

Esse padrão separa a criação da aplicação da sua execução, facilitando testes e reutilização da instância.

3. Configuração por Ambiente

A pasta config/ utiliza herança para isolar regras de desenvolvimento, testes e produção. O exemplo abaixo mostra a configuração base e uma especialização para produção:

# config/base.py
import os

class BaseConfig:
    SECRET_KEY = os.environ.get('SECRET_KEY', 'chave-padrao')
    DEBUG = False
    TESTING = False

    SQLALCHEMY_DATABASE_URI = os.environ.get(
        'DATABASE_URL', 'postgresql://localhost:5432/ytuce'
    )
    SQLALCHEMY_TRACK_MODIFICATIONS = False


# config/production.py
import os
from config.base import BaseConfig

class ProdConfig(BaseConfig):
    DEBUG = False
    SQLALCHEMY_ENGINE_OPTIONS = {
        'pool_size': int(os.environ.get('DB_POOL_SIZE', 10)),
        'max_overflow': int(os.environ.get('DB_MAX_OVERFLOW', 20))
    }

Para ativar a configuração correta, defina a variável de ambiente correspondente:

export FLASK_ENV=config.production.ProdConfig
python manage.py

Tags: Flask SQLAlchemy Docker Python

Publicado em 7-9 07:36