通用项目
通用项目用于部署任意类型的可执行程序,不限于特定编程语言。
适用场景
- Rust 应用
- C/C++ 应用
- Shell 脚本
- 其他编译型语言应用
- 自定义启动脚本
创建通用项目
- 进入 项目 页面
- 点击 创建项目
- 填写配置:
- 项目名:项目标识
- 项目目录:可执行文件所在目录
- 启动命令:启动程序的命令
- 根据需要开启 反向代理
启动命令示例
Rust 应用
bash
# 运行编译好的二进制文件
./myapp
# 带参数运行
./myapp --config config.toml --port 8080Shell 脚本
bash
# 运行脚本
/bin/bash start.sh
# 或直接运行(需要 shebang 和执行权限)
./start.sh自定义启动脚本
创建 start.sh:
bash
#!/bin/bash
cd /opt/ace/project/myapp
export ENV=production
./myapp启动命令:/bin/bash start.sh
环境变量
可以在启动命令中设置环境变量:
bash
# 单个环境变量
ENV=production ./myapp
# 多个环境变量
ENV=production PORT=8080 ./myapp或直接编辑项目,在 运行设置 中添加环境变量。
工作目录
项目会在指定的项目目录下运行,相对路径会基于该目录解析。
如果需要切换目录,可以在启动命令中使用 cd:
bash
cd /opt/ace/project/myapp/bin && ./myapp权限设置
确保可执行文件有执行权限:
bash
chmod +x myapp
chmod +x start.sh运行用户
默认使用 www 用户运行项目。 如果程序需要特殊权限,可以选择其他用户。
注意
使用 root 用户运行可能带来安全风险,请谨慎选择。
日志输出
程序的标准输出(stdout)和标准错误(stderr)会被记录到日志中,可以在项目管理页面查看。
建议程序将日志输出到标准输出,而非写入文件,便于统一管理。
信号处理
项目停止时会发送 SIGTERM 信号, 程序应正确处理该信号以实现优雅关闭:
rust
// Rust 示例
use signal_hook::{consts::SIGTERM, iterator::Signals};
fn main() {
let mut signals = Signals::new(&[SIGTERM]).unwrap();
// 处理 SIGTERM 信号
}c
// C 示例
#include <signal.h>
void handle_sigterm(int sig) {
// 清理资源
exit(0);
}
int main() {
signal(SIGTERM, handle_sigterm);
// ...
}