在cyclic.sh部署Node.js服务器:SSL证书密钥获取与配置问题
在Cyclic.sh部署Node.js/Colyseus服务器的SSL配置说明
核心结论
Cyclic.sh作为托管平台,会自动为你的应用提供SSL证书并处理HTTPS/WSS加密,你完全不需要自己配置SSL证书、密钥,也不用手动创建HTTPS服务器。
原因
Cyclic采用反向代理架构:所有外部的HTTPS/WSS请求都会先经过Cyclic的网关,由平台完成SSL/TLS终止,然后再以HTTP/WSS的形式转发到你运行在平台上的Node.js服务器。因此你的代码只需要监听普通HTTP端口即可,无需处理SSL相关逻辑。
代码修改步骤
你需要移除代码中所有HTTPS相关的配置,修改后的代码如下:
import express from "express"; import pkg from 'colyseus'; import cors from "cors"; import { config } from "dotenv"; import { WebSocketTransport } from "@colyseus/ws-transport"; import { MyRoom } from "./rooms/MyRoom.js"; import { fileURLToPath } from 'url'; import path from "path"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const { Server } = pkg; config(); const app = express(); app.use(cors()); const portString = process.env.PORT || "3005"; const port = parseInt(portString, 10); function corsMiddleware(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next(); } app.use(corsMiddleware); app.get('/', (req, res) => { res.send({ title: "Welcome" }) }) app.get("/matchmake/joinOrCreate/GameRoom", (req, res) => { console.log("Game Room request") res.status(200).send("Handling GET request for /matchmake/joinOrCreate/GameRoom"); }); // 直接使用Express的HTTP服务器 const server = app.listen(port, () => { console.info(`Server running on port ${port}`); }); let gameServer = new Server({ transport: new WebSocketTransport({ server, verifyClient: (info: any, next: any) => { next(true); }, }), }); gameServer.define('GameRoom', MyRoom); gameServer.listen(port).then(() => { console.info("Game started and listening on port", port); }) .catch((err: any) => { console.error("Failed to listen on port:", err) })
关键修改点
- 移除了
https.createServer、fs.readFileSync以及SSL证书/密钥的相关代码 - 直接使用Express的
app.listen()创建HTTP服务器,将其传给Colyseus的WebSocketTransport - 删除了
SSL_CERT_PATH和SSL_KEY_PATH相关的环境变量配置,无需再设置这两个变量
客户端连接说明
当你的应用部署到Cyclic后,客户端连接WebSocket时需要使用wss://<你的Cyclic应用域名>(比如wss://your-app-name.cyclic.app),Cyclic会自动将WSS请求转发到你服务器上的WebSocket服务。
内容的提问来源于stack exchange,提问作者Dhananjay Maurya
相关产品推荐
相关产品推荐

