Skip to content

DigitalOcean — это облачная платформа, предоставляющая ряд сервисов для создания и развёртывания приложений.

В этом руководстве мы развернём HTTP-сервер Bun на DigitalOcean с использованием Dockerfile.

NOTE

Перед продолжением убедитесь, что у вас есть:
  • Приложение Bun, готовое к развёртыванию
  • Учётная запись DigitalOcean
  • Установлен и настроен DigitalOcean CLI
  • Установлен Docker и добавлен в PATH

Создание нового реестра контейнеров DigitalOcean

Создайте новый реестр контейнеров для хранения образа Docker.

Через панель управления DigitalOcean

В панели управления DigitalOcean перейдите в Container Registry и введите данные для нового реестра.

Убедитесь, что данные верны, затем нажмите Create Registry.

Через CLI DigitalOcean
bash
doctl registry create bun-digitalocean-demo
txt
Name                     Endpoint                                           Region slug
bun-digitalocean-demo    registry.digitalocean.com/bun-digitalocean-demo    sfo2

Вы должны увидеть новый реестр в панели управления реестром DigitalOcean:

Создание нового Dockerfile

Убедитесь, что вы находитесь в директории с вашим проектом, затем создайте новый Dockerfile в корне вашего проекта. Этот файл содержит инструкции для инициализации контейнера, копирования локальных файлов проекта, установки зависимостей и запуска приложения.

docker
# Используем официальный образ Bun для запуска приложения
FROM oven/bun:debian

# Устанавливаем рабочую директорию `/app`
WORKDIR /app

# Копируем package.json и bun.lock в контейнер
COPY package.json bun.lock ./

# Устанавливаем зависимости
RUN bun install --production --frozen-lockfile

# Копируем остальную часть приложения в контейнер
COPY . .

# Открываем порт 8080 (DigitalOcean установит переменную окружения PORT)
EXPOSE 8080

# Запускаем приложение
CMD ["bun", "index.ts"]

NOTE

Убедитесь, что команда запуска соответствует точке входа вашего приложения. Это также может быть `CMD ["bun", "run", "start"]`, если у вас есть скрипт start в `package.json`.

Этот образ устанавливает зависимости и запускает ваше приложение с Bun внутри контейнера. Если у вашего приложения нет зависимостей, вы можете опустить строку RUN bun install --production --frozen-lockfile.

Создайте новый файл .dockerignore в корне вашего проекта. Этот файл содержит файлы и директории, которые должны быть исключены из образа контейнера, такие как node_modules. Это делает ваши сборки быстрее и меньше:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Любые другие файлы или директории, которые вы хотите исключить

Аутентификация Docker в реестре DigitalOcean

Перед сборкой и отправкой образа Docker аутентифицируйте Docker в реестре контейнеров DigitalOcean:

bash
doctl registry login
txt
Successfully authenticated with registry.digitalocean.com

NOTE

Эта команда аутентифицирует Docker в реестре DigitalOcean, используя ваши учётные данные DigitalOcean. Без этого шага команда сборки и отправки завершится ошибкой аутентификации 401.

Сборка и отправка образа Docker в реестр DigitalOcean

Убедитесь, что вы находитесь в директории с вашим Dockerfile, затем соберите и отправьте образ Docker в реестр DigitalOcean одной командой:

bash
docker buildx build --platform=linux/amd64 -t registry.digitalocean.com/bun-digitalocean-demo/bun-digitalocean-demo:latest --push .

NOTE

Если вы собираете на ARM Mac (M1/M2), вы должны использовать `docker buildx` с `--platform=linux/amd64`, чтобы обеспечить совместимость с инфраструктурой DigitalOcean. Использование `docker build` без флага platform создаст образ ARM64, который не будет работать на DigitalOcean.

После отправки образа вы должны увидеть его в панели управления реестром DigitalOcean:

Создание нового проекта App Platform в DigitalOcean

В панели управления DigitalOcean перейдите в App Platform > Create App. Мы можем создать проект непосредственно из образа контейнера.

Убедитесь, что данные верны, затем нажмите Next.

Проверьте и настройте параметры ресурсов, затем нажмите Create app.

Посетите ваше работающее приложение

🥳 Ваше приложение теперь работает! После создания приложения вы должны увидеть его в панели управления App Platform с публичным URL.

Bun от www.bunjs.com.cn