به چه چیزی نیاز دارید
به سه چیز نیاز دارید: یک اپلیکیشن Next.js (یک اپلیکیشن موجود هم خوب است)، یک مخزن Git برای آن (GitHub بدون دردسر کار میکند)، و یک حساب cdn.com.tr. نیازی نخواهید داشت که یک سرور تأمین کنید، Node را روی یک VM نصب کنید، یا یک reverse proxy پیکربندی کنید — پلتفرم محیط اجرا، TLS و تحویل را مدیریت میکند. تنها تغییر سمت اپلیکیشن این است که به Next.js بگویید یک بیلد خودکفا تولید کند تا در یک کانتینر تمیز اجرا شود.
اپلیکیشن را برای یک کانتینر آماده کنید
ابتدا، خروجی standalone در Next.js را فعال کنید. این کار فقط فایلهایی را که سرور نیاز دارد بستهبندی میکند، که image را کوچک و کانتینر را ساده نگه میدارد.
next.config.js
// next.config.js
module.exports = {
output: 'standalone',
};
یک Dockerfile اضافه کنید
یک Dockerfile کوچک چندمرحلهای اپلیکیشن را در یک مرحله میسازد و فقط خروجی محیط اجرا را در مرحله بعد عرضه میکند. این فایل را به ریشه مخزن خود commit کنید.
Dockerfile
# مرحله بیلد
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# مرحله اجرا
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، یک اپلیکیشن کانتینری بسازید و مخزن Git خود را متصل کنید. پلتفرم Dockerfile شما را میخواند، image را میسازد و کانتینر را اجرا میکند — بدون سرور بیلدی برای نگهداری. از آن پس، استقرار فقط push به شاخه شماست: هر push یک بیلد تازه و یک عرضه بدون زمان توقف را راه میاندازد.
یک تغییر را عرضه کنید
git add .
git commit -m "Update homepage"
git push origin main
# cdn.com.tr بهطور خودکار image جدید را میسازد و عرضه میکند
یا با CLI بهنام cdnctl مستقر کنید
خط فرمان یا یک pipeline مربوط به CI را ترجیح میدهید؟ CLI عملیاتی cdnctl اپلیکیشنهای کانتینری شما را بهصورت کد مدیریت میکند. یک بار وارد شوید و حساب خود را انتخاب کنید، سپس اپلیکیشن را از یک image که به یک registry push کردهاید بسازید — و از همان ابزار برای stream کردن لاگها، مقیاسدهی یا rollback استفاده کنید. همین است که cdn.com.tr را برای عرضه سریع میکند: یک دستور بهجای کلیککردن در یک کنسول.
cdnctl login
cdnctl accounts use <account_uuid>
# ساخت اپلیکیشن از image پوششده، روی دامنه شما
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
# سپس، هر زمان:
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 شما پشت edge شبکه CDN اجرا میشود، پس داراییهای ثابت کش و نزدیک هر بازدیدکننده تحویل داده میشوند، یک WAF ترافیک مخرب را فیلتر میکند، و هجومهای ترافیک بهجای کوبیدن یک کانتینر واحد در edge جذب میشوند. یک استقرار تولیدی سریع، امن و Next.js به دست میآورید بدون ادارهکردن هیچیک از زیرساختهای زیر آن.
موارد مناسب
صفحات Next.js که از edge سرویس میشوند در سراسر جهان سریع بار میشوند و در یک عرضه یا لحظه وایرال پابرجا میمانند.
مسیرهای API و SSR مربوط به Next.js خود را بهعنوان یک کانتینر مدیریتشده با HTTPS خودکار و یک WAF در جلو اجرا کنید.
استقرارهای git-push با عرضههای بدون زمان توقف با CI و انتشارهای مکرر جور درمیآیند، بدون مراقبت از سرور.
پرسشهای پرتکرار استقرار Next.js
آیا SSR و مسیرهای API کار میکنند یا فقط خروجی استاتیک؟
هر دو کار میکنند. چون اپلیکیشن بهعنوان یک کانتینر واقعی Node اجرا میشود (نه یک خروجی استاتیک)، رندر سمت سرور، مسیرهای API و middleware همه بهطور عادی اجرا میشوند. CDN آنچه قابل کش است را کش میکند و درخواستهای پویا را به کانتینر عبور میدهد.
بهروزرسانیها و rollbackها چگونه کار میکنند؟
هر push به شاخه متصل شما یک image جدید میسازد و آن را با صفر زمان توقف عرضه میکند. اگر یک بیلد ناموفق باشد، نسخه قبلی همچنان سرویس میدهد، پس یک commit خراب سایت شما را از دسترس خارج نمیکند.
آیا باید سرور، نسخه Node یا SSL را مدیریت کنم؟
خیر. محیط اجرای کانتینر، مقیاسدهی، گواهیهای TLS و edge برای شما مدیریت میشوند. شما اپلیکیشن و Dockerfile آن را کنترل میکنید؛ زیرساخت زیر آن اداره میشود.