К основному содержанию
скилл CX Codex

nextjs-deployment — скилл для Claude Code: что делает и как установить

Готовит конфигурацию для деплоя Next.js в продакшен. Настраивает многоэтапный Dockerfile, CI/CD через GitHub Actions, мониторинг OpenTelemetry и проверку работоспособности сервиса.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill nextjs-deployment -a claude-code
Открыть на GitHub

Что делает nextjs-deployment

Скилл генерирует конфигурации для продакшен-окружения Next.js. Он переводит сборку в режим output: 'standalone' в файле next.config.ts, чтобы контейнер не тянул лишние зависимости. В поставку входит многоэтапный Dockerfile на базе Node 20 Alpine с непривилегированным пользователем nextjs и встроенным хелсчеком по адресу /api/health.

Для автоматизации развёртывания скилл создаёт пайплайн GitHub Actions с кешированием слоёв Docker и сборкой под GHCR. В код проекта добавляются валидация переменных окружения и базовая телеметрия через @vercel/otel в instrumentation.ts.

Если запускать приложение на нескольких серверах без переменной NEXT_SERVER_ACTIONS_ENCRYPTION_KEY, вызовы Server Actions завершатся ошибкой. Скилл сразу генерирует этот ключ через OpenSSL и прокидывает его аргументом сборки.

Какие задачи решает

  • настроить многоэтапную сборку Next.js в Docker
  • создать пайплайн GitHub Actions для публикации в GHCR
  • добавить эндпоинт проверки здоровья /api/health
  • подключить трассировку OpenTelemetry через instrumentation.ts
  • защитить Server Actions общим ключом шифрования при масштабировании

Примеры запросов агенту

  • Настрой production Dockerfile для Next.js с режимом standalone и проверкой здоровья
  • Сделай воркфлоу GitHub Actions для сборки и пуша контейнера Next.js в GHCR
  • Добавь в проект Next.js валидацию переменных окружения и эндпоинт /api/health

Как установить nextjs-deployment

1Через Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill nextjs-deployment -a claude-code

2Вручную: положить файлы

~/.claude/skills/nextjs-deployment/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nextjs-deployment/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о nextjs-deployment

Как установить nextjs-deployment в Claude Code?

Выполните команду npx skills add giuseppe-trisciuoglio/developer-kit --skill nextjs-deployment -a claude-code. Агент загрузит инструкции и добавит их в рабочее окружение.

Что делает скилл nextjs-deployment?

Скилл даёт агенту готовые инструкции и паттерны для развёртывания Next.js: создание изолированных контейнеров, автоматизацию релизов и сбор метрик.

Зачем нужен ключ NEXT_SERVER_ACTIONS_ENCRYPTION_KEY?

При горизонтальном масштабировании на несколько серверов разные инстансы должны расшифровывать Server Actions одним ключом. Без общей переменной NEXT_SERVER_ACTIONS_ENCRYPTION_KEY запросы будут завершаться сбоем.

Исходный текст

SKILL.md · MIT
---
name: nextjs-deployment
description: Provides comprehensive patterns for deploying Next.js applications to production. Use when configuring Docker containers, setting up GitHub Actions CI/CD pipelines, managing environment variables, implementing preview deployments, or setting up monitoring and logging for Next.js applications. Covers standalone output, multi-stage Docker builds, health checks, OpenTelemetry instrumentation, and production best practices.
allowed-tools: Read, Write, Edit, Bash
---

# Next.js Deployment

Deploy Next.js applications to production with Docker, CI/CD pipelines, and comprehensive monitoring.

## Overview

This skill provides patterns and code examples for deploying Next.js applications to production environments. It covers containerization with Docker, CI/CD automation with GitHub Actions, environment configuration, health checks, and production monitoring. Use standalone output mode for container deployments, multi-stage Docker builds for optimized images, and OpenTelemetry for observability.

## When to Use

Activate when user requests involve:
- "Deploy Next.js", "Dockerize Next.js", "containerize"
- "GitHub Actions", "CI/CD pipeline", "automated deployment"
- "Environment variables", "runtime config", "NEXT_PUBLIC"
- "Preview deployment", "staging environment"
- "Monitoring", "OpenTelemetry", "tracing", "logging"
- "Health checks", "readiness", "liveness"
- "Production build", "standalone output"
- "Server Actions encryption key", "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY"

## Quick Reference

### Output Modes

| Mode | Use Case | Command |
|------|----------|---------|
| `standalone` | Docker/container deployment | `output: 'standalone'` |
| `export` | Static site (no server) | `output: 'export'` |
| (default) | Node.js server deployment | `next start` |

### Environment Variable Types

