Swoft 系列教程:(1)使用 Docker 安装部署 Swoft
之前有写过一篇 Docker 安装部署 Swoft 的文章,但有些冗余混乱,故重写作为教程的开篇。要不读读看?
Swoft项目:https://github.com/swoft-clou...
Swoft文档:https://doc.swoft.org/
Swoft镜像:https://hub.docker.com/r/swof...
Swoft 简介
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。
即异步非阻塞IO,EventLoop,事件驱动。cpu_num 个 worker 即可承载高并发请求,提供协程/异步IO客户端,数据库连接池,对象连接池,任务进程池。优雅的注解声明,IOC/DI容器,严格遵循PSR规范。
Swoft 镜像的主要用途
Swoft 官方提供了基于 Debine 的 Docker 镜像。镜像中已安装配置好运行 Swoft 的所需组件及依赖:PHP 7.0+ / Swoole / Composer / Pecl。虽然不使用镜像从头安装部署以上几项组件也不难,但镜像内置可以开箱即用,免去了这些略繁琐的工作,让我们尽可能快的投入到 Swoft 的开发中去。
此外
Swoft 镜像与开发的配合
如果只是单纯的想快速体验 Swoft,使用 docker run -p 80:80 swoft/swoft 拉取创建容器访问即可。
如何正确的在 Swoft 项目的开发中使用镜像呢?如果是要将镜像好好利用到开发工作中,则需要清楚一下几点。
- 镜像内置完全安装的 Swoft 框架,但它只是用来快速演示的,并不是要你拿去修改,开发还是要对本地的 Swoft 项目开发。
- 我们应该做的是将本地的 Swoft 框架 挂载到镜像的工作目录 /var/www/swoft 从而替换掉镜像自带的,这样启动 Swoft服务 就会启动映射到本地的 Swoft 项目了
- 镜像的容器启动时默认会启动 Swoft 服务 作为前置进程,这就要求我们在挂载了本地 Swoft 项目时需要保证已完全安装了各项依赖(github 拉取下来的 Swoft 源码 并没有安装库依赖,需要使用 Composer install 一下)
好像咬到尾巴了,为了开发需要挂载本地 Swoft 项目到镜像工作目录,因为容器启动时还会一并启动 Swoft 服务,所以要求挂载的本地 Swoft项目 必须使用 Composer 安装好依赖,嗯?这不还是得在本地装 PHP + Composer 嘛,镜像不是都提供了嘛,重复劳动了。
- 修改 Swoft 镜像的 entrypoint 使得 Swoft 容器启动时不同时启动 Swoft 服务,这就不需要要求我们挂载的本地 Swoft 项目必须完全安装好依赖了。
- 容器创建好后,登入容器 sh,使用镜像内置的 Composer 安装依赖
- 启动 Swoft 服务
这样就能充分利用镜像内置的环境和工具,快乐的开始 Swoft 的开发了工作了,下面给出具体的实例。
Swoft 镜像的使用
前面夸赞了那么多镜像的便利之处,下面如果不完全把镜像用到极致那就不太好了 O(∩_∩)O哈哈~
1、首先我们从 github 上拉取最新的 Swoft 源码到本地
cd ~ && git clone [email protected]:swoft-cloud/swoft.git && cd swoft
2、查看 swoft 镜像的 Dockerfile
# 在文件尾设定了 entrypoint 命令为 启动 swoft服务 ENTRYPOINT ["php", "/var/www/swoft/bin/swoft", "start"]
entrypoint 就是我们后面需要改掉的参数
3、直接使用镜像创建容器
docker run \ -p 8081:80 \ #映射宿主机808 -v $(pwd):/var/www/swoft \#挂载本地 Swoft 项目到镜像工作目录 -it -d \ #重要 开启 stdin tty 并以daemon模式运行 --entrypoint="" \#重要 覆盖掉镜像内设定的 entrypoint 参数 --name my_swoft \#容器命令 --privileges=true \#赋予权限 swoft/swoft bash
4、使用 docker-compose 更为简洁
#编辑 docker-compose 编排文件 vim docker-compose.yml #内容修改如下 version: '3' services: swoft: image: swoft/swoft:latest container_name: my_swoft # 给容器自定义个名称便于管理 #build: ./ ports: - "8081:80" #端口映射 volumes: - ./:/var/www/swoft # 挂载本地swoft项目到镜像工作目录 stdin_open: true #打开标准输出 -i tty: true # 打开 tty 会话 -t privileged: true # 给与权限 比如创建文件夹之类的 #entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口启动命令 即启动 swoft 服务 entrypoint: ["bash"]
创建容器
docker-compose up -d swoft ./
5、登入容器,安装依赖,开启 Swoft 服务
使用3或4创建的Swoft容器,便以 bash 作为启动的前置进程,而非启动 Swoft 服务,我们登入容器使用内置的 Composer 安装依赖后,启动Swoft服务即可。
docker exec -it my_swoft bash # 安装框架依赖 composer install # 启动/停止/重启 Swoft 服务 php bin/swoft start|stop|restar
6、开启热重载,关闭 daemon,让框架调试信息输出到 stderr 方便开发调试
编辑本地的 Swoft 项目 .env 文件
# Application APP_DEBUG=true # Server ... AUTO_RELOAD=true ... # Swoole Settings ... DAEMONIZE=0 ...
保存并重新启动 Swoft服务
小提示:可以使用 PHPStorm IDE 配置 FTP/SFTP 文件改动自动上传的方式,开发起飞~