نحوه Dockerize SvelteKit – انجمن DEV

سلام! این راهنما به شما کمک میکند تا برنامه SvelteKit خود را محفظهبندی کنید و استقرار و مدیریت آن را آسانتر کند. نکته مهم: این SvelteKit است، نه Svelte! 🙂
راه اندازی
اگر پروژه SvelteKit ندارید، میتوانید با اجرای:
npx sv create my-svelte-app --template demo --types ts
ابتدا باید SvelteKit را برای استفاده از Adapter-node تنظیم کنیم. این آداپتور به ساخت سایت شما برای Node.js کمک می کند، که برای Containerization بسیار مهم است.
با نصب گره آداپتور شروع کنید:
npm i -D @sveltejs/adapter-node
پس از نصب، خود را باز کنید svelte.config.js
فایل کنید و آداپتور را برای استفاده از adapter-node تغییر دهید:
// svelte.config.js
- import adapter from '@sveltejs/adapter-auto';
+ import adapter from '@sveltejs/adapter-node';
حالا بیایید Dockerfile را ایجاد کنیم. این فایل به Docker می گوید که چگونه برنامه SvelteKit خود را بسازد و اجرا کند. شکل Dockerfile ممکن است به صورت زیر باشد:
# Use a Node.js Alpine image for the builder stage
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
RUN npm prune --production
# Use another Node.js Alpine image for the final stage
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/build build/
COPY --from=builder /app/node_modules node_modules/
COPY package.json .
EXPOSE 3000
ENV NODE_ENV=production
CMD [ "node", "build" ]
بیایید Dockerfile را تجزیه کنیم:
-
مرحله سازنده: با یک تصویر Node.js Alpine شروع می کنیم، دایرکتوری کاری را روی آن تنظیم می کنیم
/app
فایلهای بسته را کپی کنید، وابستگیها را نصب کنید، بقیه فایلهای منبع را کپی کنید، برنامه SvelteKit را بسازید، و وابستگیها را فقط به تولید برش دهید. -
مرحله نهایی: با یک تصویر دیگر Alpine Node.js شروع به کار می کنیم، برنامه ساخته شده، node_modules تولیدی و package.json را از مرحله سازنده کپی می کنیم، پورت 3000 را در معرض نمایش قرار می دهیم، محیط را روی تولید تنظیم می کنیم و دستور اجرای برنامه را مشخص می کنیم.
برای تمیز نگه داشتن زمینه ساخت Docker و سرعت بخشیدن به فرآیند ساخت، یک را ایجاد کنید .dockerignore
فایل در ریشه پروژه شما:
Dockerfile
.dockerignore
.git
.gitignore
.gitattributes
README.md
.npmrc
.prettierrc
.eslintrc.cjs
.graphqlrc
.editorconfig
.svelte-kit
.vscode
node_modules
build
package
**/.env
استفاده از یک ساخت چند مرحله ای به کوچک نگه داشتن تصویر نهایی با دور انداختن فایل ها و ابزارهای غیر ضروری پس از فرآیند ساخت کمک می کند. همچنین با استفاده از حافظه پنهان لایه Docker سرعت ساخت را افزایش می دهد.
هنگام استفاده از adapter-node، عموماً باید همه وابستگی ها را به عنوان devDependencies نصب کنید. این به SvelteKit اجازه می دهد تا آنها را در برنامه شما قرار دهد و هرگونه واردات استفاده نشده را کنار بگذارد. نصب بسته های جدید با -D
پرچم، مانند npm i -D lucide-svelte
، چه برای استفاده در سمت سرویس گیرنده یا سمت سرور باشند.
با این حال، اگر با مسائلی مانند __dirname is not defined
در طول ساخت، ممکن است لازم باشد وابستگی را به عنوان یک وابستگی معمولی نصب کنید. این بدان معنی است که SvelteKit آن را باندل نمی کند و در زمان اجرا از node_modules بارگیری می شود.
اگر همه وابستگیهای شما Dependencies هستند، میتوانید از کپی کردن node_modules در مرحله نهایی Dockerfile صرفنظر کنید و اندازه تصویر را بیشتر کاهش دهید.
برای ساخت تصویر Docker خود، دستور زیر را از دایرکتوری حاوی Dockerfile خود اجرا کنید:
docker build -t my-sveltekit-app .
پس از تکمیل ساخت، می توانید برنامه کانتینری خود را با موارد زیر اجرا کنید:
docker run -p 3000:3000 my-sveltekit-app
اکنون می توانید با پیمایش به برنامه SvelteKit خود دسترسی پیدا کنید http://localhost:3000
در مرورگر وب شما
مدیریت متغیرهای محیطی در داکر مهم است. SvelteKit چهار راه را برای وارد کردن متغیرهای محیطی ارائه می دهد که هر کدام پیامدهای متفاوتی برای Docker دارند:
-
$env/dynamic/private: اینها متغیرهای زمان اجرا هستند که نیازی به تعریف در زمان ساخت ندارند. میتوانید آنها را در Dockerfile تنظیم کنید، هنگام اجرای کانتینر آنها را ارسال کنید یا از یک فایل env. استفاده کنید.
-
$env/dynamic/public: شبیه به متغیرهای خصوصی پویا اما در معرض دید مشتری است. آنها باید شروع کنند
PUBLIC_
. -
$env/static/private: اینها متغیرهای زمان ساخت هستند که در تصویر Docker شما وارد می شوند. از آرگومان های ساخت در Dockerfile خود استفاده کنید و آنها را در طول فرآیند ساخت ارسال کنید.
-
$env/static/public: شبیه به متغیرهای خصوصی ثابت اما در معرض دید مشتری. برای ساخت های استاتیک با آداپتور استاتیک مفید است.
هنگام استقرار برنامه خود، به یاد داشته باشید که پلتفرم های مختلف متغیرهای محیط زمان ساخت و زمان اجرا را متفاوت مدیریت می کنند. همیشه به مستندات پلت فرم مراجعه کنید.
در نهایت، هنگام استفاده از اکشن های فرم یا سایر ویژگی های سمت سرور در Docker، باید آن را تنظیم کنید ORIGIN
متغیر محیطی به درستی برای جلوگیری از خطاهای ارسال فرم POST بین سایتی. به عنوان مثال:
docker run -p 3000:3000 -e ORIGIN=http://localhost:3000 my-sveltekit-app
در تولید، جایگزین کنید http://localhost:3000
با دامنه واقعی شما
نکات تولید
-
بررسی های سلامت: a اضافه کنید
/health
نقطه پایانی به برنامه خود داشته باشید و از دستورالعمل HEALTHCHECK Docker برای نظارت بر سلامت کانتینر استفاده کنید:
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
- محدودیت های حافظه: محدودیت های حافظه Node.js را برای جلوگیری از خرابی کانتینر تنظیم کنید:
docker run -p 3000:3000 -e NODE_OPTIONS="--max-old-space-size=512" my-sveltekit-app
- اسکن امنیتی: به طور منظم ظرف خود را برای آسیب پذیری ها اسکن کنید:
docker scout quickview
نتیجه گیری
همین! اکنون یک برنامه SvelteKit داکر شده دارید که برای تولید بهینه شده است. اگر میخواهید برنامه SvelteKit خود را اجرا کنید، sliplane.io را بررسی کنید