| Prefix | Availability | Use Case |
|--------|--------------|----------|
| `NEXT_PUBLIC_` | Build-time + Browser | Public API keys, feature flags |
| (no prefix) | Server-only | Database URLs, secrets |
| Runtime | Server-only | Different values per environment |

### Key Files

| File | Purpose |
|------|---------|
| `Dockerfile` | Multi-stage container build |
| `.github/workflows/deploy.yml` | CI/CD pipeline |
| `next.config.ts` | Build configuration |
| `instrumentation.ts` | OpenTelemetry setup |
| `src/app/api/health/route.ts` | Health check endpoint |

## Instructions

### 1. Configure Standalone Output

```typescript
// next.config.ts
import type { NextConfig } from 'next'

const nextConfig: NextConfig = {
  output: 'standalone',
  poweredByHeader: false,
  generateBuildId: async () => process.env.GIT_HASH || 'build',
}

export default nextConfig
```

### 2. Create Dockerfile

See [references/docker-patterns.md](references/docker-patterns.md) for complete multi-stage builds, multi-arch support, and optimization.

```dockerfile
# syntax=docker/dockerfile:1
FROM node:20-alpine AS base

FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci

FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1 NODE_ENV=production
ARG GIT_HASH NEXT_SERVER_ACTIONS_ENCRYPTION_KEY
ENV GIT_HASH=${GIT_HASH} NEXT_SERVER_ACTIONS_ENCRYPTION_KEY=${NEXT_SERVER_ACTIONS_ENCRYPTION_KEY}
RUN npm run build

FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production NEXT_TELEMETRY_DISABLED=1 PORT=3000 HOSTNAME="0.0.0.0"
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
  CMD node -e "require('http').get('http://localhost:3000/api/health', (r) => r.statusCode === 200 ? process.exit(0) : process.exit(1))"
CMD ["node", "server.js"]
```

### 3. Set Up GitHub Actions

See [references/github-actions.md](references/github-actions.md) for complete workflows with testing, security scanning, and deployment strategies.

```yaml
# .github/workflows/deploy.yml
name: Build and Deploy
on:
  push:
    branches: [main, develop]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - id: meta
        uses: docker/metadata-action@v5
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
      - id: generate-key
        run: echo "key=$(openssl rand -base64 32)" >> $GITHUB_OUTPUT
      - uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
          build-args: |
            GIT_HASH=${{ github.sha }}
            NEXT_SERVER_ACTIONS_ENCRYPTION_KEY=${{ steps.generate-key.outputs.key }}
```

### 4. Configure Environment Variables

```typescript
// src/lib/env.ts
export function getEnv() {
  return {
    databaseUrl: process.env.DATABASE_URL!,
    apiKey: process.env.API_KEY!,
    publicApiUrl: process.env.NEXT_PUBLIC_API_URL!,
  }
}

export function validateEnv() {
  const required = ['DATABASE_URL', 'API_KEY', 'NEXT_PUBLIC_API_URL']
  const missing = required.filter((key) => !process.env[key])
  if (missing.length > 0) {
    throw new Error(`Missing required environment variables: ${missing.join(', ')}`)
  }
}
```

### 5. Implement Health Checks

```typescript
// src/app/api/health/route.ts
import { NextResponse } from 'next/server'

export const dynamic = 'force-dynamic'

export async function GET() {
  const checks = {
    status: 'healthy',
    timestamp: new Date().toISOString(),
    version: process.env.npm_package_version || 'unknown',
    uptime: process.uptime(),
  }
  return NextResponse.json(checks)
}
```

### 6. Set Up Monitoring

See [references/monitoring.md](references/monitoring.md) for OpenTelemetry configuration, logging, alerting, and dashboards.

```typescript
// instrumentation.ts
import { registerOTel } from '@vercel/otel'

export function register() {
  registerOTel({
    serviceName: process.env.OTEL_SERVICE_NAME || 'next-app',
  })
}
```

### 7. Handle Server Actions Encryption

**CRITICAL**: Generate and set consistent encryption key for multi-server deployments:

```bash
# Generate key
openssl rand -base64 32

# Set in GitHub Actions Secrets as NEXT_SERVER_ACTIONS_ENCRYPTION_KEY
```

Without this key, Server Actions fail with "Failed to find Server Action" errors in multi-server deployments.

## Best Practices

- **Docker**: Use multi-stage builds, enable standalone output, set non-root user, include health checks
- **Security**: Never commit `.env.local`, use `NEXT_PUBLIC_` only for public values, set `NEXT_SERVER_ACTIONS_ENCRYPTION_KEY`
- **Performance**: Use `output: 'standalone'`, enable CDN for static assets, use `next/image`
- **Environment**: Use same Docker image across environments, inject runtime config via env vars

## Examples

