You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:40:18