河图, 是一个 低代码 平台, 通过可视化界面, 快速生成各种后台页面, 极大减少开发成本

 

河图

河图, 是一个 低代码 平台, 通过可视化界面, 快速生成各种后台页面, 极大减少开发成本。

河图是贝壳找房内部孵化项目, 目前已在公司大多数业务线落地, 完成200+项目, 1500+页面。

 

✨ 特性

  • 🚴‍♀️ 操作简单、功能强大的可视化编辑器
  • 📦 开箱即用、高质量后台管理系统模版
  • ⚙️ 开发流程全部线上化,节省沟通、调试、运维成本
  • 🛡 使用 React、TypeScript、nodejs、express 开发

🖥 兼容环境

  • 现代浏览器、IE11以上。

🔗 链接

🍼 开发前准备

1. 一台云开发机

用于代码部署

2. 一个邮箱账号

需要开启SMTP服务, 用于发送验证码

3. MySQL数据库

可选择以下两种方式,部署MySQL服务

server/open_hetu.sql文件, 导入到数据库

⚒ 搭建服务

第一步 创建配置文件

/server/src目录下创建system_config.ini文件, 配置内容如下

[ssh]
ssh_ip = ******     // 云服务器ip 
ssh_user = ******   // 云服务器登录账号 

[client]
cdn_host = ******   // 静态资源CDN, 例如`cdn.beike.plus`

[server]
port = 9536         // node服务启动端口

[mysql]             // mysql配置
host = ****
port = ****
user = ****
password = ****
database = ****

[email]
host = smtp.163.com // SMTP服务域名
port = 364          // 连接端口
user = ****         // 公共邮箱账号
pass = ****         // 授权密码

第二步 部署组件库和文档

  • /plugin 目录下的内容为组件库
  • /plugin/site 目录下的内容为组件库文档

1. 打包部署

在云服务器上创建文件夹, 用于放静态资源

cd /data/www/

# 创建文件夹, 用于存放静态资源
mkdir hetu-client hetu-doc hetu-plugin hetu-server

# 创建配置文件, 内容见上一步
touch system_config.ini

2. 配置 nginx

如果没有安装nginx, 需要先 安装nginx

# 进入nginx配置目录
cd /etc/nginx/conf.d/

# 创建配置文件
touch hetu-cdn.conf hetu-doc.conf hetu-server.conf

申请3个域名, 例如 河图node服务xxx.com、cdn静态资源服务cdn.xxx.com、文档服务doc.xxx.com, 将这3个域名分别指向前面申请的云开发机ip, 配置如下:

hetu-cdn.conf 配置

server {
    listen      80;
    server_name cdn.xxx.com;
    root  /data/www/;

    gzip                    on;
    gzip_http_version       1.1;
    gzip_buffers            256 64k;
    gzip_comp_level         5;
    gzip_min_length         1000;
    gzip_proxied            expired no-cache no-store private auth;
    gzip_types              text/plain application/javascript application/x-javascript t
ext/css application/xml text/javascript application/vnd.ms-fontobject font/ttf font/open
type font/x-woff;

    gzip_disable "MSIE 6";

    if ( $request_method !~ GET|POST|HEAD ) {
        return 403;
    }

    location ^~ /hetu-plugin/ {
        add_header 'Access-Control-Allow-Origin'  '*';
        alias /data/www/hetu-plugin/;
    }

    location ^~ /hetu-client/ {
        add_header 'Access-Control-Allow-Origin'  '*';
        alias /data/www/hetu-client/;
    }
}

hetu-doc.conf 配置

server {
    listen      80;
    server_name doc.xxx.com;
    root  /data/www/hetu-doc;

    gzip                    on;
    gzip_http_version       1.1;
    gzip_buffers            256 64k;
    gzip_comp_level         5;
    gzip_min_length         1000;
    gzip_proxied            expired no-cache no-store private auth;
    gzip_types              text/plain application/javascript application/x-javascript t
ext/css application/xml text/javascript application/vnd.ms-fontobject font/ttf font/open
type font/x-woff;

    gzip_disable "MSIE 6";

    if ( $request_method !~ GET|POST|HEAD ) {
        return 403;
    }

    location / {
        index index.html index.htm;
        if (!-f $request_filename) {
            rewrite ^/(.*)$ /index.html?/$1 last;
            break;
        }
    }
}

hetu-server.conf

server {
    listen      80;
    server_name xxx.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:9536;
    }
}

重启nginx

# 检测配置文件是否正确
nginx -t

