土豆不好吃

用 Azure Container Apps 运行PHP网站

文章目录[显示]

既然是容器,那么也可以跑数据库的吧?那只要再加上一个PHP,就可以跑 WordPress、Typecho之类的应用了!

在 Azure上,用 Container Apps也是可以做到serverless PHP应用的,具体来说就是:

一个pod里开两个容器(不太推荐这种方式),一个是php-apache,一个是MySQL,通过挂载 Azure Files作为volumes来做数据存储。

为什么想这么玩,是因为:

  1. 优化大陆访问,Azure的亚洲机房对大陆访客很友好,因此不能用 Cloudflare
  2. 不想自己管理SSL证书,因此不能用vm
  3. managed database太贵了用不起
  4. FrontDoor也太贵了,每个月要$35的保护费🥹

使用这种方案的好处是,在访问量不是很大的情况下,成本应该可以忽略不计,甚至可以在无访问时缩放到0副本,真正“无服务器” 😂

创建资源组

创建资源组,创建一个vnet,因为存储不想公开给所有人,也方便以后和其他虚拟机内网互通。

创建容器应用

创建的时候,Container Apps Environment 选择已有的虚拟网络

配置镜像,这个镜像是我自己构建的,基于 php:8.3-apache,支持MySQL、PostgreSQL、SQLite,添加了 mod_rewrite,足够给WordPress和Typecho用

创建存储

Primary Service选择 Azure Files

创建 File Shares

我创建了两个,一个是数据库的,一个是网站文件的

连接 volume到容器

在创建完存储后,去复制一下access key

在容器环境中添加 SMB

依次输入信息,这里没有补全,不要输入错了哦

在容器环境中创建完之后,就可以到容器应用中添加啦

这里需要注意,数据库的卷可能需要如下额外挂载参数

uid=999,gid=999,nobrl,mfsymlinks,cache=none

容器应用volume

编辑容器,添加volume就可以了

然后添加一个数据库的sidecar

如果需要配置环境变量,也可以一起配置了

最终结果是这样的两个容器,在一个pod里,我这种穷人自然只能选择最低配置啦

存储安全

默认存储是可以公网访问的(需要用户名密码),为了更安全,我们可以配置为只有某几个虚拟网络可以访问

配置应用

可能需要进入 console,执行一下创建数据库之类的操作,这点就自行发挥了。

最终结果

在不使用的时候,容器可以缩为0(可以配置为最低1副本)

在有请求的时候,真的能访问耶,而且还可以自动扩容!

总结

正常的应用不应该这样配置的,两个容器在同一个pod内耦合也是不理想的。

如果想要利用 Azure的优良线路,正常来说应该选择如下方法之一

  1. Azure VM,自己配置SSL证书,域名解析到这个IP,最经典的操作
  2. Azure FrontDoor + 任意VM,SSL证书可以由FrontDoor管理
  3. Azure应用网关 + 任意VM,解析域名到网关的IP,配置SSL证书,然后上传证书给应用网关
  4. Azure Load Balancer + 任意VM,证书需要在VM上配置好,因为LB是4层的
  5. Container Apps运行PHP,用托管数据库,Container Apps支持托管SSL
  6. Container Apps运行PHP,通过VM运行数据库,两者网络之间创建对等连接
  7. Static Web Apps,只能给静态站点用
  8. Web App + Database,完全托管,价格很感人
  9. Azure Kubernetes Service ,这个我可能不太懂,但是应该可行……

最后……

PHP用什么跑不好要用这个,真是只有真正的赛博精神病才能够想出来这种操作🤡


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/aca-php.html
退出移动版