```typescript
// next.config.ts
const nextConfig = {
  output: 'standalone',
  poweredByHeader: false,
  compress: true,
  generateBuildId: async () => process.env.GIT_HASH || 'build',
}
export default nextConfig
```

```yaml
# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://db:5432/myapp
      - NEXT_PUBLIC_API_URL=http://localhost:3000/api
```

## Constraints and Warnings

### Constraints

- Standalone output requires Node.js 18+
- Server Actions encryption key must be consistent across all instances
- Runtime environment variables only work with `output: 'standalone'`
- OpenTelemetry requires instrumentation.ts at project root

### Warnings

- **Never** use `NEXT_PUBLIC_` prefix for sensitive values
- Always set `NEXT_SERVER_ACTIONS_ENCRYPTION_KEY` for multi-server deployments
- Without health checks, orchestrators may send traffic to unhealthy instances
- Runtime env vars don't work with static export (`output: 'export'`)

## References

- **[references/docker-patterns.md](references/docker-patterns.md)** - Advanced Docker configurations, multi-arch builds, optimization
- **[references/github-actions.md](references/github-actions.md)** - Complete CI/CD workflows, testing, security scanning
- **[references/monitoring.md](references/monitoring.md)** - OpenTelemetry, logging, alerting, dashboards
- **[references/deployment-platforms.md](references/deployment-platforms.md)** - Platform-specific guides (Vercel, AWS, GCP, Azure)

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Похожие скиллы

Всё по теме «DevOps и инфраструктура» →
deployment-patterns affaan-m Скилл со стратегиями деплоя, шаблонами многоэтапных Dockerfile и CI/CD-пайплайнами для веб-сервисов. Пригодится при настройке релизов и контейнеризации. CX Codex +1 4 800установок aspire-deployment Microsoft Скилл ведёт деплой Aspire-приложения от модели AppHost до Docker Compose, Kubernetes, Azure, AWS или Radius. Пригодится, когда нужно опубликовать артефакты или снести развёрнутые ресурсы. CX Codex +1 616установок docker-deployment pluginagentmarketplace Скилл помогает контейнеризировать Node.js-приложение: Dockerfile, multi-stage сборка, Docker Compose и подготовка образа к продакшену. CX Codex +1 523установок qdrant-deployment-options официальный github Помогает выбрать способ развертывания векторной базы Qdrant под конкретные требования к задержке сети, контролю данных и масштабированию. 61установок github-actions-workflow aj-geddes Скилл для сборки GitHub Actions: тесты, сборка, сканирование безопасности и деплой прямо из репозитория. CX Codex +1 620установок vercel-deployment sickn33 Скилл подготавливает и запускает деплой Next.js-проекта на Vercel. Пригодится, когда нужно настроить превью-окружение, проверить переменные среды и убедиться, что сборка пройдёт без ошибок. CX Codex +1 1 800установок

Из того же набора93

aws-sdk-java-v2-kms Скилл даёт Java-примеры для AWS KMS: ключи, шифрование, расшифровка, data keys и подписи. Нужен при интеграции KMS со Spring Boot. CX Codex +1 3 700установок aws-sdk-java-v2-secrets-manager Скилл для работы с AWS Secrets Manager из Java-сервисов: чтение секретов, кэш, ротация и связка со Spring Boot. CX Codex +1 3 700установок aws-sdk-java-v2-messaging Набор шаблонов для работы с очередями AWS SQS и топиками SNS через AWS SDK for Java 2.x. Помогает настроить клиентов, long polling, DLQ и публикацию событий в Java или Spring Boot. CX Codex +1 3 700установок aws-sdk-java-v2-bedrock Скилл подсказывает агенту, как вызывать модели Amazon Bedrock через AWS SDK for Java 2.x: текст, картинки, эмбеддинги и стриминг. CX Codex +1 3 700установок aws-sdk-java-v2-lambda Скилл подсказывает агенту, как вызывать и обновлять функции AWS Lambda через AWS SDK for Java 2.x. Пригодится, если пишешь на Java и работаешь с Lambda. CX Codex +1 3 700установок aws-rds-spring-boot-integration Скилл подсказывает, как подключить Aurora, MySQL или PostgreSQL к Spring Boot: пул HikariCP, SSL, IAM-аутентификация, секреты. CX Codex +1 3 700установок aws-sdk-java-v2-dynamodb Скилл даёт шаблоны работы с Amazon DynamoDB через AWS SDK for Java 2.x и Enhanced Client. Он помогает настроить типизированный CRUD, запросы по ключам и транзакции в Spring Boot. CX Codex +1 3 700установок langchain4j-testing-strategies Помогает тестировать Java-приложения на LangChain4j: от моков ChatModel до RAG-пайплайнов и интеграции с Testcontainers. CX Codex +1 3 700установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой