34. Деплой и адаптеры
Astro поддерживает множество платформ для деплоя: от полностью статического хостинга до серверного рендеринга на edge-функциях. Выбор зависит от того, как вы рендерите страницы.
Режимы вывода
Заголовок раздела «Режимы вывода»Astro поддерживает три режима вывода:
static(по умолчанию) — все страницы генерируются при сборке. Отдаётся как статические файлы.server— все страницы рендерятся на сервере по запросу (SSR).hybrid— по умолчанию SSR, но отдельные страницы можно сделать статическими черезexport const prerender = true.
export default defineConfig({ output: 'server', // 'static' | 'server' | 'hybrid' adapter: netlify(),});Сборка и превью
Заголовок раздела «Сборка и превью»# Сборка для productionnpm run build # Создаёт папку dist/
# Локальный просмотр production-сборкиnpm run preview # Поднимает статический сервер из dist/Адаптеры
Заголовок раздела «Адаптеры»Для SSR-режима необходим адаптер — он рассказывает Astro, как запускать сервер на конкретной платформе.
@astrojs/vercel
Заголовок раздела «@astrojs/vercel»npx astro add vercelimport { 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).
@astrojs/netlify
Заголовок раздела «@astrojs/netlify»npx astro add netlifyimport netlify from '@astrojs/netlify';
export default defineConfig({ output: 'server', adapter: netlify({ edgeMiddleware: false, // Netlify Edge Functions }),});@astrojs/cloudflare
Заголовок раздела «@astrojs/cloudflare»npx astro add cloudflareimport 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-биндингам.
@astrojs/node
Заголовок раздела «@astrojs/node»npx astro add nodeimport 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;