登录
  • 人们都希望被别人需要 却往往事与愿违
  • 伟大的车工值得给他几倍于普通车工的薪水。但一个伟大的程序员, 其价值相当于普通程序员的 1 万倍!@比尔. 盖茨

用 Azure Container Apps 运行 PHP 网站

Azure Benny 小土豆 3766 次浏览 1470 字 2 个评论
文章目录 [显示]

既然是容器,那么也可以跑数据库的吧?那只要再加上一个 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 选择已有的虚拟网络

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

创建存储

Primary Service 选择 Azure Files

用 Azure Container Apps 运行PHP网站

创建 File Shares

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

连接 volume 到容器

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

用 Azure Container Apps 运行PHP网站

在容器环境中添加 SMB

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

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

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

容器应用 volume

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

用 Azure Container Apps 运行PHP网站

然后添加一个数据库的 sidecar

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

存储安全

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

用 Azure Container Apps 运行PHP网站

配置应用

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

最终结果

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

用 Azure Container Apps 运行PHP网站

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

用 Azure Container Apps 运行PHP网站

总结

正常的应用不应该这样配置的,两个容器在同一个 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
喜欢 (29)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(2) 个小伙伴在吐槽
  1. 能不能介绍下如何安装 Odoo18+Postgresql 两个容器到 ACA, 或者使用 Azure PostgreSQL flexible server
    Helloworld20252024-12-06 20:10 回复
    • aca 适合无状态的应用, 最好别像我这么搞。 你要用数据库的话,要么用托管的,应该可以设置 vnet 之类的让你的 container environment 互联(或者直接就是 TSL 的方式连接);要么就自己开 vm 运行数据库 然后 vnet peering 就行
      Benny 小土豆 2024-12-06 20:13 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