如何使用 nginx 作为 Web 服务器构建后部署 svelte kit 应用程序

Moi*_*tes 8 deployment nginx node.js svelte sveltekit

我有一个苗条的套件项目。我想在npm run build. 目前我有一个节点容器,我用来开始使用npm run preview. 它工作正常,但我想使用build.

我怎么能这么做呢?

参考:https://kit.svelte.dev/docs#command-line-interface-svelte-kit-build

coy*_*508 9

正如@Caleb Irwin 所说,你可以运行node ./build/index.js

NGINX 配置将如下所示:

upstream sveltekit {
  server 127.0.0.1:3000;
  keepalive 8;
}


server {
  # listen ... 
  # servername ...

  # root ... (folder with an index.html in case of sveltekit being crashed)

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_pass http://sveltekit;
    proxy_redirect off;

    error_page 502 = @static;
  }

  location @static {
    try_files $uri /index.html =502;
  }
}
Run Code Online (Sandbox Code Playgroud)

(我不是 NGINX 专业人士,欢迎提供反馈以改进它)

HOST=127.0.0.1您可能还想通过在运行之前添加环境来使 SvelteKit 应用程序仅侦听 localhost node build/index.js。这将阻止从外部访问端口 3000。

您还可以考虑使用pm2来管理 sveltekit 进程,包括以集群模式在每个核心上运行它,在服务器崩溃/重新启动时自动重新启动。


Cal*_*win 7

如果您有一个静态网站(即没有端点),您应该使用@sveltejs/adapter-static@next. 它将把您应该提供的文件放在/build目录中。然后,您可以使用 NGINX 提供生成的页面。NGINX 配置示例如下:

server {
        listen 80;
        server_name test.jasonrigden.com;
        root /path/to/build/directory;
        index index.html;
}
Run Code Online (Sandbox Code Playgroud)

如果您的站点不是静态的,您应该@sveltejs/adapter-node在容器中使用并运行它。您可以将 NGINX 放在它前面以使用其功能(SSL、负载平衡、防火墙等)。构建站点(使用npm run build)后,您可以运行node ./build/index.js.

或者,您可以使用 Netlify、Vercel 或 Cloudflare Pages 来托管您的网站。

要了解如何更改适配器,请参阅文档

祝你好运!