启动文件说明
在 HTTP 云函数中,scf_bootstrap 是一个必需的启动文件,作为 Web Server 的启动入口。它负责启动您的 Web 服务、配置运行环境、加载依赖并确保服务正常监听请求。
启动文件的作用
scf_bootstrap 文件在云函数实例启动时自动执行,主要承担以下职责:
| 职责 | 说明 |
|---|---|
| 启动 Web 服务 | 确保您的 Web 服务正常启动并监听请求(默认端口为 9000) |
| 环境配置 | 设定运行时依赖库的路径、环境变量等 |
| 依赖加载 | 加载自定义语言、版本依赖的库文件及扩展程序 如需实时拉取依赖,建议下载至 /tmp 目录 |
| 全局初始化 | 执行函数调用前所需的全局操作 (如 HTTP Client 初始化、数据库连接池创建等),便于在调用阶段复用 |
| 插件加载 | 启动安全、监控等插件 |
使用前提
为了确保启动文件能被正确执行,必须满足以下条件:
| 要求 | 说明 |
|---|---|
| 文件名固定 | 必须命名为 scf_bootstrap,不支持其他名称 |
| 可执行权限 | 文件必须具备可执行权限(建议 777 或 755) |
| 系统环境 | 需能在 SCF 系统环境(CentOS 7.6)中运行 |
| Shebang 声明 | 如果是 Shell 脚本,第一行必须包含 #!/bin/bash |
| 绝对路径 | 启动命令必须使用绝对路径(见下文"标准语言环境绝对路径") |
| 监听地址 | 建议使用 0.0.0.0,不可使用内部回环地址 127.0.0.1 |
| 文件格式 | 文件结尾必须以 LF 换行符结束(不能是 CRLF) |
| 写权限限制 | 在腾讯云标准环境下,仅 /tmp 目录可读写,输出文件时请注意路径 |
⚠️ 重要提示:在 Linux/macOS 系统中,使用
chmod +x scf_bootstrap或chmod 777 scf_bootstrap命令设置可执行权限。
标准语言环境绝对路径
在编写启动命令时,必须使用语言对应的绝对路径。以下是常见版本路径参考:
| 语言版本 | 绝对路径 |
|---|---|
| Node.js 18.15 | /var/lang/node18/bin/node |
| Node.js 16.13 | /var/lang/node16/bin/node |
| Node.js 14.18 | /var/lang/node14/bin/node |
| Node.js 12.16 | /var/lang/node12/bin/node |
| Python 3.10 | /var/lang/python310/bin/python3.10 |
| Python 3.9 | /var/lang/python39/bin/python3.9 |
| Python 3.7 | /var/lang/python37/bin/python3.7 |
| Python 3.6 | /var/lang/python3/bin/python3.6 |
| PHP 8.0 | /var/lang/php80/bin/php |
| PHP 7.4 | /var/lang/php74/bin/php |
| PHP 7.2 | /var/lang/php7/bin/php |
| Java 11 | /var/lang/java11/bin/java |
| Java 8 | /var/lang/java8/bin/java |
启动命令模板
- Node.js
- Python
- PHP
- Java
- Go
Functions Framework(推荐)
#!/bin/bash
node node_modules/@cloudbase/functions-framework/bin/tcb-ff.js --port=9000 --logDirname=/tmp/logs --interceptOutput=false --extendedContextKey=X-Cloudbase-Context
参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
--port | 函数监听端口 | 9000 |
--logDirname | 日志存储目录 | /tmp/logs |
--interceptOutput | 是否拦截标准输出 | false |
--extendedContextKey | 扩展上下文请求头键名 | X-Cloudbase-Context |
💡 提示:需要在
package.json中安装@cloudbase/functions-framework依赖。
Express 框架
#!/bin/bash
export PORT=9000
/var/lang/node18/bin/node app.js
📝 说明:请将
app.js修改为您的实际启动文件名。
Next.js 框架
#!/bin/bash
export PORT=9000
/var/lang/node18/bin/node node_modules/next/dist/bin/next start
Flask 框架
#!/bin/bash
export PORT=9000
/var/lang/python3/bin/python3 app.py
📝 说明:请将
app.py修改为您的实际启动文件名。
Django 框架
#!/bin/bash
export PORT=9000
/var/lang/python3/bin/python3 manage.py runserver 0.0.0.0:9000
FastAPI 框架
#!/bin/bash
export PORT=9000
/var/lang/python3/bin/python3 -m uvicorn main:app --host 0.0.0.0 --port 9000
📝 说明:请将
main:app中的main修改为您的应用文件名,app修改为应用实例名。
内置 Web Server
#!/bin/bash
/var/lang/php7/bin/php -c /var/runtime/php7 -S 0.0.0.0:9000 hello.php
📝 说明:请将
hello.php修改为您的入口文件名。
Laravel 框架
#!/bin/bash
/var/lang/php7/bin/php artisan serve --host=0.0.0.0 --port=9000
Spring Boot
#!/bin/bash
export PORT=9000
/var/lang/java8/bin/java -Dserver.port=${PORT} -jar target/my-app.jar
📝 说明:请将
my-app.jar修改为您的实际 JAR 文件名。