go+react实现远程vCenter虚拟机管理终端方式

 更新时间:2026年04月16日 14:14:04   作者:RSQ博客  
基于Go和React实现远程vSphere vcenter虚拟机终端console页面,提供与vcenter管理中的LaunchWebConsole相同的功能,项目包括前端、后端配置,以及vCenter宿主机的Nginx代理设置

go+react实现远程vCenter虚拟机管理终端

基于go & react实现远程vSphere vcenter虚拟机终端console页面,提供与vcenter管理中的Launch Web Console相同的功能。

项目地址:react-vcenter

Demo

URL: http://localhost:3000


Quick Start

1、配置前端访问后端的代理

frontend/package.json

  "proxy": "http://localhost:8888" // The backend addr

frontend/src/setupProxy.ts

export const { createProxyMiddleware } = require('http-proxy-middleware')

module.exports= function (app:any) {
    app.use(
        createProxyMiddleware(
            "/api",
            {
                target: "http://localhost:8888", // The backend addr
                changeOrigin: true,
                ws: true,
                pathRewrite:{
                    "^/api":"",
                },
            }
        )
    )
}

2、配置websocket地址

frontend/src/components/Console/index.tsx, domain_name requires a value for nginx server_name

const consoleUrl = 'wss://<domain_name>/ticket/' + ticket + '?ip=' + host

3、配置vCenter宿主机的nginx代理,所有访问虚拟机console页面的请求均由nginx来代理转发到指定的vCenter宿主机上

server {
    listen 80;
    server_name vc.rsq.cn;
    return 301 https://$http_host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name          vc.rsq.cn;
    ssl_certificate      nginx_conf/certs/rsq.cn.pem;
    ssl_certificate_key  nginx_conf/certs/rsq.cn.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_protocols TLSv1.1 TLSv1.2;

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' '*';
    add_header 'Access-Control-Allow-Headers' '*';

    access_log  /var/log/openresty/vc.access.log main;
    error_log   /var/log/openresty/vc.error.log warn;

    location / {
        proxy_pass https://$arg_ip;
        proxy_http_version                 1.1;
        proxy_cache_bypass                 $http_upgrade;

        # Proxy headers
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        $connection_upgrade;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header Forwarded         $proxy_add_forwarded;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-Port  $server_port;

        # Proxy timeouts
        proxy_connect_timeout              60s;
        proxy_send_timeout                 120s;
        proxy_read_timeout                 120s;
    }
}

4、配置vCenter sdk的账号密码和URL地址信息

backend/pkg/client.go

vcenterURL   = flag.String("vcurl", "https://<user>:<pass>@vcenter.rsq.cn/sdk", "URL of vCenter Server instance")

5、开启前后端服务

# start frontend
cd frontend
npm i
npm run start

# start backend
cd backend
go mod tidy
go run main.go

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决Golang map range遍历结果不稳定问题

    解决Golang map range遍历结果不稳定问题

    这篇文章主要介绍了解决Golang map range遍历结果不稳定问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • GO日志打印如何添加goroutineid

    GO日志打印如何添加goroutineid

    今天想给日志添加一个前缀,以区分不同goroutine的日志,方便做并发问题的排查,做日志跟踪,下面给大家分享GO日志打印如何添加goroutineid,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Go语言命令行参数及cobra使用方法

    Go语言命令行参数及cobra使用方法

    Cobra是关于golang的一个命令行解析库,用它能够快速创建功能强大的 cli应用程序和命令行工具,本文主要介绍了Go语言命令行参数及cobra使用方法,感兴趣的可以了解一下
    2024-01-01
  • Golang动态数组的实现示例

    Golang动态数组的实现示例

    动态数组能自动调整大小,与静态数组不同,其大小不固定,可根据需求变化,实现通常依赖于数据结构如链表或数组加额外信息,本文就来介绍一下Golang动态数组的实现示例,感兴趣的可以了解一下
    2024-10-10
  • Golang泛型实现类型转换的方法实例

    Golang泛型实现类型转换的方法实例

    将一个值从一种类型转换到另一种类型,便发生了类型转换,下面这篇文章主要给大家介绍了关于Golang泛型实现类型转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • golang实现通过smtp发送电子邮件的方法

    golang实现通过smtp发送电子邮件的方法

    这篇文章主要介绍了golang实现通过smtp发送电子邮件的方法,实例分析了Go语言基于SMTP协议发送邮件的相关技巧,需要的朋友可以参考下
    2016-07-07
  • go开源Hugo站点构建三步曲之集结渲染

    go开源Hugo站点构建三步曲之集结渲染

    这篇文章主要为大家介绍了go开源Hugo站点构建三步曲之集结渲染详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 浅谈Go语言多态的实现与interface使用

    浅谈Go语言多态的实现与interface使用

    如果大家系统的学过C++、Java等语言以及面向对象的话,相信应该对多态不会陌生。多态是面向对象范畴当中经常使用并且非常好用的一个功能,它主要是用在强类型语言当中,像是Python这样的弱类型语言,变量的类型可以随意变化,也没有任何限制,其实区别不是很大
    2021-06-06
  • Golang Model 字段自动化校验设计方案

    Golang Model 字段自动化校验设计方案

    在我们日常开发中,不可避免的总要去进行各种参数校验,但是如果在某个场景中,要校验的字段非常多,并且在其中还有耦合关系,那么我们手写校验逻辑就变得非常的低效且难以维护,本篇文档就基于 DDD 领域模型设计的思想下,提供自动化的校验模型字段,感兴趣的朋友一起看看吧
    2025-02-02
  • go slice 数组和切片使用区别示例解析

    go slice 数组和切片使用区别示例解析

    这篇文章主要为大家介绍了go slice 数组和切片使用区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论