杜郎俊赏 - dujun.io

开源实例之多项目部署方案

前言

目前部署的开源实例都是 LNMP 架构,在没有并发的情况下,不会随着项目数量增加而导致系统负载显著提高。但想要部署编译型(常驻内存)实例,几个项目就不够用了。

如果这个问题不解决,本系列大概就要降级为 “PHP 和 JS 开源实例系列”,有点违背初衷。所以我将所有实例重构成了容器实现,在上个周末完成了架构方案。

部署方案

关键思路就是容器部署项目实例,并且能够定期销毁、自动重建。主要用到了 Docker、PHP webman 和 Nginx。

Docker

使用 Docker 做容器化部署。通过 docker-compose 编排,一个项目整合成一组容器。比如 WordPress 实例,包含了 LNMP 容器组和自身的代码容器。这样做的好处是方便隔离和回收,同时一整个项目只需要暴露一个 WEB 端口。

关于 Docker 配置细节会单独写一篇文章介绍:开源实例之Docker

webman

使用 webman 实现实例调度,调用 Docker 命令,完成销毁和重建。

webman 是 PHP 实现的高性能 HTTP 服务框架。关于 webman 会单独写一篇文章介绍:开源实例之webman

Nginx

使用 Nginx 协助完成自动重建实例。即在实例未生成或已被销毁时(报 502),跳转至调度页。以 WordPress 项目为例:

server {
    listen 443 ssl http2;
    server_name wordpress.dujun.space;

    error_page 502 = https://example.dujun.space/of/wordpress;
    ……
}

关于 Nginx 会单独写一篇文章介绍:开源实例之Nginx

实例调度

部署这套方案后,实现了实例定期销毁和自动重建。

秒级重建

访问实例网站时,如果实例仍在运行则正常打开页面;如果实例未创建或已销毁,则跳转调度页,调用命令生成实例,再跳转回实例页。

定期销毁

超过一小时没有访问的实例会自动销毁;在实例存续期间有新访问的,过期时间顺延。

定期销毁的作用,一是回收资源,降低系统开销;二是解决脏数据问题,避免无聊人士发布不健康内容。

后记

题图:爱蜜社 Vol.457 刘奕宁

使用容器技术后,理论上可以部署非常多的项目,除非多个实例存在并发。解决了这个问题,相信开源实例系列文章可以更快推进。

体验更多实例

标签: 开源实例
日期:2022-11-29