Skip to main content
DigitalOcean 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.
Before continuing, make sure you have:

1

Create a new DigitalOcean Container Registry

Create a new Container Registry to store the Docker image.
  • Through the DigitalOcean dashboard
  • Through the DigitalOcean CLI
In the DigitalOcean dashboard, go to Container Registry, and enter the details for the new registry.
DigitalOcean registry dashboard
Make sure the details are correct, then click Create Registry.
You should see the new registry in the DigitalOcean registry dashboard:
DigitalOcean registry dashboard
2

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.
Dockerfile
# 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"]
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.
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:
.dockerignore
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Any other files or directories you want to exclude
3

Authenticate Docker with DigitalOcean registry

Before building and pushing the Docker image, authenticate Docker with the DigitalOcean Container Registry:
terminal
doctl registry login
Successfully authenticated with registry.digitalocean.com
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.
4

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:
terminal
docker buildx build --platform=linux/amd64 -t registry.digitalocean.com/bun-digitalocean-demo/bun-digitalocean-demo:latest --push .
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.
Once the image is pushed, you should see it in the DigitalOcean registry dashboard:
DigitalOcean registry dashboard
5

Create a new DigitalOcean App Platform project

In the DigitalOcean dashboard, go to App Platform > Create App. We can create a project directly from the container image.
DigitalOcean App Platform project dashboard
Make sure the details are correct, then click Next.
DigitalOcean App Platform service dashboard
Review and configure resource settings, then click Create app.
DigitalOcean App Platform service dashboard
6

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.
DigitalOcean App Platform app dashboard