فصل دهم: استقرار (Deployment)
در این فصل، به فرآیند استقرار اپلیکیشن مرکز اجاره کشتیهای کروز با استفاده از Nuxt 3 میپردازیم. استقرار شامل ساخت اپلیکیشن، انتخاب پلتفرم مناسب برای میزبانی، مدیریت متغیرهای محیطی، و تنظیم یکپارچگی و تحویل مداوم (CI/CD) است. این مراحل تضمین میکنند که اپلیکیشن بهصورت ایمن، مقیاسپذیر و با عملکرد بالا در دسترس کاربران قرار گیرد. در ادامه، هر بخش بهطور کامل توضیح داده شده و دستورات و نکات مربوطه شرح داده میشوند.
ساخت اپلیکیشن (Build)
برای آمادهسازی اپلیکیشن برای استقرار، باید آن را به یکی از دو حالت رندر سمت سرور (SSR) یا تولید سایت استاتیک (SSG) بسازیم. Nuxt 3 از هر دو حالت پشتیبانی میکند و انتخاب بین آنها به نیازهای پروژه بستگی دارد.
دستورات:
- برای SSR:
npm run build
- برای SSG:
npm run generate
توضیحات:
-
ساخت SSR (
npm run build): -
این دستور اپلیکیشن را برای رندر سمت سرور آماده میکند.
- خروجی در پوشه
.output/قرار میگیرد و شامل فایلهای سرور و کلاینت است. - کاربرد: مناسب برای اپلیکیشنهایی که محتوای پویا دارند (مانند داشبورد رزروها که به دادههای کاربر وابسته است).
- مزایا:
- پشتیبانی از محتوای پویا و بهروزرسانیهای بلادرنگ.
- مناسب برای صفحاتی که نیاز به رندر در زمان درخواست دارند.
-
نیازمندیها: نیاز به یک سرور Node.js یا پلتفرمی مانند Vercel برای اجرای اپلیکیشن.
-
ساخت SSG (
npm run generate): -
این دستور تمام صفحات را بهصورت فایلهای HTML استاتیک تولید میکند.
- خروجی در پوشه
dist/قرار میگیرد. - کاربرد: مناسب برای صفحاتی با محتوای ثابت یا نیمهثابت (مانند صفحه اصلی یا صفحه جزئیات کشتیها).
- مزایا:
- سرعت بسیار بالا به دلیل ارائه فایلهای استاتیک.
- هزینه میزبانی کمتر (مناسب برای CDNها یا پلتفرمهای استاتیک).
- بهینه برای سئو، زیرا HTML از قبل تولید شده است.
-
یادداشت: برای صفحات پویا (مانند داشبورد رزروها)، باید از APIهای سمت کلاینت یا Incremental Static Regeneration (ISR) استفاده شود.
-
انتخاب بین SSR و SSG:
-
در این پروژه، از رندر ترکیبی (Hybrid Rendering) استفاده شده است (همانطور که در فصل اول توضیح داده شد). میتوان صفحات ثابت مانند صفحه اصلی و لیست کشتیها را با SSG و صفحات پویا مانند داشبورد رزروها را با SSR رندر کرد.
- برای فعال کردن رندر ترکیبی، از تنظیمات
routeRulesدرnuxt.config.tsاستفاده کنید:
export default defineNuxtConfig({
routeRules: {
'/': { prerender: true }, // SSG برای صفحه اصلی
'/ships': { prerender: true }, // SSG برای لیست کشتیها
'/ships/**': { prerender: true }, // SSG برای جزئیات کشتیها
'/bookings': { ssr: true }, // SSR برای داشبورد رزروها
},
});
-
اجرای محلی خروجی:
-
برای تست خروجی SSR:
npm run start
- برای پیشنمایش خروجی SSG:
npm run preview
استقرار (Deploy)
برای میزبانی اپلیکیشن، میتوان از پلتفرمهای محبوبی مانند Vercel، Netlify یا Cloudflare Pages استفاده کرد. این پلتفرمها با Nuxt 3 سازگار هستند و فرآیند استقرار را ساده میکنند.
گزینههای استقرار:
-
Vercel:
-
چرا مناسب است؟:
- ادغام بومی با Nuxt 3 و موتور Nitro.
- پشتیبانی از SSR، SSG و رندر ترکیبی.
- قابلیتهایی مانند پیشنمایش خودکار (Preview Deployments) و مقیاسپذیری خودکار.
- مراحل استقرار:
- پروژه را به یک مخزن Git (مانند GitHub) push کنید.
- در Vercel، یک پروژه جدید ایجاد کرده و مخزن را متصل کنید.
- تنظیمات پیشفرض Vercel معمولاً برای Nuxt مناسب هستند (دستور ساخت:
npm run buildیاnpm run generate). - متغیرهای محیطی (مانند
API_BASE) را در داشبورد Vercel تنظیم کنید.
-
مزایا:
- استقرار سریع و خودکار.
- پشتیبانی از دامنههای سفارشی و HTTPS رایگان.
- قابلیت ISR برای بهروزرسانی محتوای استاتیک.
-
Netlify:
-
چرا مناسب است؟:
- ایدهآل برای پروژههای SSG.
- پشتیبانی از توابع سرور (Serverless Functions) برای APIهای پویا.
- مراحل استقرار:
- مخزن پروژه را به Netlify متصل کنید.
- تنظیمات ساخت را مشخص کنید:
- دستور ساخت:
npm run generate(برای SSG) یاnpm run build(برای SSR). - پوشه خروجی:
dist/(برای SSG) یا.output/public/(برای SSR).
- دستور ساخت:
- متغیرهای محیطی را در تنظیمات Netlify اضافه کنید.
-
مزایا:
- رابط کاربری ساده برای مدیریت استقرار.
- پشتیبانی از Rollback و پیشنمایش شعبهها.
-
Cloudflare Pages:
-
چرا مناسب است؟:
- عملکرد بالا با شبکه CDN جهانی Cloudflare.
- مناسب برای پروژههای SSG و SSR با ادغام Cloudflare Workers.
- مراحل استقرار:
- پروژه را به GitHub push کنید.
- در Cloudflare Pages، مخزن را متصل کنید.
- تنظیمات ساخت را مشابه Vercel یا Netlify وارد کنید.
- متغیرهای محیطی را در داشبورد Cloudflare تنظیم کنید.
-
مزایا:
- سرعت بالا به دلیل CDN قدرتمند.
- هزینه کم برای پروژههای کوچک.
-
انتخاب پلتفرم:
-
برای این پروژه، Vercel به دلیل ادغام قوی با Nuxt و پشتیبانی از رندر ترکیبی توصیه میشود.
- اگر پروژه کاملاً استاتیک باشد، Netlify یا Cloudflare Pages گزینههای سبکتری هستند.
متغیرهای محیطی (Environment Variables)
متغیرهای محیطی برای ذخیره اطلاعات حساس (مانند کلیدهای API) یا تنظیمات پویا (مانند URL پایه API) استفاده میشوند. در این پروژه، از useRuntimeConfig برای دسترسی به این متغیرها استفاده شده است.
مراحل:
-
ایجاد فایل
.env: -
فایل
.envرا در ریشه پروژه ایجاد کنید:
API_BASE=https://api.example.com
- این فایل شامل متغیرهایی مانند
API_BASEاست که درnuxt.config.tsاستفاده شده است:
runtimeConfig: {
public: {
apiBase: process.env.API_BASE || '/api',
},
},
-
دسترسی به متغیرها:
-
در کد، از
useRuntimeConfigبرای دسترسی به متغیرها استفاده کنید:
const config = useRuntimeConfig();
const apiBase = config.public.apiBase; // به '/api' یا مقدار API_BASE اشاره میکند
-
تنظیم در پلتفرم میزبانی:
-
در Vercel، Netlify یا Cloudflare Pages، متغیرهای محیطی را در داشبورد پروژه اضافه کنید.
-
برای مثال، در Vercel:
- به بخش Settings > Environment Variables بروید.
- متغیر
API_BASEرا با مقدار مورد نظر (مانندhttps://api.example.com) اضافه کنید.
-
مزایا:
-
امنیت: متغیرهای حساس (مانند کلیدهای API) در فایل
.envذخیره میشوند و در مخزن Git آپلود نمیشوند (با افزودن.envبه.gitignore). - انعطافپذیری: امکان تغییر تنظیمات بدون تغییر کد.
-
سازگاری:
useRuntimeConfigدسترسی یکپارچه به متغیرها در سمت سرور و کلاینت را فراهم میکند. -
یادداشت:
-
اطمینان حاصل کنید که فایل
.envدر.gitignoreقرار دارد تا اطلاعات حساس به مخزن عمومی آپلود نشود. - برای متغیرهای عمومی (مانند
apiBase)، ازpublicدرruntimeConfigاستفاده کنید تا در سمت کلاینت نیز در دسترس باشند.
یکپارچگی و تحویل مداوم (CI/CD)
CI/CD (Continuous Integration/Continuous Deployment) فرآیند خودکارسازی تست و استقرار کد است. در این پروژه، از GitHub Actions برای تنظیم CI/CD استفاده میکنیم.
مراحل تنظیم:
-
ایجاد فایل GitHub Actions:
-
فایل
.github/workflows/ci.ymlرا در ریشه پروژه ایجاد کنید:
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install
- run: npm run test
deploy:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install
- run: npm run generate
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
-
توضیحات فایل CI/CD:
-
name: نام Workflow (در اینجا "CI/CD Pipeline").
- on: مشخص میکند که Workflow در چه رویدادهایی اجرا شود (push یا pull request به شاخه
main). - jobs:
- test: تستهای واحد را با استفاده از
npm run testاجرا میکند. - نصب Node.js و وابستگیها.
- اجرای تستها با Vitest.
- deploy: در صورت موفقیت تستها و push به شاخه
main، اپلیکیشن را به Vercel مستقر میکند. - ساخت پروژه با
npm run generate(برای SSG). - استفاده از
vercel-actionبرای استقرار به Vercel.
- test: تستهای واحد را با استفاده از
-
متغیرهای حساس:
VERCEL_TOKEN,VERCEL_ORG_ID,VERCEL_PROJECT_ID: این مقادیر باید در تنظیمات GitHub Secrets اضافه شوند.- در GitHub، به Settings > Secrets and variables > Actions بروید و این مقادیر را از داشبورد Vercel کپی کنید.
-
مزایا:
-
تست خودکار: تستهای واحد قبل از هر استقرار اجرا میشوند تا از صحت کد اطمینان حاصل شود.
- استقرار خودکار: هر push به شاخه
mainاپلیکیشن را بهروز میکند. -
صرفهجویی در زمان: فرآیندهای دستی کاهش مییابد.
-
گسترش CI/CD:
-
میتوان مراحل اضافی مانند تستهای End-to-End (با Playwright یا Cypress) یا بررسیهای Lint را اضافه کرد.
- برای مثال، افزودن ESLint:
- run: npm run lint
جمعبندی فصل دهم
در این فصل، فرآیند استقرار اپلیکیشن مرکز اجاره کشتیهای کروز را بررسی کردیم:
- ساخت: استفاده از
npm run buildبرای SSR وnpm run generateبرای SSG، با پشتیبانی از رندر ترکیبی. - استقرار: استفاده از پلتفرمهای Vercel، Netlify یا Cloudflare Pages برای میزبانی ساده و مقیاسپذیر.
- متغیرهای محیطی: مدیریت تنظیمات حساس با
.envوuseRuntimeConfig. - CI/CD: تنظیم GitHub Actions برای تست و استقرار خودکار.
این مراحل اپلیکیشن را آماده بهرهبرداری در محیط واقعی میکنند و با استفاده از ابزارهای مدرن، فرآیند توسعه و نگهداری را سادهتر و ایمنتر میسازند. این فصل پایان آموزش ساخت اپلیکیشن با Nuxt 3 است، اما میتوانید با افزودن ویژگیهایی مانند احراز هویت پیشرفته یا محلیسازی، پروژه را گسترش دهید.