# cloud-functions **Repository Path**: nachao/cloud-functions ## Basic Information - **Project Name**: cloud-functions - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-13 - **Last Updated**: 2025-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ☁️ 云函数平台 一个轻量级的 Serverless 函数即服务平台,支持在线编辑、调试和部署 Node.js 云函数。 ## 功能特性 - ✨ **在线编辑** - 集成 Monaco Editor(VSCode 核心编辑器),提供专业的代码编辑体验 - 📦 **依赖管理** - 一键安装 npm 依赖包,支持任意第三方模块 - 🔧 **在线调试** - 提供调试界面,可传入参数测试函数执行结果 - 📁 **文件管理** - 查看函数目录结构,管理项目文件 - ⚡ **高性能** - Go 语言构建的后端,轻量高效,毫秒级响应 ## 技术栈 - **后端**: Go 1.21+ - **运行时**: Node.js - **编辑器**: Monaco Editor - **前端**: HTML5 + CSS3 + JavaScript ## 快速开始 ### 环境要求 - Go 1.21 或更高版本 - Node.js 14.0 或更高版本 - npm 或 yarn ### 安装步骤 1. **克隆或下载项目** \`\`\`bash cd cloud-function \`\`\` 2. **复制 Monaco Editor** 从参考项目复制 Monaco Editor 到 static 目录: \`\`\`bash # Windows xcopy /E /I /Y "D:\Coding\test\online-html\static\monaco-editor@0.44.0" "static\monaco-editor@0.44.0" # Linux/Mac cp -r /path/to/online-html/static/monaco-editor@0.44.0 static/ \`\`\` 或从 CDN 下载 Monaco Editor v0.44.0 并解压到 `static/monaco-editor@0.44.0/` 目录。 3. **初始化 Go 模块** \`\`\`bash go mod tidy \`\`\` 4. **启动服务器** \`\`\`bash go run main.go \`\`\` 5. **访问应用** 打开浏览器访问: http://localhost:8080 ## 使用说明 ### 创建云函数 1. 访问 `http://localhost:8080/my-function` (将 `my-function` 替换为你的函数名) 2. 点击"编辑函数"按钮 3. 在 Monaco 编辑器中编写函数代码 4. 按 `Ctrl+S` 保存 ### 函数编写规范 云函数采用标准的 Node.js 异步函数格式: \`\`\`javascript exports.main = async (event) => { // event 是调用时传入的参数对象 const { name, age } = event; // 执行业务逻辑 const result = { message: \`Hello, \${name}!\`, timestamp: new Date().toISOString() }; // 返回结果对象 return { statusCode: 200, body: result }; }; \`\`\` ### 安装依赖 1. 编辑 `package.json` 添加依赖 2. 返回函数管理页面 3. 点击"安装依赖"按钮 ### 调试函数 1. 在函数管理页面的"调试函数"区域 2. 输入 JSON 格式的测试参数 3. 点击"执行函数"按钮 4. 查看执行结果和日志输出 ### 示例函数 #### Hello World \`\`\`javascript exports.main = async (event) => { return { statusCode: 200, body: { message: 'Hello from Cloud Function!', event: event } }; }; \`\`\` #### 使用第三方库 (moment.js) 1. 在 `package.json` 中添加依赖: \`\`\`json { "dependencies": { "moment": "^2.29.4" } } \`\`\` 2. 编写函数代码: \`\`\`javascript exports.main = async (event) => { const moment = require('moment'); return { statusCode: 200, body: { currentTime: moment().format('YYYY-MM-DD HH:mm:ss'), message: 'Time formatted with moment.js' } }; }; \`\`\` 3. 点击"安装依赖"按钮 ## 目录结构 \`\`\` cloud-function/ ├── main.go # 主程序 ├── go.mod # Go 模块定义 ├── config.conf # 配置文件 ├── README.md # 说明文档 ├── templates/ # HTML 模板 │ ├── index.html # 首页(产品说明) │ ├── function.html # 函数管理页面 │ └── editor.html # 编辑器页面 ├── static/ # 静态资源 │ ├── editor.js # 编辑器逻辑 │ └── monaco-editor@0.44.0/ # Monaco Editor ├── functions/ # 云函数存储目录(自动创建) │ └── [function-name]/ # 各个函数的目录 │ ├── index.js # 函数入口文件 │ ├── package.json # 依赖配置 │ └── node_modules/ # 依赖包(npm install 后) └── logs/ # 日志目录(自动创建) └── cloud-function.log \`\`\` ## 配置说明 编辑 `config.conf` 文件可修改服务器配置: \`\`\`conf # 服务器端口 port=8080 # 监听地址 host=0.0.0.0 # 函数存储目录 data_dir=./functions # 静态资源目录 static_dir=./static # 日志文件路径 log_file=./logs/cloud-function.log # 调试模式 debug_mode=false \`\`\` ## API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/save` | POST | 保存函数代码 | | `/api/load` | GET | 加载函数代码 | | `/api/install` | POST | 安装 npm 依赖 | | `/api/execute` | POST | 执行云函数 | | `/api/files` | GET | 获取文件列表 | ## 常见问题 ### 1. Monaco Editor 无法加载? 确保已正确复制 Monaco Editor 文件到 `static/monaco-editor@0.44.0/` 目录。 ### 2. npm install 失败? 检查是否已安装 Node.js 和 npm,并确保网络连接正常。 ### 3. 函数执行超时? 默认超时时间为 30 秒,可在 `main.go` 中修改 `handleExecute` 函数的超时设置。 ### 4. 端口被占用? 修改 `config.conf` 中的 `port` 配置为其他端口。 ## 开发计划 - [ ] 支持多文件编辑 - [ ] 支持环境变量配置 - [ ] 函数日志查看 - [ ] 函数版本管理 - [ ] 定时触发器 - [ ] HTTP 触发器 - [ ] 函数监控统计 ## 许可证 MIT License ## 构建和部署 ### 本地构建 ```bash # Linux/Mac ./scripts/build.sh # Windows scripts\build.bat ``` 构建完成后会在 `build/` 目录生成跨平台可执行文件。 ### 远程部署 ```bash # 1. 先构建 ./scripts/build.sh # 2. 部署到服务器 ./scripts/deploy.sh 192.168.1.100 # 3. 检查服务器状态 ./scripts/check-server.sh ``` ### 部署选项 ```bash # 指定用户和端口 ./scripts/deploy.sh -u admin -p 2222 192.168.1.100 # 指定SSH密钥和部署目录 ./scripts/deploy.sh -k ~/.ssh/id_rsa -d /home/cloud-function 192.168.1.100 # 指定应用端口 ./scripts/deploy.sh -P 9090 192.168.1.100 ``` ### 配置文件 在 `config.conf` 中配置部署参数: ```conf # 远程部署配置 REMOTE_HOST=admin@192.168.1.100 REMOTE_DEPLOY_DIR=/opt/cloud-function SSH_KEY=~/.ssh/id_rsa port=8080 ``` 更多详细信息请参考 [scripts/README.md](scripts/README.md) ## 贡献 欢迎提交 Issue 和 Pull Request!