Что вам понадобится
Вам нужны три вещи: приложение Next.js (подойдёт и существующее), Git-репозиторий для него (GitHub работает «из коробки») и аккаунт cdn.com.tr. Вам не придётся разворачивать сервер, устанавливать Node на VM или настраивать reverse proxy — платформа берёт на себя среду выполнения, TLS и доставку. Единственное изменение на стороне приложения — указать Next.js собирать автономную сборку, чтобы она чисто работала в контейнере.
Подготовьте приложение к контейнеризации
Сначала включите standalone-вывод Next.js. Он упаковывает только те файлы, которые нужны серверу, что делает образ маленьким, а контейнер — простым.
next.config.js
// next.config.js
module.exports = {
output: 'standalone',
};
Добавьте Dockerfile
Небольшой многоэтапный Dockerfile собирает приложение на одном этапе и передаёт на следующий только результат сборки для выполнения. Закоммитьте этот файл в корень репозитория.
Dockerfile
# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Runtime stage
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]
Деплой из Git (рекомендуется)
В панели cdn.com.tr создайте container app и подключите свой Git-репозиторий. Платформа читает ваш Dockerfile, собирает образ и запускает контейнер — сервер сборки поддерживать не нужно. После этого деплой — это просто push в вашу ветку: каждый push запускает новую сборку и выкатку без простоя.
Выпустите изменение
git add .
git commit -m "Update homepage"
git push origin main
# cdn.com.tr builds the new image and rolls it out automatically
Или разверните через CLI cdnctl
Предпочитаете командную строку или CI-пайплайн? Операторский CLI cdnctl управляет вашими container apps как кодом. Войдите один раз, выберите свой аккаунт, затем создайте приложение из образа, который вы отправили в registry, — и используйте тот же инструмент, чтобы смотреть логи в реальном времени, масштабировать или откатывать. Именно это делает cdn.com.tr быстрым для выпуска: одна команда вместо кликов по консоли.
cdnctl login
cdnctl accounts use <account_uuid>
# create the app from your pushed image, on your domain
cdnctl container apps create \
--name my-nextjs \
--image registry.example.com/acme/my-nextjs --tag 1.0.0 \
--port 3000 --domain app.example.com \
--healthcheck /api/health --healthcheck-type http
# then, anytime:
cdnctl container apps logs --app <app_uuid> --tail 100
cdnctl container apps scale --app <app_uuid> --replicas 2
cdnctl container apps deploy --app <app_uuid>
Собственный домен, HTTPS и edge
Направьте домен на приложение, и cdn.com.tr автоматически выпустит и продлит SSL-сертификат — без ручного certbot. Ваше приложение Next.js теперь работает за CDN edge, так что статические ресурсы кешируются и доставляются близко к каждому посетителю, WAF фильтрует вредоносный трафик, а всплески трафика поглощаются на edge, а не бьют по одному контейнеру. Вы получаете быстрый, безопасный production-деплой Next.js без управления инфраструктурой под ним.
Кому подходит
Страницы Next.js, отдаваемые с edge, загружаются быстро по всему миру и остаются доступными во время запуска или вирусного всплеска.
Запускайте маршруты API и SSR вашего Next.js как управляемый контейнер с автоматическим HTTPS и WAF на входе.
Деплой через git push с выкаткой без простоя подходит для CI и частых релизов без нянчения с серверами.
Вопросы и ответы о деплое Next.js
Работают ли SSR и маршруты API, или только статический экспорт?
Работает и то, и другое. Поскольку приложение работает как настоящий Node-контейнер (а не статический экспорт), серверный рендеринг, маршруты API и middleware работают в обычном режиме. CDN кеширует то, что можно кешировать, и пропускает динамические запросы к контейнеру.
Как работают обновления и откаты?
Каждый push в подключённую ветку собирает новый образ и выкатывает его без простоя. Если сборка не удалась, продолжает работать предыдущая версия, так что неудачный коммит не кладёт сайт.
Нужно ли мне управлять сервером, версией Node или SSL?
Нет. Среда выполнения контейнера, масштабирование, TLS-сертификаты и edge управляются за вас. Вы контролируете приложение и его Dockerfile; инфраструктура под ним обслуживается платформой.