当前位置: 首页 > 后端技术 > PHP

Swoft系列教程:(一)使用Docker安装部署Swoft

时间:2023-03-29 19:05:11 PHP

之前写过一篇Docker安装部署Swoft的文章,但是有点冗长和混乱,所以重写为教程开头.你想读吗?Swoft项目:https://github.com/swoft-clou...Swoft文档:https://doc.swoft.org/Swoft图片:https://hub.docker.com/r/swof...Swoft简介首款基于Swoole原生协程的新时代PHP高性能协程全栈框架,内置协程Web服务器和普通协程客户端,常驻内存,独立于传统PHP-FPM,全异步非阻塞IO以类似同步客户端的方式实现异步客户端的使用,没有复杂的异步回调,没有繁琐的yield,具有类似Go的协程,灵活的注解,强大的全局依赖注入容器,完善的服务治理,灵活强大的AOP,标准的PSR规范implementation等,可用于构建高性能的web系统、API、中间件、基础服务等。即异步非阻塞IO、EventLoop、事件驱动。cpu_numworker可以承载高并发请求,提供协程/异步IO客户端,数据库连接池,对象连接池,任务进程池。优雅注解声明,IOC/DI容器,严格遵循PSR规范。Swoft镜像的主要用途Swoft官方提供了一个基于Debine的Docker镜像。镜像中已经安装并配置了运行Swoft所需的组件和依赖:PHP7.0+/Swoole/Composer/Pecl。虽然在不使用镜像的情况下,从头开始安装部署上述组件并不困难,但内置的镜像可以开箱即用,省去了这些略显繁琐的工作,让我们可以尽快投入到Swoft的开发中尽可能。另外,如果Swoft镜像和开发的配合只是为了快速体验Swoft,使用dockerrun-p80:80swoft/swoft拉取创建容器访问。Swoft项目开发中如何正确使用镜像?要想在开发工作中用好镜像,需要明确几点。镜像内置了完整安装的Swoft框架,但仅用于快速演示,不供大家修改,开发还是需要在本地Swoft项目上进行开发。我们要做的是将本地的Swoft框架挂载到镜像的工作目录/var/www/swoft来替换镜像自带的,这样启动Swoft服务就会启动映射到镜像的镜像容器本地Swoft项目。默认情况下,Swoft服务会作为pre-process启动,这就需要我们在挂载本地Swoft项目时保证所有的依赖已经完全安装(从github拉取的Swoft源码没有安装库依赖,需要使用Composerinstall)似乎是在咬尾巴。为了进行开发,需要将本地的Swoft项目挂载到镜像工作目录,因为容器启动的时候也会启动Swoft服务,所以需要挂载的本地Swoft项目必须使用Composer来安装依赖,嗯?这不还是需要在本地安装PHP+Composer吗?镜像不是都提供了吗?重复工作。修改Swoft镜像的入口点,使得Swoft容器不会同时启动Swoft服务,这样就不需要我们挂载的本地Swoft项目必须完全安装依赖。容器创建完成后,登录容器sh,使用镜像内置的Composer安装依赖并启动Swoft服务,这样就可以充分利用镜像内置的环境和工具,并愉快的开始Swoft的开发。下面是一个具体的例子。Swoft镜像的使用为这么多镜像的便捷点赞。不把镜像用到极致就不好了。swoft源码到本地cd~&&gitclonegit@github.com:swoft-cloud/swoft.git&&cdswoft2,查看swoft镜像的Dockerfile#在文件末尾设置entrypoint命令启动swoftserviceENTRYPOINT["php","/var/www/swoft/bin/swoft","start"]entrypoint是我们后面要改的参数3.直接用镜像创建容器dockerrun\-p8081:80\#映射主机808-v$(pwd):/var/www/swoft\#将本地Swoft项目挂载到镜像工作目录-it-d\#重要的是开启stdintty并以守护进程模式运行--entrypoint=""\#重要的是覆盖内置镜像指定入口点参数--namemy_swoft\#容器命令--privileges=true\#给swoft/swoftbash4权限,使用docker-compose更简洁#编辑docker-composelayoutfilevimdocker-compose.yml#内容修改如下version:'3'services:swoft:image:swoft/swoft:latestcontainer_name:my_swoft#为容器自定义一个名称轻松管理#build:./ports:-"8081:80"#端口映射volumes:-./:/var/www/swoft#挂载本地swoft项目到镜像工作目录stdin_open:true#打开标准输出-itty:true#开启ttysession-tprivileged:true#赋予创建文件夹等权限的#entrypoint:["php","/var/www/swoft/bin/swoft","start"]#入口启动命令是启动swoft服务entrypoint:["bash"]创建容器docker-composeup-dswoft./5.登录容器,安装依赖,启动Swoft服务。使用3或4中创建的Swoft容器,使用bash作为预启动进程,而不是启动Swoft服务。我们登录容器使用自带的Composer安装依赖后,启动Swoft服务可以是dockerexec-itmy_swoftbash#安装框架依赖composerinstall#启动/停止/重启Swoft服务phpbin/swoftstart|stop|restar6,启用hotreload,关闭daemon,让框架调试信息输出到stderr方便开发调试编辑本地Swoft项目.env文件#ApplicationAPP_DEBUG=true#Server...AUTO_RELOAD=true...#Swoole设置。..DAEMONIZE=0...保存并重启Swoft服务提示:可以使用PHPStormIDE配置FTP/SFTP文件自动上传方式,开发起飞~