Configuración Python
Configuración para Flask, Django y FastAPI.
1. Preparar Proyecto
Section titled “1. Preparar Proyecto”cd /rootgit clone git@github.com:tu-usuario/proyecto-python.gitcd proyecto-python2. requirements.txt
Section titled “2. requirements.txt”Flask==3.0.0gunicorn==21.2.0python-dotenv==1.0.0Django
Section titled “Django”Django==5.0.0gunicorn==21.2.0psycopg2-binary==2.9.9django-environ==0.11.2FastAPI
Section titled “FastAPI”fastapi==0.109.0uvicorn[standard]==0.27.0pydantic==2.5.0python-multipart==0.0.63. Dockerfile para Flask/Django
Section titled “3. Dockerfile para Flask/Django”FROM python:3.11-slim
WORKDIR /app
# Dependencias del sistemaRUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ postgresql-client \ && rm -rf /var/lib/apt/lists/*
# Dependencias PythonCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt
# Código de aplicaciónCOPY . .
# Usuario no rootRUN useradd -m -u 1000 appuser && chown -R appuser:appuser /appUSER appuser
EXPOSE 8000
# FlaskCMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "app:app"]
# Django# CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "config.wsgi:application"]4. Dockerfile para FastAPI
Section titled “4. Dockerfile para FastAPI”FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /appUSER appuser
EXPOSE 8000CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]5. .dockerignore
Section titled “5. .dockerignore”.git.env__pycache__*.pyc*.pyo*.pyd.Pythonvenv/env/.venv/db.sqlite36. Estructura Flask
Section titled “6. Estructura Flask”from flask import Flask
app = Flask(__name__)
@app.route('/')def hello(): return {'message': 'Hello from Flask!'}
if __name__ == '__main__': app.run()7. Estructura Django
Section titled “7. Estructura Django”Archivo config/settings.py debe tener:
import environ
env = environ.Env()
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['*'])DEBUG = env.bool('DEBUG', default=False)
DATABASES = { 'default': env.db('DATABASE_URL', default='sqlite:///db.sqlite3')}8. Estructura FastAPI
Section titled “8. Estructura FastAPI”from fastapi import FastAPI
app = FastAPI()
@app.get("/")def read_root(): return {"message": "Hello from FastAPI!"}