Skip to content

Deploy Flask

Deploy a Flask app on Ownkube in minutes. Push your repo and Ownkube builds it and ships it, and you get a live URL with automatic TLS. Managed Postgres, logs, metrics, and one-click rollbacks come built in. No cloud account to start.

  • A Flask app in a GitHub or GitLab repository
  • About five minutes
  1. Connect your repo

    Sign in at app.ownkube.io/login, open Settings, and connect the GitHub App (or GitLab) so Ownkube can reach your repository. Already have a prebuilt image in a registry? Point Ownkube at it instead. See Registries.

  2. Create a Web deployment

    From your dashboard, choose Create deployment, pick Web, and select your Flask repo. Ownkube builds it and pushes the image to a registry it manages for you.

  3. Set the port

    Flask apps commonly serve on port 8000 when run with Gunicorn (gunicorn app:app --bind 0.0.0.0:8000, where app:app is module:Flask-instance, adjust it to match your entry point). Set that as the port so traffic routes to your app. You can change it later in Settings. Bind Gunicorn to 0.0.0.0, not 127.0.0.1, or the deployment’s health checks can’t reach your app. The Flask development server (flask run) isn’t built to hold production traffic.

  4. Add environment variables

    Read config and secrets from environment variables rather than hardcoding them, for example SECRET_KEY and any API credentials. Mark secrets with the Secret toggle. See Environment variables.

  5. Deploy

    Click Create deployment. The deployment page streams the build, then startup and health checks. When the status goes healthy, open the generated hostname on the Overview tab. Your Flask app is live, with TLS included.

If you use Flask-Migrate or another Alembic-based tool, run flask db upgrade before your app serves traffic rather than at request time. Ownkube’s Jobs resource runs a container to completion, which makes it the right place for a migration step ahead of a deploy.

Port 8000

Flask apps commonly serve on port 8000 via Gunicorn. Set that as the port so Ownkube routes traffic to your app.

Bind to 0.0.0.0

Gunicorn needs to bind 0.0.0.0, not 127.0.0.1, or the deployment’s health checks can’t reach your app.

Config via env vars

Load SECRET_KEY and other config from the environment instead of a checked-in config.py, so secrets never land in your repo.

Bring your own Dockerfile

Want full control of the build? Add a Dockerfile to your repo and Ownkube uses it, reading the port from its EXPOSE line.

Need Postgres? Add a Database in one click and Ownkube injects the connection string as DATABASE_URL (plus PGHOST, PGUSER, and friends) into your app. See Databases.

Once you’re running, turn on autoscaling on CPU and memory, watch logs and metrics on every deployment, and roll back a bad deploy in one click.