一、启动文件作用
scf_bootstrap 为 Web Server 的启动文件,保证你的 Web 服务正常启动并监听请求。除此之外,你还可以根据需要在 scf_bootstrap 中自定义实现更多个性化操作:
·设定运行时依赖库的路径及环境变量等。
·加载自定义语言及版本依赖的库文件及扩展程序等,如仍有依赖文件需要实时拉取,可下载至 /tmp 目录。
·解析函数文件,并执行函数调用前所需的全局操作或初始化程序(如开发工具包客户端 HTTP CLIENT 等初始化、数据库连接池创建等),便于调用阶段复用。
·启动安全、监控等插件。
二、使用前提
·需具有可执行权限,请确保你的 scf_bootstrap 文件具备777或755权限,否则会因为权限不足而无法执行。
·能够在 SCF 系统环境中运行:
·CentOS 7.9,覆盖:Python 3.9、Python 3.7、Python 3.6、Python 2.7、Nodejs 16.13、Nodejs 14.18、Nodejs 12.16、Nodejs 10.15、Php 8.0、Php 7.4、Php 7.2、Php 5.6、Java 11(Kona JDK)、Java 8(Open JDK)、Go 1。
·其余版本是 CentOS 8.5。
·如果启动命令文件是 shell 脚本,第一行需有 #!/bin/bash。
·启动命令必须为绝对路径 /var/lang/${specific_lang}${version}/bin/${specific_lang},否则无法正常调用,详情请参见 标准语言环境绝对路径。
·建议使用监听地址为 0.0.0.0,不可以使用内部回环地址 127.0.0.1。
·结尾必须以 LF 回车结束。
三、创建方式
本地打包上传控制台快速创建你可以本地编写你的 scf_bootstrap 启动文件,确保文件权限满足要求后,和项目代码一起打包部署在 Web 函数上。你可以在 Serverless 控制台 中创建 Web 函数。
创建函数 流程中,在高级配置 > 启动命令中编辑你的启动文件,云函数 SCF 为常用 Web 框架提供了通用启动模板,你也可以根据实际情况进行修改。如下:
函数创建完成后,控制台将自动把你的代码和 scf_bootstrap 一起打包部署。 注意:控制台配置仅在上传的代码里未检测到 scf_bootstrap 时生效,如果你的项目里有 scf_bootstrap 文件,系统会以项目里的 scf_bootstrap 为准进行部署。
部署完成后,你可以在代码编辑器中查看 scf_bootstrap 文件并进行编辑。如下:
四、常见错误定位
执行文件 scf_bootstrap 作为容器启动命令,必须保证容器可以正常启动运行,执行代码逻辑,因此,请确保你的启动命令写法正确。如遇到 405 错误码信息,通常为执行文件无法正常运行导致,请确保你的启动文件写法正确。
五、标准语言环境绝对路径
| 语言版本 | 绝对路径 |
| 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 |
| Node.js 10.15 | /var/lang/node10/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 |
| Python 2.7 | /var/lang/python2/bin/python2 |
| PHP 8.0 | /var/lang/php80/bin/php |
| PHP 7.4 | /var/lang/php74/bin/php |
| PHP 7.2 | /var/lang/php7/bin/php |
| PHP 5.6 | /var/lang/php5/bin/php |
| JAVA 11 | /var/lang/java11/bin/java |
| JAVA 8 | /var/lang/java8/bin/java |
六、常见 Web Server 启动命令模板
NodejsPythonPHP#!/bin/bashexport PORT=9000/var/lang/node12/bin/node app.js # 改为你自己的启动函数名#!/bin/bashexport PORT=9000/var/lang/python3/bin/python3 app.py # 改为你自己的启动文件名#!/bin/bash/var/lang/php7/bin/php -c /var/runtime/php7 -S 0.0.0.0:9000 hello.php # 改为你自己的入口函数名