SEAGIT DOCS
Applications

Applications

Deploy applications from GitHub, containers, or Helm charts with automated builds and configuration management.

Deploying on a domain hosted in AWS Route 53? Each target cluster needs the “External DNS – AWS” add-on, or the app’s URL will silently never resolve. Follow the Deploy an App on an AWS Route 53 Domain walkthrough.

Template vs Instance Model

Template: Reusable application blueprint defining source, resources, and network configuration.

Instance: Environment-specific deployment of a template. One template can have multiple instances (dev, staging, prod).

Application Sources

1. Container Images

Deploy pre-built Docker images from any registry:

  • Docker Hub: docker.io/library/nginx
  • AWS ECR: 123456.dkr.ecr.us-east-1.amazonaws.com/app
  • GitHub Container Registry: ghcr.io/username/app

2. Source Code (Git)

Buildpack Auto-Detection:

  • Node.js (package.json)
  • Python (requirements.txt)
  • Go (go.mod)
  • Java (pom.xml, build.gradle)

3. Helm Charts

Deploy from Helm repositories:

  • HTTPS: https://charts.bitnami.com/bitnami
  • OCI: oci://public.ecr.aws/bitnami/nginx
  • GitHub: Raw chart files from repositories

Which source should I use?

All three end up as the same thing — a container running in your cluster — so the choice is about where the build happens and who owns it.

A container image is the right default when you already have a CI pipeline you trust. Nothing is built for you, the image you tested is the image that runs, and rollback is picking an earlier tag. Avoid the latest tag: it makes two deployments of “the same” version non-identical, and it takes away the only handle you have for rolling back.

Source code from Git is the shortest path from commit to running app, and the one to pick if you do not want to own a build pipeline. The trade-off is that the build becomes part of the deploy: a dependency that fails to install is now a failed deployment rather than a failed CI job, and build time is added to every release.

A Helm chart is for anything that is more than one workload — an app with a worker, a job, a config map and a secret, or third-party software that already ships a chart. If your app is a single container, a chart is usually more moving parts than the problem needs.

Resource Configuration

  • CPU: 0.5-4 vCPU (requests and limits)
  • Memory: 512Mi-8Gi (requests and limits)
  • Replicas: Min 1, Max 10 with auto-scaling
  • Storage: Persistent volumes with custom mount paths

Setting requests and limits

The request is what the scheduler reserves for your pod; the limit is what it may not exceed. They are different promises and the gap between them is where most surprises live.

Set the memory limit deliberately. A container that exceeds it is killed outright (OOMKilled) rather than throttled, so a limit set too close to normal usage turns a traffic spike into a restart loop. Set the CPU request honestly, because a request far above real usage means the scheduler reserves capacity nobody uses and you pay your cloud provider for the difference — while a request far below it means your pod is the first thing starved when the node is busy.

If you do not know the numbers yet, start with a request near observed steady-state usage and a memory limit roughly double it, then tighten once you have seen a real week of traffic. Guessing high is cheaper than guessing low, but only until the bill arrives.

Network Configuration

  • Container Port: Application listening port (e.g., 3000)
  • Service Port: External access port (e.g., 80)
  • Ingress: HTTP/HTTPS routing with TLS

Building from a Repository

When an application is built from source, two fields on the instance decide whether your pull requests actually build. Both are easy to leave at a default that quietly does nothing.

Branch or Pattern

