moonsflyer 4 months ago
parent
commit
2e16011610
2 changed files with 152 additions and 13 deletions
  1. 68 13
      dspIM/s1.js
  2. 84 0
      dspIM/start_server.js

+ 68 - 13
dspIM/s1.js

@@ -23,23 +23,78 @@ var chat_interval={};
 var LiveConnect={};
 var LiveConnect_pull={};
 
-var options = {
-  key:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/privkey.key'),
-  cert:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/fullchain.pem')
-}; 
+// 服务器配置 - 根据环境变量选择HTTP或HTTPS
+var server;
+var http = require('http');
+
+// 检查是否启用SSL
+if (process.env.SSL_MODE === 'true') {
+    try {
+        // SSL证书路径配置
+        const sslPaths = [
+            {
+                key: '/www/server/panel/vhost/cert/yjzb.yunchao2u.com/privkey.key',
+                cert: '/www/server/panel/vhost/cert/yjzb.yunchao2u.com/fullchain.pem'
+            },
+            {
+                key: './ssl/privkey.key',
+                cert: './ssl/fullchain.pem'
+            },
+            {
+                key: './cert/privkey.key',
+                cert: './cert/fullchain.pem'
+            }
+        ];
+        
+        let sslOptions = null;
+        for (const paths of sslPaths) {
+            if (fs.existsSync(paths.key) && fs.existsSync(paths.cert)) {
+                sslOptions = {
+                    key: fs.readFileSync(paths.key),
+                    cert: fs.readFileSync(paths.cert)
+                };
+                console.log('使用SSL证书:', paths.key);
+                break;
+            }
+        }
+        
+        if (sslOptions) {
+            server = https.createServer(sslOptions, function(req, res) {
+                res.writeHead(200, {
+                    'Content-type': 'text/html;charset=utf-8'
+                });
+                res.end();
+            });
+            console.log('HTTPS服务器创建成功');
+        } else {
+            throw new Error('未找到有效的SSL证书文件');
+        }
+    } catch (error) {
+        console.log('HTTPS配置失败,切换到HTTP模式:', error.message);
+        server = http.createServer(function(req, res) {
+            res.writeHead(200, {
+                'Content-type': 'text/html;charset=utf-8'
+            });
+            res.end();
+        });
+    }
+} else {
+    // 使用HTTP服务器
+    server = http.createServer(function(req, res) {
+        res.writeHead(200, {
+            'Content-type': 'text/html;charset=utf-8'
+        });
+        res.end();
+    });
+    console.log('HTTP服务器创建成功');
+}
 
 // redis 链接
 var clientRedis  = redis.createClient(config['REDISPORT'],config['REDISHOST']);
 clientRedis.auth(config['REDISPASS']);
-var server = https.createServer(options,function(req, res) {
-// var server = https.createServer(function(req, res) {
-	res.writeHead(200, {
-		'Content-type': 'text/html;charset=utf-8'
-	});
-   //res.write("人数: " + numscount );
-	res.end();
-}).listen(config['socket_port'], function() {
-	////console.log('服务开启19965');
+
+server.listen(config['socket_port'], function() {
+    console.log('Socket服务器启动成功,端口:', config['socket_port']);
 });
 
 var io = socketio.listen(server,{

+ 84 - 0
dspIM/start_server.js

@@ -0,0 +1,84 @@
+#!/usr/bin/env node
+
+/**
+ * Socket服务器启动脚本
+ * 自动检测SSL证书并选择合适的启动模式
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+// 检查配置文件
+const configPath = path.join(__dirname, 'config.js');
+if (!fs.existsSync(configPath)) {
+    console.error('错误: 配置文件 config.js 不存在');
+    process.exit(1);
+}
+
+const config = require('./config.js');
+
+// 检查必要的配置项
+const requiredConfigs = ['socket_port', 'REDISHOST', 'REDISPORT', 'REDISPASS'];
+for (const key of requiredConfigs) {
+    if (!config[key]) {
+        console.error(`错误: 配置项 ${key} 未设置`);
+        process.exit(1);
+    }
+}
+
+console.log('配置检查通过');
+console.log('Redis配置:', config.REDISHOST + ':' + config.REDISPORT);
+console.log('Socket端口:', config.socket_port);
+
+// SSL证书路径配置
+const sslPaths = [
+    // 默认路径
+    {
+        key: '/www/server/panel/vhost/cert/yjzb.yunchao2u.com/privkey.key',
+        cert: '/www/server/panel/vhost/cert/yjzb.yunchao2u.com/fullchain.pem'
+    },
+    // 备用路径1
+    {
+        key: './ssl/privkey.key',
+        cert: './ssl/fullchain.pem'
+    },
+    // 备用路径2
+    {
+        key: './cert/privkey.key', 
+        cert: './cert/fullchain.pem'
+    }
+];
+
+// 检查SSL证书
+let sslConfig = null;
+for (const paths of sslPaths) {
+    if (fs.existsSync(paths.key) && fs.existsSync(paths.cert)) {
+        try {
+            // 尝试读取证书文件
+            const keyContent = fs.readFileSync(paths.key);
+            const certContent = fs.readFileSync(paths.cert);
+            
+            sslConfig = {
+                key: keyContent,
+                cert: certContent
+            };
+            
+            console.log('找到SSL证书:', paths.key);
+            break;
+        } catch (error) {
+            console.log('SSL证书读取失败:', paths.key, error.message);
+        }
+    }
+}
+
+// 启动服务器
+if (sslConfig) {
+    console.log('使用HTTPS模式启动服务器...');
+    process.env.SSL_MODE = 'true';
+} else {
+    console.log('未找到有效SSL证书,使用HTTP模式启动服务器...');
+    process.env.SSL_MODE = 'false';
+}
+
+// 启动主服务器文件
+require('./s1.js');