> ## Documentation Index
> Fetch the complete documentation index at: https://ravion-b90c0359-mintlify-710044b6.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# How to deploy Bun to AWS

> Deploy a Bun HTTP server on ECS Fargate behind an Application Load Balancer in your AWS account with Ravion, including autoscaling, HTTPS, and CI/CD.

Deploy a Bun HTTP server on ECS Fargate behind an Application Load Balancer.

## Prerequisites

* A Git repository containing your application and its production build command.
* A Ravion account with your AWS account connected. Start free at [Ravion signup](https://app.ravion.com/signup).
* The Ravion CLI installed and authenticated. See [CLI installation](/cli/installation).

The examples use `my-org/my-app` as a placeholder. Replace it with your repository before applying the config.

<Prompt description="Set up this Bun app for Ravion ECS hosting." icon="sparkles" actions={["copy", "cursor"]}>
  1. Before any other action, read and follow [https://www.ravion.com/docs/start-here#agent-workflow](https://www.ravion.com/docs/start-here#agent-workflow) as the mandatory agent workflow.
  2. Use [https://www.ravion.com/docs/deploy/aws/bun](https://www.ravion.com/docs/deploy/aws/bun) as the framework-specific source of truth.
  3. Confirm this repository contains Bun and locate the app root in a monorepo.
  4. Inspect `package.json`, `bun.lock`, source entrypoints, and Docker files to detect the real build/start command and port; bind `Bun.serve` to `0.0.0.0` and `process.env.PORT`.
  5. Generate `ravion.yaml` with `rvn-aws-network` + `rvn-ecs-cluster` + `rvn-ecs-web` using Railpack and real AWS and repository values. Ask the user for the Bun entrypoint if Railpack cannot determine it.
  6. Ask the user for AWS account IDs, repository slugs, project IDs, entrypoints, or ports before proceeding; do not guess.
</Prompt>

## Configure the deployment

Bun's official server API uses `Bun.serve` and honors `PORT` when you do not set a port explicitly.

[Railpack](https://railpack.com) detects Bun from the `packageManager` field, `engines.bun`, or a `bun.lock` or `bun.lockb` file. Otherwise it uses its Node.js framework, monorepo, or SPA detection. Set the production start command to your actual Bun entrypoint when it is not inferred from the repository. Ravion injects `PORT` automatically from `container_port`.

```yaml ravion.yaml theme={null}
project:
  givenId: bun-app
  name: Bun app
environments:
  - givenId: production
    name: Production
    moduleInstances:
      - givenId: network
        name: Network
        type: rvn-aws-network
        version: 1.0.0
        input:
          aws_account_id: ravion-prod
          aws_region: us-east-1
          name: bun-production
      - givenId: cluster
        name: ECS cluster
        type: rvn-ecs-cluster
        version: 1.0.0
        input:
          network:
            moduleGivenIdRef: network
          name: bun-production
      - givenId: web
        name: Bun web service
        type: rvn-ecs-web
        version: 1.0.0
        input:
          cluster:
            moduleGivenIdRef: cluster
          name: bun-production-web
          build_source: railpack
          source_repo: my-org/my-bun-app
          container_port: 3000
          fargate_size:
            vcpu: 0.5
            memory_gb: 1
```

Set `port: Number(process.env.PORT) || 3000` and `hostname: "0.0.0.0"` in `Bun.serve`, and set the runtime start command to your actual Bun entrypoint.

## Apply and connect your domain

```bash theme={null}
ravion project create --given-id bun-app --name "Bun app"
ravion project config apply bun-app --file ravion.yaml --dry-run
ravion project config apply bun-app --file ravion.yaml
```

Follow [custom domains](/guides/custom-domains) to connect your domain to the Application Load Balancer.

## Next steps

<CardGroup cols={2}>
  <Card title="Custom domains" icon="globe" href="/guides/custom-domains">
    Point a domain at your deployed service and manage its certificate.
  </Card>

  <Card title="Project config" icon="file-code" href="/config-as-code/project-config-file">
    Preview and apply Ravion configuration from source control.
  </Card>

  <Card title="Pipelines" icon="arrow-progress" href="/config-as-code/pipeline-config-file">
    Add approvals, migrations, and deployment automation.
  </Card>

  <Card title="Logs and metrics" icon="chart-line" href="/modules/logs">
    Inspect deploy output and production health in Ravion.
  </Card>
</CardGroup>
