Flask
Despliega Flask con gunicorn, Postgres, migraciones y workers de RQ o Celery.
Paso a paso: Desplegar Flask en DigitalOcean · Desplegar Flask en Hetzner · Desplegar Flask en Vultr · Desplegar Flask en OVHcloud · Desplegar Flask en Scaleway · Desplegar Flask en UpCloud
- Se detecta a partir de
requirements.txtopyproject.tomlque listenflask. - Web: gunicorn en
$PORTconapp:app. Si tu app vive en otro lugar, define el comando de inicio con tumodule:callable(para un app factory,"myapp:create_app()"). - Release: ninguno por defecto. Con Flask-Migrate, define
flask db upgrade; con Alembic,alembic upgrade head. Se usa una línearelease:delProcfilecuando está presente. - Base de datos:
psycopg→ Postgres, conDATABASE_URLinyectada. - Workers y cron: se ofrece RQ cuando es una dependencia. Para Celery, agrega
worker: celery -A myapp.celery workera tuProcfileo agrégalo en la pestaña Workers.
Los workers son un segundo proceso de la misma app
Flask no tiene una convención propia de worker, así que Railyard simplemente aplica la regla de 12-factor directamente: declara un segundo proceso en tu Procfile y escala de forma independiente a web.
web: gunicorn app:app --bind 0.0.0.0:$PORT
worker: rq worker --url $REDIS_URL
O agrégalo en la pestaña Workers de la app sin tocar el repositorio, y escala cualquiera de los dos desde la CLI:
railyard scale my-app worker=2
RQ se ofrece automáticamente cuando es una dependencia; Celery no se detecta automáticamente en Flask — no hay una convención única sobre dónde vive la app de Celery — así que declara su comando una vez tú mismo. Consulta Workers y tareas programadas para cron: ya sea un comando programado ahí, o un segundo proceso worker ejecutando celery -A myapp.celery beat.
Configuración y secretos
DATABASE_URL se inyecta en cuanto psycopg/psycopg2 es una dependencia, y REDIS_URL en cuanto lo es un cliente de Redis (redis, rq). Todo lo demás — SECRET_KEY, FLASK_ENV, feature flags — es una variable de entorno normal en Variables, o railyard env:set my-app KEY=VALUE desde la CLI, así la misma imagen corre sin cambios desde staging hasta producción: paridad dev/prod, no una rama en tiempo de build. Apunta a una base de datos o Redis que corra como su propio servicio en el canvas con ${{redis.RAILYARD_PRIVATE_URL}} — resuelto por entorno. Consulta Variables y secretos.
Despliégalo
- Desde un repositorio: pega la URL de Git, o elígelo del selector una vez que conectes GitHub — Railyard lee
requirements.txt/pyproject.toml, completa gunicorn yDATABASE_URL, y despliega con cada push. - Desde la CLI:
railyard create my-app https://github.com/me/my-app --addons postgres,redis, orailyard git:remote && git push railyard maindesde dentro del repositorio. - Con un clic: agrega el botón de despliegue a tu README, o publícalo en el catálogo de plantillas para que cualquiera pueda lanzarlo con sus complementos y variables ya completados.