mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
Adds deployment guides for Bun apps on AWS Lambda, Google Cloud Run, and DigitalOcean using a custom `Dockerfile` --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
162 lines
6.1 KiB
Plaintext
162 lines
6.1 KiB
Plaintext
---
|
|
title: Deploy a Bun application on DigitalOcean
|
|
sidebarTitle: Deploy on DigitalOcean
|
|
mode: center
|
|
---
|
|
|
|
[DigitalOcean](https://www.digitalocean.com/) is a cloud platform that provides a range of services for building and deploying applications.
|
|
|
|
In this guide, we will deploy a Bun HTTP server to DigitalOcean using a `Dockerfile`.
|
|
|
|
<Note>
|
|
Before continuing, make sure you have:
|
|
|
|
- A Bun application ready for deployment
|
|
- A [DigitalOcean account](https://www.digitalocean.com/)
|
|
- [DigitalOcean CLI](https://docs.digitalocean.com/reference/doctl/how-to/install/#step-1-install-doctl) installed and configured
|
|
- [Docker](https://docs.docker.com/get-started/get-docker/) installed and added to your `PATH`
|
|
|
|
</Note>
|
|
|
|
---
|
|
|
|
<Steps>
|
|
<Step title="Create a new DigitalOcean Container Registry">
|
|
Create a new Container Registry to store the Docker image.
|
|
|
|
<Tabs>
|
|
<Tab title="Through the DigitalOcean dashboard">
|
|
In the DigitalOcean dashboard, go to [**Container Registry**](https://cloud.digitalocean.com/registry), and enter the details for the new registry.
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
|
|
Make sure the details are correct, then click **Create Registry**.
|
|
</Tab>
|
|
<Tab title="Through the DigitalOcean CLI">
|
|
|
|
```bash terminal icon="terminal"
|
|
doctl registry create bun-digitalocean-demo
|
|
```
|
|
```txt
|
|
Name Endpoint Region slug
|
|
bun-digitalocean-demo registry.digitalocean.com/bun-digitalocean-demo sfo2
|
|
```
|
|
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
You should see the new registry in the [**DigitalOcean registry dashboard**](https://cloud.digitalocean.com/registry):
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
</Step>
|
|
<Step title="Create a new Dockerfile">
|
|
Make sure you're in the directory containing your project, then create a new `Dockerfile` in the root of your project. This file contains the instructions to initialize the container, copy your local project files into it, install dependencies, and start the application.
|
|
|
|
```docker Dockerfile icon="docker"
|
|
# Use the official Bun image to run the application
|
|
FROM oven/bun:debian
|
|
|
|
# Set the work directory to `/app`
|
|
WORKDIR /app
|
|
|
|
# Copy the package.json and bun.lock into the container
|
|
COPY package.json bun.lock ./
|
|
|
|
# Install the dependencies
|
|
RUN bun install --production --frozen-lockfile
|
|
|
|
# Copy the rest of the application into the container
|
|
COPY . .
|
|
|
|
# Expose the port (DigitalOcean will set PORT env var)
|
|
EXPOSE 8080
|
|
|
|
# Run the application
|
|
CMD ["bun", "index.ts"]
|
|
```
|
|
|
|
<Note>
|
|
Make sure that the start command corresponds to your application's entry point. This can also be `CMD ["bun", "run", "start"]` if you have a start script in your `package.json`.
|
|
|
|
This image installs dependencies and runs your app with Bun inside a container. If your app doesn't have dependencies, you can omit the `RUN bun install --production --frozen-lockfile` line.
|
|
</Note>
|
|
|
|
Create a new `.dockerignore` file in the root of your project. This file contains the files and directories that should be _excluded_ from the container image, such as `node_modules`. This makes your builds faster and smaller:
|
|
|
|
```docker .dockerignore icon="Docker"
|
|
node_modules
|
|
Dockerfile*
|
|
.dockerignore
|
|
.git
|
|
.gitignore
|
|
README.md
|
|
LICENSE
|
|
.vscode
|
|
.env
|
|
# Any other files or directories you want to exclude
|
|
```
|
|
</Step>
|
|
<Step title="Authenticate Docker with DigitalOcean registry">
|
|
Before building and pushing the Docker image, authenticate Docker with the DigitalOcean Container Registry:
|
|
|
|
```bash terminal icon="terminal"
|
|
doctl registry login
|
|
```
|
|
```txt
|
|
Successfully authenticated with registry.digitalocean.com
|
|
```
|
|
|
|
<Note>
|
|
This command authenticates Docker with DigitalOcean's registry using your DigitalOcean credentials. Without this step, the build and push command will fail with a 401 authentication error.
|
|
</Note>
|
|
</Step>
|
|
<Step title="Build and push the Docker image to the DigitalOcean registry">
|
|
Make sure you're in the directory containing your `Dockerfile`, then build and push the Docker image to the DigitalOcean registry in one command:
|
|
|
|
```bash terminal icon="terminal"
|
|
docker buildx build --platform=linux/amd64 -t registry.digitalocean.com/bun-digitalocean-demo/bun-digitalocean-demo:latest --push .
|
|
```
|
|
|
|
<Note>
|
|
If you're building on an ARM Mac (M1/M2), you must use `docker buildx` with `--platform=linux/amd64` to ensure compatibility with DigitalOcean's infrastructure. Using `docker build` without the platform flag will create an ARM64 image that won't run on DigitalOcean.
|
|
</Note>
|
|
|
|
Once the image is pushed, you should see it in the [**DigitalOcean registry dashboard**](https://cloud.digitalocean.com/registry):
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
</Step>
|
|
<Step title="Create a new DigitalOcean App Platform project">
|
|
In the DigitalOcean dashboard, go to [**App Platform**](https://cloud.digitalocean.com/apps) > **Create App**. We can create a project directly from the container image.
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
|
|
Make sure the details are correct, then click **Next**.
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
|
|
Review and configure resource settings, then click **Create app**.
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
</Step>
|
|
<Step title="Visit your live application">
|
|
🥳 Your app is now live! Once the app is created, you should see it in the App Platform dashboard with the public URL.
|
|
|
|
<Frame>
|
|

|
|
</Frame>
|
|
</Step>
|
|
|
|
</Steps>
|