前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用云函数自定义运行时部署php8.0并访问pgsql

使用云函数自定义运行时部署php8.0并访问pgsql

原创
作者头像
markzhang12
发布2020-12-28 11:12:18
1.9K2
发布2020-12-28 11:12:18
举报

在云函数(Serverless Cloud Function,SCF)已支持的开发语言及版本的标准运行环境外,为了满足更多个性化开发语言及版本的函数实现,SCF 提供了 Custom Runtime 服务,即可定制化运行环境。通过开放实现自定义函数运行时,支持根据需求使用任意开发语言的任意版本来编写函数,并实现函数调用中的全局操作,如扩展程序的加载,安全插件,监控 agent 等。SCF 与 Custom Runtime 通过 HTTP 协议通信完成事件的响应处理。

这里让我们尝试体验一下scf的自定义运行时功能,部署在scf上部署下php8.0并带上pgsql的插件用来访问pg数据库

基础环境准备

首先准备 一台安装了centos 7 系统的设备或者docker容器,确保和scf运行环境一致,避免so文件依赖导致的一些错误。然后让我们来安装基础环境。

代码语言:txt
复制
 yum install gcc gcc-c++ gdb libxml2-devel.x86_64 sqlite-devel.x86_64 postgresql-server postgresql-devel

然后下载并解压缩php8.0的源代码

代码语言:txt
复制
wget https://www.php.net/distributions/php-8.0.0.tar.gz
tar -zxvf php-8.0.0.tar.gz

编译并安装

接下来配置并编译php 框架

代码语言:txt
复制
cd php-8.0.0
./configure --prefix=/opt/php80/ --enable-debug --enable-fpm   --enable-cli  --with-pgsql=/usr/lib64 --with-pdo-pgsql=/usr/lib64  --with-openssl
make -j8
make install
cp php.ini-production /opt/php80/lib/php.ini

这里让我们看一下需要注意的地方

  1. configure这一步的时候我们需要看到如下的提示信息才能说明配置成功,如果其中出现了任何错误关键词的话,一般来说多少缺少相关依赖,通过yum安装依赖后再进行尝试。
    config.png
    config.png
  2. 我们通过指定了 prefix 让程序在make install的时候会把php框架安装到opt/php80下,通过with-pgsql/with-pdo-pgsql指定了编译的时候讲pgsql的支持编译到框架内部,后续不再需要通过php.ini里面指定插件来使用pgsql。
  3. make -j8 是因为笔者使用的编译设备是8核心设备,启动8线程编译可以对编译速度有所提升,建议实际编译的时候这里的属性根据自己的设备核心数来合理配置。

编译插件并安装(可选)

如果在编译安装的时候,忘记了某些功能,后续又想加上,那么可以这样操作。这里我们用openssl来举例子,编译openssl插件,假设我们在第一步编译框架的时候忘记加上--with-openssl 了,那么我们的框架就不支持TLS了,这在现代互联网大量使用https的情况下是难以接受的,所以我们可以通过额外的插件编译来补充功能。

代码语言:txt
复制
cd php-8.0.0/ext/openssl
/opt/php80/bin/phpize 
./configure --with-php-config=/opt/php80/bin/php-config
make 
make install

执行这些步骤后openssl.so会被安装到框架的插件目录下,然后需要编辑php.ini启动插件,将如下行加入到php.ini中

代码语言:txt
复制
extension=openssl.so

现在我们的框架可以支持https了,如果有其他的插件需要安装,操作方式也是类似的。

打包框架并作为层上传

到目前为止,我们的框架已经编译成功了,我们现在可以将它压缩并作为层上传到scf

代码语言:txt
复制
cd /opt
zip -q -r php.zip php80/

使用scf的层功能上传框架

layer1.png
layer1.png

然后由于我们要使用到pgsql,php的pgsql插件是基于libpq.so实现的,所以我们也要将依赖的so文件打包

代码语言:txt
复制
mkdir clibs
cd clibs
cp /usr/lib64/libpq.so.5.5 ./libpq.so.5
zip -q -r customlib.zip *

上传补充的so文件包,这个包解压后会被部署在scf的opt文件夹下,scf默认的LD_LIBRARY_PATH环境变量会从opt下寻找需要加载的so文件。

layer2.png
layer2.png

在我们完成层的创建后,我们可以创建需要运行的函数主体了,填写函数名并制定自定义运行时,点击下一步

scf1.png
scf1.png

在第二次函数配置中上传打包好的php代码,详细代码可以参考我们的实例代码库

scf2.png
scf2.png

最后打开高级配置并绑定层,可以点击添加层来添加多个层绑定,点击完成,等待scf函数生成。

scf3.png
scf3.png

最后我们可以看到这样的一个界面就说明完成了scf函数上传。

scf4.png
scf4.png

修改一下index.php中的pgsql的连接字符配置为自己的pgsql配置,然后运行测试函数,可以看到函数的正常运行和返回。

scf5.png
scf5.png

同时我们可以在pgsql的db里面看到插入的数据,注意这里笔者用的databases名称是phptest,表名称是scflog,测试前请确保表存在,如果修改了表名称需要对应修改index.php第六行的插入语句表名称。

scf6.png
scf6.png

到这里我们完成scf自定义运行时使用php 8.0框架,同时还使用了scf官方默认php运行时不支持的插件,看起来体验是不是非常不错,心动不如行动,赶快试试吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础环境准备
  • 编译并安装
  • 编译插件并安装(可选)
  • 打包框架并作为层上传
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档