This is what routes an incoming change to this instance. Enter a specific branch (main) to build only that branch, or a glob pattern to match a family of branches — feature/*, release/**, ci-*.

⚠️ A pull request whose source branch does not match this pattern produces no status checks and no comments at all. It looks like a broken integration, but it is the pattern doing its job — so agree your branch naming convention first, and set the pattern to match it.

Create New Blank Repository for this instance in AWS ECR?

A build can push an image, but it cannot create the registry repository it pushes to. Tick this option and SeaGit creates that repository ahead of time — in each AWS account behind the target environment, since one environment can span accounts. Leave it off when the repository already exists.

For applications built from source, the repository is named after your Git repository rather than the instance, so several instances of the same service share one repository and are told apart by image tag — one repository per service, one tag per commit.

With this option on, no deployment is created automatically when you create the instance: an image has to exist before anything can be deployed, and your first build provides it.

Full walkthrough: Set Up Argo CI/CD End to End.

Deployment Strategies

Rolling Update (Default)

Gradually replace pods with zero downtime. Configure max surge and max unavailable.

Recreate

Terminate all existing pods before creating new ones. Brief downtime but simpler rollout.

Complete Workflow

  1. Create application template
  2. Configure source (GitHub, Container, Helm)
  3. Set resource requirements
  4. Configure network and ingress
  5. Add variables and secrets
  6. Create and configure application instance for specific environment
  7. Deploy instance to the selected environment

Manage applications and deployments with the API

Deploy and manage applications across environments, control deployments to production, and promote ephemeral versions to main. Each app has instances (configurations per environment), and each instance can have multiple deployments (separate Helm releases and DNS subdomains).

Base URL https://seagit.com/api · header Authorization: <key> (no Bearer) · Get an API key

$ACCOUNT_ID is the _id returned by GET /auth/me. Find $APP_ID by listing apps; find $INSTANCE_ID in the instances list; find $DEPLOYMENT_ID in the deployments list for an instance.

  1. GET/accounts/{accid}/apps

    List your applications

    Retrieve all applications (templates) in your account. An application is a reusable blueprint defining source, resources, and network configuration.

    curl -X GET "$SEAGIT_API/accounts/$ACCOUNT_ID/apps" \ -H "Authorization: $SEAGIT_API_KEY"
  2. GET/accounts/{accid}/apps/{appid}

    Get application details

    Returns one application template by id.

    curl -X GET "$SEAGIT_API/accounts/$ACCOUNT_ID/apps/$APP_ID" \ -H "Authorization: $SEAGIT_API_KEY"
  3. GET/accounts/{accid}/apps/{appid}/instances

    List application instances

    List all instances of an application. Each instance is an environment-specific configuration (e.g., dev, staging, production) that can be deployed multiple times.

    curl -X GET "$SEAGIT_API/accounts/$ACCOUNT_ID/apps/$APP_ID/instances" \ -H "Authorization: $SEAGIT_API_KEY"
  4. POST/accounts/{accid}/apps/{appid}/instances/{insid}/deploy

    Deploy an instance

    Create a new deployment from an instance. This triggers a new Helm release with its own DNS subdomain. For source code instances, pass ?sha=<commit> to specify the Git commit; ?branch=<branchname> overrides the configured branch pattern.

    curl -X POST "$SEAGIT_API/accounts/$ACCOUNT_ID/apps/$APP_ID/instances/$INSTANCE_ID/deploy" \ -H "Authorization: $SEAGIT_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'

    Creates live infrastructure and may incur costs.

  5. GET/accounts/{accid}/apps/{appid}/deployments/{depid}/status

    Check deployment status

    Poll the status of a deployment. Returns the current state (queued, started, failed, etc.) and the previous status, useful for tracking deployment progress.

    curl -X GET "$SEAGIT_API/accounts/$ACCOUNT_ID/apps/$APP_ID/deployments/$DEPLOYMENT_ID/status" \ -H "Authorization: $SEAGIT_API_KEY"
  6. POST/accounts/{accid}/apps/{appid}/deployments/{depid}/deploy

    Promote deployment to main

    Promote an ephemeral deployment to the main slot using ?promote=true. This copies the deployment configuration and triggers a fresh deploy to your production endpoint; the main slot's DNS name remains unchanged.

    curl -X POST "$SEAGIT_API/accounts/$ACCOUNT_ID/apps/$APP_ID/deployments/$DEPLOYMENT_ID/deploy?promote=true" \ -H "Authorization: $SEAGIT_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'

    Promotes to the main (production-facing) deployment; affects live traffic.