Skip to content
Back to Deployment

Deploying with Northflank

PaaS with git-push, Docker, managed DBs, and combined frontend + backend services.

PlatformsIntermediate

Why

Northflank lets you deploy frontend, backend, workers, and databases as one project with shared networking and secrets. It supports git-push, Docker, and combined services.

Platform-as-a-Service adoption grew 24% in 2024 as teams shift from VM management to git-push deploys. the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research), and PaaS layers capture the majority of new workloads.

When

Use Northflank for full-stack apps with multiple services and DBs. Avoid for simple single-service apps — overkill.

How

1. Create — northflank.com → New Project 2. Service — add frontend (static), backend (container), worker 3. Database — add Postgres/Redis/Mongo as managed service 4. Networking — services auto-connect via private network 5. Secrets — shared across services in project 6. Domain — custom domain with auto TLS 7. Scale — per-service scaling

Example

// config — deploy-northflank const config = require("./config"); # northflank.yaml — combined services project: myapp services: frontend: type: static build: npm run build output: dist backend: type: container dockerfile: Dockerfile port: 3000 env: DATABASE_URL: postgres://... worker: type: container dockerfile: Dockerfile.worker command: npm run worker databases: - type: postgres name: main - type: redis name: cache

Common Problems

  • ⚠Service can't reach DB — wrong secret reference, use service-name:variable syntax
  • ⚠Build fails — Northflank uses BuildKit, ensure Dockerfile is BuildKit-compatible
  • ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical

Best Practices

  • ✓Use combined services for full-stack — shared networking, secrets, and one deploy
  • ✓Use managed DBs — auto-backup, scaling, and connection pooling
  • ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit

FAQ