我有一个苗条的工具包项目。我想在npm run build之后在Nginx Web服务器上部署应用程序。目前我有一个节点容器,我开始使用npm run preview。它工作得很好,但我想在使用build的生产环境中进行部署。我怎么能这么做参考:https://kit.svelte.dev/docs#command-line-interface-svelte-kit-build
npm run build
npm run preview
build
ddhy6vgd1#
正如@Caleb欧文所说,您可以运行node ./build/index.jsNGINX配置看起来像这样:
node ./build/index.js
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; }}
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;
(我不是NGINX专业人士,欢迎反馈以改进它)您可能还希望通过在运行node build/index.js之前添加环境HOST=127.0.0.1来使SvelteKit应用程序只侦听localhost。这将防止从外部到达端口3000。您还可以考虑使用pm2来管理sveltekit进程,包括在集群模式下在每个核心上运行它,在服务器崩溃/重新启动时自动重新启动。
node build/index.js
HOST=127.0.0.1
n3schb8v2#
如果你有一个静态网站(即没有端点),你应该使用@sveltejs/adapter-static@next。它将把你应该提供的文件放在/build目录下。然后,您可以使用NGINX提供生成的页面。一个Nginx配置示例如下:
@sveltejs/adapter-static@next
/build
server { listen 80; server_name test.jasonrigden.com; root /path/to/build/directory; index index.html;}
listen 80;
server_name test.jasonrigden.com;
root /path/to/build/directory;
index index.html;
如果你的网站不是静态的,你应该使用@sveltejs/adapter-node并在你的容器中运行它。你可以把NGINX放在它前面来使用它的功能(SSL,负载平衡,防火墙等)。在构建您的站点(使用npm run build)之后,您可以运行node ./build/index.js。或者,您可以使用Netlify,Vercel或Cloudflare Pages来托管您的网站。要了解如何更改适配器,请参阅文档。祝你好运!
@sveltejs/adapter-node
vu8f3i0k3#
我已经成功地将Svelte Kit应用程序部署到我的Google Cloud Engine虚拟机,并使用Nginx为其提供服务。我自己还有一些悬而未决的问题,但到目前为止,这些是我的步骤:1.根据OP引用的文档在本地运行构建。本地目录:$ npm run build1.本地目录:$gcloud compute scp --recurse build/ user@gcpinstance:~/Desktop1.本地目录:$gcloud compute scp package*.* user@gcpinstance:~/Desktop1.在远程虚拟机上,从我上传构建文件夹和包文件的目录(例如~/Desktop$),我运行npm install。这将重新创建node-modules文件夹(否则将永远无法从本地计算机上载node-modules文件夹)。1.~/桌面$mkdir SvelteKitProd/1.~/桌面$mv package*.* build/ node-modules/ SvelteKitProd/1.~/桌面$sudo chown -R root:root SvelteKitProd/1.~/桌面$mv SvelteKitProd/ /var/www/domainname/ 9 ~/桌面$cd /var/www/domainname/1./var/www/domainname:$sudo vi /etc/nginx/sites-available/domainname(这是我对这个域名和这个应用程序的nginx配置)。
$ npm run build
gcloud compute scp --recurse build/ user@gcpinstance:~/Desktop
gcloud compute scp package*.* user@gcpinstance:~/Desktop
npm install
mkdir SvelteKitProd/
mv package*.* build/ node-modules/ SvelteKitProd/
sudo chown -R root:root SvelteKitProd/
mv SvelteKitProd/ /var/www/domainname/
cd /var/www/domainname/
sudo vi /etc/nginx/sites-available/domainname
upstream hijacked-media { server 127.0.0.1:3000; keepalive 64;}server { server_name hijacked.media www.hijacked.media; #root /var/www/hijacked.media/sveltekittest/sveltekitprod/PROD-GCP; # index index.html index.htm; access_log /var/log/nginx/hijacked.media.access.log; error_log /var/log/nginx/hijacked.media.error.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_pass http://hijacked-media; proxy_redirect off; proxy_read_timeout 240s; #proxy_cache_bypass $http_upgrade; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/hijacked.media/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/hijacked.media/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot}server { if ($host = www.hijacked.media) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = hijacked.media) { return 301 https://$host$request_uri; } # managed by Certbot server_name hijacked.media www.hijacked.media; listen 80; return 404; # managed by Certbot}
upstream hijacked-media {
keepalive 64;
server_name hijacked.media www.hijacked.media;
#root /var/www/hijacked.media/sveltekittest/sveltekitprod/PROD-GCP;
# index index.html index.htm;
access_log /var/log/nginx/hijacked.media.access.log;
error_log /var/log/nginx/hijacked.media.error.log;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_pass http://hijacked-media;
proxy_read_timeout 240s;
#proxy_cache_bypass $http_upgrade;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/hijacked.media/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/hijacked.media/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
if ($host = www.hijacked.media) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = hijacked.media) {
return 404; # managed by Certbot
1./var/www/domainname $pm2 start SvelteKitProd/build/index.js我仍在试图弄清楚我需要做些什么才能从自己的顶级域中为多个应用程序提供服务。我希望我可以在构建和上传后更改PORT(请参阅build/index.js文件),但到目前为止,这对我不起作用。因此,我将尝试在本地构建它时指定一个唯一的端口号,或者在上传到远程服务器时对其进行修改;或者使用PM2和Nginx使多个应用程序在同一个端口上工作,例如3000.
pm2 start SvelteKitProd/build/index.js
chy5wohz4#
此配置用于使用node-adapter运行SvelteKit。
upstream sveltekit-server { server 127.0.0.1:3000; keepalive 8;}server { listen 80; server_name mydomain.com; root /home/deploy/frontend/build/client; location / { try_files $uri $uri/ @sveltekit; } location @sveltekit { proxy_set_header Host $http_host; 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_set_header X-Sendfile-Type X-Accel-Redirect; proxy_pass http://sveltekit-server; proxy_redirect off; # error_page 502 = @static; } location ^~ /_app/immutable/ { # gzip_static on; expires max; add_header Cache-Control public; access_log off; try_files $uri $uri/ @sveltekit; }}
upstream sveltekit-server {
server_name mydomain.com;
root /home/deploy/frontend/build/client;
try_files $uri $uri/ @sveltekit;
location @sveltekit {
proxy_set_header Host $http_host;
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_pass http://sveltekit-server;
# error_page 502 = @static;
location ^~ /_app/immutable/ {
# gzip_static on;
expires max;
add_header Cache-Control public;
access_log off;
要点是https://gist.github.com/dukejones/01fd7ddbfc8cdac4e02c6105d26ca7fenginx最好的一点是它可以只为静态文件提供强大的缓存,用于内容散列命名的不可变文件,并将其余部分传递到nodejs服务器。当然,可以使用一些进程管理器,比如pm2来保持nodejs服务器的运行。
4条答案
按热度按时间ddhy6vgd1#
正如@Caleb欧文所说,您可以运行
node ./build/index.js
NGINX配置看起来像这样:
(我不是NGINX专业人士,欢迎反馈以改进它)
您可能还希望通过在运行
node build/index.js
之前添加环境HOST=127.0.0.1
来使SvelteKit应用程序只侦听localhost。这将防止从外部到达端口3000。您还可以考虑使用pm2来管理sveltekit进程,包括在集群模式下在每个核心上运行它,在服务器崩溃/重新启动时自动重新启动。
n3schb8v2#
如果你有一个静态网站(即没有端点),你应该使用
@sveltejs/adapter-static@next
。它将把你应该提供的文件放在/build
目录下。然后,您可以使用NGINX提供生成的页面。一个Nginx配置示例如下:如果你的网站不是静态的,你应该使用
@sveltejs/adapter-node
并在你的容器中运行它。你可以把NGINX放在它前面来使用它的功能(SSL,负载平衡,防火墙等)。在构建您的站点(使用npm run build
)之后,您可以运行node ./build/index.js
。或者,您可以使用Netlify,Vercel或Cloudflare Pages来托管您的网站。
要了解如何更改适配器,请参阅文档。
祝你好运!
vu8f3i0k3#
我已经成功地将Svelte Kit应用程序部署到我的Google Cloud Engine虚拟机,并使用Nginx为其提供服务。我自己还有一些悬而未决的问题,但到目前为止,这些是我的步骤:
1.根据OP引用的文档在本地运行构建。本地目录:
$ npm run build
1.本地目录:$
gcloud compute scp --recurse build/ user@gcpinstance:~/Desktop
1.本地目录:$
gcloud compute scp package*.* user@gcpinstance:~/Desktop
1.在远程虚拟机上,从我上传构建文件夹和包文件的目录(例如~/Desktop$),我运行
npm install
。这将重新创建node-modules文件夹(否则将永远无法从本地计算机上载node-modules文件夹)。1.~/桌面$
mkdir SvelteKitProd/
1.~/桌面$
mv package*.* build/ node-modules/ SvelteKitProd/
1.~/桌面$
sudo chown -R root:root SvelteKitProd/
1.~/桌面$
mv SvelteKitProd/ /var/www/domainname/
9 ~/桌面$cd /var/www/domainname/
1./var/www/domainname:$
sudo vi /etc/nginx/sites-available/domainname
(这是我对这个域名和这个应用程序的nginx配置)。1./var/www/domainname $
pm2 start SvelteKitProd/build/index.js
我仍在试图弄清楚我需要做些什么才能从自己的顶级域中为多个应用程序提供服务。我希望我可以在构建和上传后更改PORT(请参阅build/index.js文件),但到目前为止,这对我不起作用。因此,我将尝试在本地构建它时指定一个唯一的端口号,或者在上传到远程服务器时对其进行修改;或者使用PM2和Nginx使多个应用程序在同一个端口上工作,例如3000.
chy5wohz4#
此配置用于使用node-adapter运行SvelteKit。
要点是
https://gist.github.com/dukejones/01fd7ddbfc8cdac4e02c6105d26ca7fe
nginx最好的一点是它可以只为静态文件提供强大的缓存,用于内容散列命名的不可变文件,并将其余部分传递到nodejs服务器。
当然,可以使用一些进程管理器,比如pm2来保持nodejs服务器的运行。