Перейти к содержимому

34. Деплой и адаптеры

Astro поддерживает множество платформ для деплоя: от полностью статического хостинга до серверного рендеринга на edge-функциях. Выбор зависит от того, как вы рендерите страницы.

Astro поддерживает три режима вывода:

  • static (по умолчанию) — все страницы генерируются при сборке. Отдаётся как статические файлы.
  • server — все страницы рендерятся на сервере по запросу (SSR).
  • hybrid — по умолчанию SSR, но отдельные страницы можно сделать статическими через export const prerender = true.
astro.config.mjs
export default defineConfig({
output: 'server', // 'static' | 'server' | 'hybrid'
adapter: netlify(),
});
Окно терминала
# Сборка для production
npm run build # Создаёт папку dist/
# Локальный просмотр production-сборки
npm run preview # Поднимает статический сервер из dist/

Для SSR-режима необходим адаптер — он рассказывает Astro, как запускать сервер на конкретной платформе.

Окно терминала
npx astro add vercel
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel({
edgeMiddleware: true, // Edge Functions для middleware
functionPerRoute: false,
}),
});

Поддерживает: Serverless Functions, Edge Functions, ISR (Incremental Static Regeneration).

Окно терминала
npx astro add netlify
import netlify from '@astrojs/netlify';
export default defineConfig({
output: 'server',
adapter: netlify({
edgeMiddleware: false, // Netlify Edge Functions
}),
});
Окно терминала
npx astro add cloudflare
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare({
mode: 'directory', // 'directory' | 'advanced'
runtime: {
mode: 'local',
type: 'pages',
},
}),
});

Cloudflare Workers работают на V8-движке, поэтому Node.js API недоступен. Используйте runtime.getRuntime(Astro.locals) для доступа к Cloudflare-биндингам.

Окно терминала
npx astro add node
import node from '@astrojs/node';
export default defineConfig({
output: 'server',
adapter: node({
mode: 'standalone', // Создаёт self-contained сервер
}),
});

Режим standalone генерирует dist/server/entry.mjs — запускается как обычный Node.js-сервер.

Для output: 'static' адаптер не нужен. После сборки содержимое папки dist/ можно загрузить на любой хостинг:

  • GitHub Pages — бесплатно для публичных репозиториев
  • Netlify Drop — просто перетащите папку
  • Cloudflare Pages — CI/CD из Git-репозитория
  • AWS S3 + CloudFront — масштабируемое решение
Окно терминала
# .env (не коммитить в git!)
DATABASE_URL=postgresql://...
SECRET_KEY=super-secret
# .env.example (шаблон для команды)
DATABASE_URL=
SECRET_KEY=

В Astro переменные с префиксом PUBLIC_ доступны на клиенте:

// Доступно везде (клиент + сервер)
const apiUrl = import.meta.env.PUBLIC_API_URL;
// Только на сервере
const secret = import.meta.env.SECRET_KEY;