Home » Как развернуть статический сайт в облаке с DigitalOcean App Platform
Как развернуть статический сайт в облаке с DigitalOcean App Platform

Как развернуть статический сайт в облаке с DigitalOcean App Platform

Развёртывание статических сайтов в облаке — это задача, которую большинство из нас решает регулярно. Если раньше приходилось заморачиваться с nginx, настройкой SSL и прочими радостями серверного администрирования, то теперь есть более изящные решения. DigitalOcean App Platform предлагает интересный подход к деплою статики: автоматическое развёртывание из Git, встроенный CDN, HTTPS из коробки и минимум головной боли. В этой статье разберём, как максимально эффективно использовать эту платформу для ваших проектов, на что обратить внимание и какие подводные камни могут встретиться.

Как работает DigitalOcean App Platform

App Platform — это PaaS-решение от DigitalOcean, которое работает по принципу “git push и забыл”. Под капотом используется Kubernetes, но всю эту сложность от вас скрывают. Когда вы коммитите изменения в репозиторий, платформа автоматически собирает проект, создаёт контейнер и разворачивает его на своих серверах.

Для статических сайтов процесс ещё проще: указываете папку с готовыми файлами или команду сборки (например, для React, Vue, Gatsby), и платформа автоматически настраивает веб-сервер, SSL-сертификаты и CDN. Весь трафик проходит через их edge-серверы, что улучшает производительность.

Пошаговая настройка статического сайта

Начнём с создания простого статического сайта и его деплоя. Для примера возьмём проект на React, но принцип одинаков для любого статического генератора.

Шаг 1: Подготовка репозитория

Создайте новый репозиторий на GitHub или GitLab. Структура проекта может быть следующей:

my-static-site/
├── public/
│   ├── index.html
│   └── styles.css
├── src/
│   └── components/
├── package.json
└── README.md

Если используете сборщик, убедитесь, что команда сборки прописана в package.json:

{
  "scripts": {
    "build": "react-scripts build",
    "start": "react-scripts start"
  }
}

Шаг 2: Создание приложения в App Platform

Заходите в панель управления DigitalOcean, выбираете “App Platform” и жмёте “Create App”. Указываете свой GitHub/GitLab репозиторий и выбираете ветку для деплоя (обычно main или master).

Шаг 3: Настройка билда

App Platform автоматически определит тип проекта, но лучше проверить настройки:

  • Build Command: npm run build (для React/Vue) или оставьте пустым для готовой статики
  • Output Directory: build (для React) или dist (для Vue/Vite)
  • Node Version: выберите актуальную версию Node.js

Шаг 4: Конфигурация домена и SSL

По умолчанию получите домен вида your-app-name.ondigitalocean.app. Для своего домена добавьте CNAME-запись в DNS:

CNAME www your-app-name.ondigitalocean.app

SSL-сертификат выдаётся автоматически через Let’s Encrypt.

Практические примеры и кейсы

Кейс 1: Простой лендинг

Для обычного HTML/CSS/JS сайта создайте в корне файл .do/app.yaml:

name: my-landing
static_sites:
- name: web
  source_dir: /
  index_document: index.html
  error_document: 404.html

Кейс 2: React SPA с роутингом

Для SPA нужно настроить fallback на index.html. Создайте файл _redirects в папке public:

/*    /index.html   200

Кейс 3: Статический блог на Gatsby

Gatsby требует специфичных настроек для оптимизации:

name: gatsby-blog
static_sites:
- name: web
  build_command: npm run build
  output_dir: public
  environment_slug: node-js

Сравнение с альтернативными решениями

Решение Цена Автодеплой CDN SSL Кастомные домены
DO App Platform $5/месяц
Netlify Бесплатно/платно
Vercel Бесплатно/платно
GitHub Pages Бесплатно
Собственный VPS От $5/месяц Настройка

Автоматизация и интеграции

App Platform отлично интегрируется с GitHub Actions для более сложных пайплайнов. Например, можно настроить автоматическое тестирование перед деплоем:

name: Deploy to DO App Platform
on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'
    - name: Install dependencies
      run: npm ci
    - name: Run tests
      run: npm test
    - name: Build
      run: npm run build

Для мониторинга можно использовать webhooks, которые уведомляют о статусе деплоя в Slack или Discord.

Полезные фишки и хаки

Переменные окружения

Можно настроить разные переменные для разных веток:

REACT_APP_API_URL=https://api.production.com
REACT_APP_ANALYTICS_ID=UA-123456789-1

Кастомные заголовки

Для безопасности и SEO добавьте файл _headers:

/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Content-Security-Policy: default-src 'self'

Оптимизация производительности

Включите gzip-сжатие и кеширование через конфигурацию:

static_sites:
- name: web
  output_dir: build
  cache_control: max-age=31536000, immutable

Подводные камни и решения

Проблема с размером билда

App Platform имеет лимит на размер деплоя. Если ваш проект слишком большой, используйте оптимизацию:

# Очистка node_modules после сборки
npm ci --production
npm run build
rm -rf node_modules

Проблемы с зависимостями

Иногда билд падает из-за несовместимых версий пакетов. Фиксируйте версии в package-lock.json и используйте npm ci вместо npm install.

Медленный билд

Для ускорения используйте кеширование зависимостей:

build_command: |
  npm ci --cache .npm --prefer-offline
  npm run build

Интересные факты и статистика

App Platform использует те же дата-центры, что и обычные дроплеты DigitalOcean, но с автоматическим масштабированием. Статистика показывает, что время загрузки сайтов на App Platform в среднем на 15-20% быстрее благодаря встроенному CDN.

Любопытный факт: под капотом используется модифицированный nginx с оптимизациями для статического контента. Поддерживается HTTP/2 и Server Push для критических ресурсов.

Альтернативные решения

Если App Platform не подходит, рассмотрите:

  • Netlify — больше возможностей для serverless функций
  • Vercel — лучшая интеграция с Next.js
  • AWS S3 + CloudFront — для энтерпрайза
  • Собственный VPSаренда VPS сервера даёт больше контроля

For more advanced setups, consider dedicated servers для высоконагруженных проектов.

Автоматизация мониторинга

Настройте простой мониторинг доступности:

#!/bin/bash
URL="https://your-app.ondigitalocean.app"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $URL)

if [ $STATUS -eq 200 ]; then
    echo "Site is UP"
else
    echo "Site is DOWN - Status: $STATUS"
    # Отправить уведомление в Slack/Discord
fi

Заключение и рекомендации

DigitalOcean App Platform — это отличное решение для деплоя статических сайтов, если вы хотите баланс между простотой и функциональностью. Платформа идеально подходит для:

  • Малых и средних проектов с предсказуемой нагрузкой
  • Команд, которые хотят сосредоточиться на разработке, а не на DevOps
  • Проектов, где важны быстрый деплой и автоматическое масштабирование

Не рекомендую использовать для:

  • Высоконагруженных проектов с специфическими требованиями к производительности
  • Проектов, требующих кастомных серверных конфигураций
  • Случаев, когда нужен полный контроль над инфраструктурой

В целом, App Platform предлагает хорошее соотношение цены и качества для большинства современных веб-проектов. Главное — правильно настроить пайплайн сборки и мониторинг, тогда платформа будет работать как часы.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked