本指南向您展示如何容器化 SvelteKit 應用程式以簡化部署和管理。 請記住:這是針對 SvelteKit,而不是 Svelte!
設定
如果您缺少 SvelteKit 項目,請建立一個:
<code class="language-bash">npx sv create my-svelte-app --template demo --types ts</code>
接下來,設定 SvelteKit 以使用 adapter-node
實作 Node.js 相容性,這對於容器化至關重要。安裝它:
<code class="language-bash">npm i -D @sveltejs/adapter-node</code>
修改svelte.config.js
:
<code class="language-javascript">// svelte.config.js - import adapter from '@sveltejs/adapter-auto'; + import adapter from '@sveltejs/adapter-node';</code>
現在,建立您的Dockerfile
。這指示 Docker 建置和運行您的應用程式:
<code class="language-dockerfile"># 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 # 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" ]</code>
此Dockerfile
使用多階段建置。建構器階段編譯您的應用程序,最後階段創建更精簡的運行時映像。
要簡化建置過程,請建立一個 .dockerignore
檔案:
<code>Dockerfile .dockerignore .git .gitignore .gitattributes README.md .npmrc .prettierrc .eslintrc.cjs .graphqlrc .editorconfig .svelte-kit .vscode node_modules build package **/.env</code>
通常,將所有相依性安裝為 devDependencies
(使用 npm i -D <package>
)。這讓 SvelteKit 捆綁它們,刪除未使用的匯入。 但是,如果您在建置過程中遇到諸如 __dirname
undefined 之類的問題,請將該套件安裝為常規依賴項。 如果所有依賴項都是 devDependencies
,則可以在 Docker 最後階段省略複製 node_modules
,進一步最小化映像大小。
建立您的 Docker 映像:
<code class="language-bash">docker build -t my-sveltekit-app .</code>
運行容器化應用程式:
<code class="language-bash">docker run -p 3000:3000 my-sveltekit-app</code>
透過http://localhost:3000
存取您的應用程式。
環境變數
SvelteKit 提供了四種管理環境變數的方法:$env/dynamic/private
、$env/dynamic/public
、$env/static/private
和 $env/static/public
。 請記住,不同的部署平台以不同的方式處理這些問題;請查閱他們的文件。
對於表單操作和伺服器端功能,正確設定ORIGIN
環境變數以防止跨站POST錯誤:
<code class="language-bash">docker run -p 3000:3000 -e ORIGIN=http://localhost:3000 my-sveltekit-app</code>
將 http://localhost:3000
替換為您的生產域。
生產最佳化
/health
端點並使用Docker的HEALTHCHECK
指令:<code class="language-dockerfile">HEALTHCHECK --interval=30s --timeout=3s \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1</code>
<code class="language-bash">docker run -p 3000:3000 -e NODE_OPTIONS="--max-old-space-size=512" my-sveltekit-app</code>
<code class="language-bash">docker scout quickview</code>
結論
您現在已經容器化了 SvelteKit 應用程式。對於部署,請考慮 sliplane.io。
以上是如何 Docker 化 SvelteKit的詳細內容。更多資訊請關注PHP中文網其他相關文章!