如何部署使用双端口的SvelteKit IO应用?
双端口SvelteKit + SKIO应用部署方案
1. 反向代理统一入口(推荐)
用Nginx或Caddy这类反向代理工具,把两个服务统一到同一个域名下,既解决跨域问题,也无需暴露多个端口。
Nginx配置示例
server { listen 80; server_name your-domain.com; # 转发主应用请求到4173端口 location / { proxy_pass http://localhost:4173; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 转发Socket请求到3001端口,需适配WebSocket协议 location /socket.io/ { proxy_pass http://localhost:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
同时修改SKIO配置,前端无需指定具体端口,直接走域名路径:
// 前端(browser环境)配置 skio.setup('/socket.io/', { autoConnect: true }); // 后端(server环境)配置 skio.setup('http://localhost:3001', { cors: { origin: "https://your-domain.com", // 替换为你的生产域名 credentials: true, }, }).then(io => { if (browser) return; io.on('connect', socket => { socket.on('message', (message) => { if (message.game_stop === true) { socket.disconnect() } else { socket.emit('message', message); socket.broadcast.emit('message', message); } }); }); });
2. 容器化部署(Docker)
将主应用和Socket服务分别打包为Docker镜像,用Docker Compose统一编排管理,简化端口映射和服务启停。
docker-compose.yml示例
version: '3.8' services: svelte-app: build: ./svelte-app # 指向SvelteKit应用的Dockerfile目录 ports: - "4173:4173" restart: always skio-server: build: ./skio-server # 指向SKIO服务的Dockerfile目录 ports: - "3001:3001" restart: always
在服务器上执行docker-compose up -d即可后台启动两个服务,若配合反向代理使用,可不用直接暴露端口。
3. 进程管理工具托管
用PM2这类工具同时管理两个服务的后台运行,确保服务崩溃后自动重启。
操作步骤:
- 安装PM2:
npm install -g pm2 - 启动SvelteKit应用(假设用node适配器部署):
pm2 start node_modules/@sveltejs/adapter-node/build/index.js --name svelte-app - 启动SKIO服务:
pm2 start skio-entry.js --name skio-server(替换为你的SKIO入口文件名) - 保存配置并设置开机自启:
pm2 save && pm2 startup
注意事项
- 生产环境禁止使用
localhost,需替换为服务器公网IP或域名 - 若不使用反向代理,需确保服务器防火墙/安全组开放4173和3001端口
- CORS配置需严格匹配生产环境域名,避免跨域错误
内容的提问来源于stack exchange,提问作者Safwan Samsudeen
相关产品推荐
相关产品推荐

