Framework Frankfurt, Germany
Nodion recognizes Flask in your dependencies, installs them with its Python buildpack and starts Gunicorn with three workers on your app object. Migrations can run as a release step before each new version goes live, and the app runs in Frankfurt, next to a managed PostgreSQL database if you need one.
gunicorn app:app, 3 workers.python-version, because a range in pyproject.toml picks the newest release. requirements.txt flask
gunicorn app.py, application.py and wsgi.py that contains Flask and runs gunicorn <file>:app with 3 workers on the PORT it sets. The object has to be called app. app.py from flask import Flask
app = Flask(__name__)
@app.get("/")
def index():
return "Hello from Frankfurt" create_app() there is no module-level app to find, so tell Gunicorn to call the factory in a Procfile. The line replaces the default start command. Procfile web: gunicorn "myapp:create_app()" --bind 0.0.0.0:$PORT --workers 3 release: line runs flask db upgrade once per build, after the build and before the new version starts. If it fails, the deploy stops and the running version stays live. Procfile release: flask --app myapp db upgrade DATABASE_URL on the next deploy. Set your SECRET_KEY as a secret variable, read it with os.environ, then push. DATABASE_URL starts with postgres://, which SQLAlchemy 1.4 and newer do not accept. Replace the scheme before you pass it on: postgresql:// for psycopg2, postgresql+psycopg:// for psycopg 3./ answers with 2xx or 3xx, so a redirect to a login page is fine. If / returns 401 or 404, add a route such as /healthz and set it as the health check path in the app settings.worker: celery -A myapp worker to the Procfile together with an explicit web: gunicorn app:app --bind 0.0.0.0:$PORT --workers 3; without a web: line the first Procfile entry other than release: becomes the default command. Then add a process named worker without a port on the Processes tab. Valkey in the same region gives you REDIS_URL.DATABASE_URL, REDIS_URL or CLICKHOUSE_URL. release: line runs with every new build. Dockerfile apps, and redeploys or rollbacks to an earlier image, use a release command set on the app itself, which also takes precedence over the Procfile line. On static sites a release step runs in an image that holds only the built files. Usually Gunicorn is missing from your dependencies, the object is not called app, or the app is built in a factory. Add gunicorn, rename the object, or set a web: line that calls create_app().
No. With Flask in your dependencies, Nodion starts Gunicorn. Flask's built-in server is meant for development, so keep app.run() under if __name__ == "__main__": for local use.
Three by default. Set your own number with --workers in a web: line, and run more instances of the web process when one is not enough.
In the EU Central region in Frankfurt, Germany. Build, registry, the app and its databases, volumes, buckets, logs and metrics stay in that region, and Nodion's API and control plane are hosted in Germany. Nodion GmbH is based in Stuttgart.
Nodion provides the basis for it: Nodion GmbH is based in Stuttgart, Germany, in the Frankfurt region the app, its databases and volumes run in Germany, and you conclude the data processing agreement (DPA) under Art. 28 GDPR electronically in the dashboard. Whether your setup complies also depends on how you configure and use the app.
An app instance starts at 1 EUR per month. The setup in the cost box costs 3.50 EUR per month: App 2 EUR, PostgreSQL 1.50 EUR. Prices are net and billed per second, and you pick bigger sizes or more instances whenever you need them.
Yes. Every app gets a default hostname with HTTPS. Add your own domain on the app's Domains tab; the TLS certificate is issued and renewed automatically.
Earn up to 15 € in credit when signing up.
or with email
Product news, no spam. Unsubscribe anytime.
Successfully subscribed.