- Home »

Как развернуть статический сайт в облаке с 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 предлагает хорошее соотношение цены и качества для большинства современных веб-проектов. Главное — правильно настроить пайплайн сборки и мониторинг, тогда платформа будет работать как часы.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.