Skip to content

Support per-app deploy targets (mixed providers) #19

Description

@dannywillems

Problem

Catapulta currently deploys all apps to a single VPS. In practice,
a stack often has services that belong on different providers:

  • Static frontends -> Cloudflare Pages (free CDN)
  • Lightweight APIs -> Fly.io (free tier)
  • Stateful services -> VPS (needs disk, database)

There is no way to express this in catapulta today.

Proposal

Allow each app to specify its own deploy target/provider:

// Example: mixed deployment
let cdn_app = App::new("scribe-web")
    .provider(Provider::CloudflarePages { project: "scribe-web" })
    .build_cmd("npm run build")
    .build_dir("build");

let free_app = App::new("notifier")
    .provider(Provider::Fly { app: "my-notifier", region: "cdg" })
    .dockerfile("Dockerfile");

let vps_app = App::new("papyrus")
    .provider(Provider::Vps)  // current default behavior
    .dockerfile("Dockerfile");

The deploy command would dispatch each app to its respective
provider's deployer.

Benefits

  • Optimize cost: free tiers for simple services, VPS only for
    what needs it
  • Reduce VPS resource pressure
  • Each service gets the right infrastructure for its needs

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions