UNPKG

bun-types

Version:

Type definitions and documentation for Bun, an incredibly fast JavaScript runtime

162 lines (123 loc) 6.4 kB
--- 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> ![DigitalOcean registry dashboard](https://bun.com/images/guides/digitalocean-7.png) </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> ![DigitalOcean registry dashboard](https://bun.com/images/guides/digitalocean-1.png) </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> ![DigitalOcean registry dashboard](https://bun.com/images/guides/digitalocean-2.png) </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> ![DigitalOcean App Platform project dashboard](https://bun.com/images/guides/digitalocean-3.png) </Frame> Make sure the details are correct, then click **Next**. <Frame> ![DigitalOcean App Platform service dashboard](https://bun.com/images/guides/digitalocean-4.png) </Frame> Review and configure resource settings, then click **Create app**. <Frame> ![DigitalOcean App Platform service dashboard](https://bun.com/images/guides/digitalocean-6.png) </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> ![DigitalOcean App Platform app dashboard](https://bun.com/images/guides/digitalocean-5.png) </Frame> </Step> </Steps>