# 重启nginx
nginx -s reload
  • 打开 http://doc.xxx.com 预览文档服务
  • 打开 http://cdn.xxx.com/hetu-plugin/manifest.json 预览静态资源服务

第三步 安装项目依赖

# server
cd ./server && npm install

# client
cd ../client && npm install

第四步 开始开发

# client
cd ./client && npm start
# server
cd server && npm run dev

打开127.0.0.1:1234预览

第五步 打包部署

# 打包 && 部署client 
sh online_client.sh

# 打包 && 部署server
sh online_server.sh

第六步 在云服务器上启动node服务

在centos上安装node.js

EPEL(Extra Packages for Enterprise Linux)企业版Linux的额外软件包,是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。

# 先确认系统是否已安装epel-release包
yum info epel-release 

# 若已安装, 则跳过
sudo yum install epel-release

# 安装nodejs
sudo yum install nodejs

# 查看node版本
node -v

使用pm2启动node服务

pm2是node进程管理工具, 利用它可以简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。

# 全局安装
sudo npm i -g pm2

# 启动一个名为hetu的node服务, --watch意味着文件变化, 就会重新启动服务
pm2 start dist/app.js --watch --name 'hetu'

# 设置开机启动
pm2 start up

# 保存当前进程状态
pm2 save

# 查看当前node服务进程
pm2 list

版本记录

CHANGELOG

问题咨询

  • QQ群 【河图开源交流】 1046702822

主要贡献者

NameAvatarNameAvatarNameAvatarNameAvatarNameAvatar
好爸爸 嘻老师姚泽源liaoqixin 般若超

License

MIT

Copyright(c) 2020 Lianjia, Inc. All Rights Reserved

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的示例代码,用于在Vulkan中绘制一个彩色三角形: ```cpp #include <iostream> #include <vector> #include <stdexcept> #include <cstdlib> #define GLFW_INCLUDE_VULKAN #include <GLFW/glfw3.h> const int WIDTH = 800; const int HEIGHT = 600; const std::vector<const char*> validationLayers = { "VK_LAYER_KHRONOS_validation" }; #ifdef NDEBUG const bool enableValidationLayers = false; #else const bool enableValidationLayers = true; #endif VkInstance instance; VkDebugUtilsMessengerEXT debugMessenger; void createInstance() { if (enableValidationLayers && !checkValidationLayerSupport()) { throw std::runtime_error("Validation layers requested, but not available!"); } VkApplicationInfo appInfo{}; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; appInfo.pApplicationName = "Triangle"; appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); appInfo.pEngineName = "No Engine"; appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); appInfo.apiVersion = VK_API_VERSION_1_0; VkInstanceCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; createInfo.pApplicationInfo = &appInfo; if (enableValidationLayers) { createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); createInfo.ppEnabledLayerNames = validationLayers.data(); } else { createInfo.enabledLayerCount = 0; } uint32_t glfwExtensionCount = 0; const char** glfwExtensions; glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); createInfo.enabledExtensionCount = glfwExtensionCount; createInfo.ppEnabledExtensionNames = glfwExtensions; if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) { throw std::runtime_error("Failed to create instance!"); } } void setupDebugMessenger() { if (!enableValidationLayers) return; VkDebugUtilsMessengerCreateInfoEXT createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; createInfo.pfnUserCallback = debugCallback; if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) { throw std::runtime_error("Failed to set up debug messenger!"); } } void createSurface() { if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) { throw std::runtime_error("Failed to create window surface!"); } } void mainLoop() { while (!glfwWindowShouldClose(window)) { glfwPollEvents(); drawFrame(); } vkDeviceWaitIdle(device); } void cleanup() { vkDestroyDevice(device, nullptr); if (enableValidationLayers) { DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr); } vkDestroySurfaceKHR(instance, surface, nullptr); vkDestroyInstance(instance, nullptr); glfwDestroyWindow(window); glfwTerminate(); } int main() { glfwInit(); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan Triangle", nullptr, nullptr); createInstance(); setupDebugMessenger(); createSurface(); createDevice(); createSwapChain(); createImageViews(); createRenderPass(); createGraphicsPipeline(); createFramebuffers(); createCommandPool(); createVertexBuffer(); createCommandBuffers(); createSyncObjects(); mainLoop(); cleanup(); return 0; } ``` 请注意,这只是一个基本示例,还需要添加绘制三角形所需的其他函数和代码。你可以根据自己的需求和平台选择合适的库和工具,以确保代码能够成功编译和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值