本指南向您展示如何容器化 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中文网其他相关文章!