kleijnweb / symfony-swagger-microservice-edition
这是一个“接口优先”的微服务版Symfony,既精简又强大,且非官方版本。
Requires
- php: >=5.4.0
- kleijnweb/swagger-bundle: >=2.2
- symfony/framework-bundle: ^2.7
- symfony/monolog-bundle: ~2.6
- vlucas/phpdotenv: ~2.0
Requires (Dev)
- fr3d/swagger-assertions: ^0.2.0
- mikey179/vfsstream: ^1.5
- phpunit/phpunit: 4.1.*
- sensio/generator-bundle: ~2.3
- symfony/browser-kit: ^2.7
- symfony/process: ^2.7
- zendframework/zend-stdlib: 2.4.*
This package is not auto-updated.
Last update: 2024-01-15 08:28:02 UTC
README
这是一个“接口优先”的微服务版Symfony,既精简又强大,且非官方版本。
更完整的示例,请参阅 swagger-bundle-example。
精简
Symfony标准版包含不少于125MB的字节。这个版本为32MB(两者都使用--no-dev安装)。组件是从Symfony中精选的,而不是包含整个框架及其所有装饰和一些第三方内容。
少即是多。包含反映这一理念的nginx配置模板。
注意:symfony/framework包添加了许多不必要的依赖。没有它们,这个版本约为15MB(见此问题)。
强大
这个版本使用kleijnweb/swagger-bundle将Swagger的路由和输入验证集成到Symfony中。除了其(非常适度)的依赖之外,这个版本只增加了vlucas/phpdotenv。Monolog被添加为记录器,因为SwaggerBundle可以与任何PSR记录器一起工作,并且仅依赖于接口包。
此包仅使用SwaggerBundle的最小功能。有关实现选项的概述,请参阅kleijnweb/swagger-bundle。
非官方
我以任何方式都与SensioLabs无关,也没有特别与Symfony社区联系。这是一个无政府主义城市,小心。
快速入门
composer install
- 将
.env.dist
重命名为.env
- 确认一切正常,开始弄乱事情:
phpunit -c app
- 将
app/config/swagger.yml
替换为您的Swagger - 开始对宠物商店进行黑客攻击 :)
注意:要更改根命名空间从Acme到您自己的,更新composer.json自动加载配置和 install
。
Docker
为了遵循本节,您需要安装 Docker。这个单行命令应该可以做到这一点
curl -sSL https://get.docker.com/ | sh
想要立即拥有奇妙的东西?那么先 ./kickstart.sh
,之后再提问。
PHP 7.0 + FPM Docker容器
运行速度相当快。整个往返通常保持在50ms以下(不包括初始缓存预热、外部资源和不同硬件)。
要构建您的应用程序,运行 docker build -t my-service-name .
。如有必要,编辑php.ini。然后作为后台进程运行容器:docker run -d my-service-name
。现在您可以使用任何fcgi前端,例如nginx。
冗余FCGI服务
在单个服务器上,使用docker容器进行负载均衡并没有太大意义。但拥有冗余设置不仅可以保护您免受停机时间的影响,还可以实现零停机部署。
Jason Wilder 开发了一个易于使用的库,当某些 Docker 事件被触发时,它会更新配置。您可以使用它来自动更新 Nginx 中的上游 fcgi 服务器列表。说明
如果您还没有做,构建您的服务镜像
docker build -t my-service-name-v1 .
创建一个默认的、虚拟的 nginx 配置(一旦 docker-gen 启动,它就会被替换)
echo 'events { worker_connections 1024; }' > /tmp/nginx/nginx.conf
运行一个标准的 nginx 容器,将端口 8000 暴露给主机(如果您喜欢,也可以是 80),但将其配置目录添加为卷
docker run -d --name nginx -p 8000:80 -v /tmp/nginx:/etc/nginx -t nginx
确认容器正在运行(docker ps
)。将打包的 nginx.tmpl 放在 docker-gen 可以访问的地方
rm -rf /tmp/templates && mkdir /tmp/templates && cp nginx.tmpl /tmp/templates
注意:这个 nginx 配置已经几乎被精简到运行微服务所必需的。您可能需要编辑它。任何暴露端口 9000 的容器都将使用此模板添加为上游服务器。再次提醒,您可能需要编辑它。
运行一个 docker-gen 容器,它会监控 Docker 中容器的变化,并更新 ngnix.conf。
docker run -d --name my-app-name-nginx-gen --volumes-from nginx \ -v /var/run/docker.sock:/tmp/docker.sock \ -v /tmp/templates:/etc/docker-gen/templates \ -t jwilder/docker-gen:0.3.4 -notify-sighup nginx -watch --only-exposed /etc/docker-gen/templates/nginx.tmpl /etc/nginx/nginx.conf
注意:如果容器没有启动,您可能编辑了 ngnix.tmpl,并且存在解析错误。运行时不要使用 -d
以进行调试。
要看到魔法的效果,请监视主机系统上的 nginx.conf
tail -n 50 /tmp/nginx/nginx.conf
开始运行基于您的服务镜像的容器
docker run -d my-app-name-v1 docker run -d my-app-name-v1 docker run -d my-app-name-v1
upstream
部分看起来可能像这样
upstream phpfpm_upstream {
# kickass_payne
server 172.17.1.108:9000;
# backstabbing_yonath
server 172.17.1.105:9000;
# jovial_fermat
server 172.17.1.97:9000;
}
尝试停止和启动容器以查看配置更新,例如 docker stop kickass_payne
。
您可以通过请求 http://127.0.0.1:8000/v2/pet/findByStatus?status=pending
来测试演示 API。
部署您服务的新版本再简单不过了。构建新版本,然后反复停止旧容器并启动新容器,直到所有容器都被替换。
享受吧 :)
许可证
MIT