Docker下搭建swoft开发环境

Docker下搭建swoft开发环境

[toc]

前言

使用Laravel也大概有三年时间了,很喜欢这款框架,但是也知道这个框架的弊端在哪里,目前Laravel仅适合开发一些企业低频应用,也就是说,并发量不是很高的项目,比如一些管理系统什么的,因为Laravel太重,加载的文件太多,在高并发,高访问的情况下优化起来比较困难,当然,也有人说,不是还有Lumen么,说实话,虽然我用了Laravel三年多,但我基本没怎么用过Lumen,所以我不对这些做过多评论。

后来在网上看到关于swoole的一些介绍,感觉像是神器,奈何文档比较感人,一直没怎么入门,后来看到swoft框架,是基于swoole的一些封装,于是就研究下。

参考地址: https://segmentfault.com/a/1190000015759752

安装docker & docker-compose

略,网上一大把,请自行搜索或参考下我之前的博文

Swoft开发环境

打开看下docker-compose.yaml文件内容

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
swoft:
container_name: swoft //窗口名
image: swoft/swoft //镜像名
ports: //端口
- "80:80"
volumes: //挂载目录
- ./:/var/www/swoft
stdin_open: true
tty: true
entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"]

上面的是官方默认的docker-compose.ymal,使用docker-compose -d up命令进行启动安装,但实际上,我是安装成功了,但是使用docker-compose -ps 查到的stateExiting状态,应该是有异常了,但是不知道什么原因,于是参考上面的博客,使用它的yaml文件,如下:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
swoft:
container_name: swoft
image: swoft/swoft
ports:
- "80:80"
volumes:
- ./:/var/www/swoft
stdin_open: true
tty: true
entrypoint: ["sh"]

然后 dokcer-compose -d up

备注:

1
ERROR: for swoft Cannot start service swoft: b'driver failed programming external connectivity on endpoint swoft(dab0f4d00620e2f5c07e33084ca5cac6f08cb48018d6b737eadc035e5aa0b597): Bind for 0.0.0.0:80 failed: port is already allocated'

如果遇到上面提示,就说明80端口被占了,所以,要修改下上面的端口,比如改成81

进入容器

  • docker ps 查看容器id
  • docker exec -it 容器id bash 或者 docker exec -it swoft bash
  • php -v or php -m 查看php信息
  • composer install 安装依赖
  • 启动swoft服务 php bin/swoft start
1
2
3
4
5
6
7
8
root@f22173763374:/var/www/swoft# php bin/swoft start
Server Information
********************************************************************
* HTTP | host: 0.0.0.0, port: 81, type: 1, worker: 1, mode: 3
* TCP | host: 0.0.0.0, port: 8099, type: 1, worker: 1 (Enabled)
********************************************************************
Server has been started. (master PID: 15, manager PID: 16)
You can use CTRL + C to stop run.

看到如上信息,就说明运行成功了!

但是,但是,但是,有个问题,我们在外面如何访问呢?这个问题卡了我好一会儿

因为我改了端口的原因,所以访问的地址应该是http://127.0.0.1:81 但实际是不行的,访问不到,后来,我才突然想起来,swoft的配置文件.env里,有一个关于http服务的配置,如下:

1
2
3
4
5
6

# HTTP
HTTP_HOST=0.0.0.0
HTTP_PORT=81 //把这里的端口也改成81
HTTP_MODE=SWOOLE_PROCESS
HTTP_TYPE=SWOOLE_SOCK_TCP

然后把上面的swoft服务 ctrl+c,断开,重新运行下,然后再使用http://127.0.0.1:81 就ok了

如下图:

image