Framework
Flask
Flask applications served by Gunicorn.
5000Requirements
requirements.txt with flask
DropDeploy also installs gunicorn automatically alongside your requirements.
app.py in the repo root with app = Flask(__name__)
Gunicorn starts with app:app — module is app.py, instance is app.
Demo app
A minimal app that is ready to push and deploy. Copy the files below into a new repository, commit, and deploy — it should go live without any changes.
flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return """
<html>
<body style="font-family:system-ui;display:flex;justify-content:center;
align-items:center;min-height:100vh;margin:0;
background:#0f172a;color:#f1f5f9">
<div style="text-align:center">
<h1 style="color:#a3a3a3">Hello from DropDeploy!</h1>
<p style="color:#94a3b8">Flask app is live.</p>
</div>
</body>
</html>
"""
@app.route('/api/health')
def health():
return {'status': 'ok'}Build & start commands
DropDeploy runs these steps inside the container when you click Deploy.
pip install -r requirements.txt gunicorn gunicorn app:app --bind 0.0.0.0:5000 --workers 2
Environment variables
Set these in Project → Env Vars in the dashboard. Never commit secrets.
| Variable | Required | Description |
|---|---|---|
| SECRET_KEY | Yes | Required for sessions and flash messages. |
| DATABASE_URL | No | Pass to Flask-SQLAlchemy or another ORM. |
Common issues
Flask app not named app
If your Flask instance is named server, update gunicorn to app:server.
Debug mode in production
Gunicorn ignores app.run(debug=True) but it's still a security risk. Remove it.