DigitalOcean — это облачная платформа, предоставляющая ряд сервисов для создания и развёртывания приложений.
В этом руководстве мы развернём HTTP-сервер Bun на DigitalOcean с использованием Dockerfile.
NOTE
Перед продолжением убедитесь, что у вас есть:- Приложение Bun, готовое к развёртыванию
- Учётная запись DigitalOcean
- Установлен и настроен DigitalOcean CLI
- Установлен Docker и добавлен в
PATH
Создание нового реестра контейнеров DigitalOcean
Создайте новый реестр контейнеров для хранения образа Docker.
Через панель управления DigitalOcean
В панели управления DigitalOcean перейдите в Container Registry и введите данные для нового реестра.
Убедитесь, что данные верны, затем нажмите Create Registry.
Через CLI DigitalOcean
doctl registry create bun-digitalocean-demoName Endpoint Region slug
bun-digitalocean-demo registry.digitalocean.com/bun-digitalocean-demo sfo2Вы должны увидеть новый реестр в панели управления реестром DigitalOcean:
Создание нового Dockerfile
Убедитесь, что вы находитесь в директории с вашим проектом, затем создайте новый Dockerfile в корне вашего проекта. Этот файл содержит инструкции для инициализации контейнера, копирования локальных файлов проекта, установки зависимостей и запуска приложения.
# Используем официальный образ 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. Это делает ваши сборки быстрее и меньше:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Любые другие файлы или директории, которые вы хотите исключитьАутентификация Docker в реестре DigitalOcean
Перед сборкой и отправкой образа Docker аутентифицируйте Docker в реестре контейнеров DigitalOcean:
doctl registry loginSuccessfully authenticated with registry.digitalocean.comNOTE
Эта команда аутентифицирует Docker в реестре DigitalOcean, используя ваши учётные данные DigitalOcean. Без этого шага команда сборки и отправки завершится ошибкой аутентификации 401.Сборка и отправка образа Docker в реестр DigitalOcean
Убедитесь, что вы находитесь в директории с вашим Dockerfile, затем соберите и отправьте образ Docker в реестр DigitalOcean одной командой:
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.