laradock 搭建 swoole + nginx 环境

安装docker和docker-compose

相关安装步骤在此不再赘述,参考之前的笔记:laradock搭建php环境

安装配置laravel-s

简介:LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能、更多可能性。
项目地址:https://github.com/hhxsv5/laravel-s

相关安装要求请移步项目地址查看。

安装
  1. 通过composer安装

    1
    composer require "hhxsv5/laravel-s:~3.6.0" -vvv
  2. 注册ServiceProvider
    Laravel: 修改文件config/app.php,Laravel 5.5+支持包自动发现,你应该跳过这步

    1
    2
    3
    4
    'providers' => [
    //...
    Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,
    ],
  3. 发布配置和二进制文件

    每次升级LaravelS后,需重新publish。

    1
    2
    3
    php artisan laravels publish
    # 配置文件:config/laravels.php
    # 二进制文件:bin/laravels; bin/fswatch; bin/inotify
  4. 修改配置config/laravels.php:监听的IP、端口等,请参考配置项

相关运行命令介绍

操作命令:

1
php bin/laravels {start|stop|restart|reload|info|help}
命令 说明
start 启动LaravelS,展示已启动的进程列表 `ps -ef
stop 停止LaravelS
restart 重启LaravelS,支持选项 `-d
reload 平滑重启所有Task/Worker/Timer进程(这些进程内包含了你的业务代码),并触发自定义进程的onReload方法,不会重启Master/Manger进程;修改config/laravels.php后,你只能调用restart来实现重启
info 显示组件的版本信息
help 显示帮助信息

安装配置laradock

laradock采用多项目配置,让laradock和项目在同级目录,需要配置hosts。

拉取laradock至代码同级目录
1
git clone https://github.com/laradock/laradock.git

like this:

1
2
3
+ laradock
+ project-1
+ project-2
复制env-example 为 .env
1
cp env-example .env
配置修改.env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 修改docker源为aliyun
# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true
CHANGE_SOURCE=true

# 修改composer源
WORKSPACE_COMPOSER_REPO_PACKAGIST=https://packagist.phpcomposer.com
# 修改node镜像地址
WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

# 修改npm源
WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org

# 不下载yarn,因为墙的原因,下载超时,yarn和npm一样。
WORKSPACE_INSTALL_YARN=false

# php-fpm 安装swoole
WORKSPACE_INSTALL_SWOOLE=true

# 修改时区
WORKSPACE_TIMEZONE=Asia/Shanghai

# cli 安装swoole的PHP扩展
PHP_FPM_INSTALL_SWOOLE=true

# php-worker 安装swoole,supervisor守护进程在php-worker中,需要swoole
PHP_WORKER_INSTALL_SWOOLE=true

# 修改MySQL的版本为5.7,减少麻烦,并配置数据库相关配置,并同步配置到项目.env中
MYSQL_VERSION=5.7
MYSQL_DATABASE=xxxxx
MYSQL_USER=laravels
MYSQL_PASSWORD=xxxxx
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=xxxxxx
配置redis

参考:laradock搭建php环境

配置nginx

/xxx/www/laradock/nginx/sites中新建xxx.conf文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
upstream laravels {
# Connect IP:Port
server php-worker:5200 weight=5 max_fails=3 fail_timeout=30s;
keepalive 16;
}
server {
listen 80;

server_name laravels.com;
root /var/www/laravue/public;
index index.php index.html index.htm;

# Nginx 处理静态资源,LaravelS 处理动态资源
location / {
try_files $uri @laravels;
}

location @laravels {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header Server-Protocol $server_protocol;
proxy_set_header Server-Name $server_name;
proxy_set_header Server-Addr $server_addr;
proxy_set_header Server-Port $server_port;
proxy_pass http://laravels;
}
}

ps: php-worker:5200 是因为LaravelS的进程守护是在php-worker中,并监听5200端口。

配置php-worker

在php-worker 中添加supervisor守护进程
路径:/xxxxx/www/laradock/php-worker/supervisord.d/
新建laravel-s.conf,配置启动命令、用户、日志等。

1
2
3
4
5
6
7
8
9
[program:laravel-s]
command=php /var/www/laravue/bin/laravels start -i
numprocs=1
autostart=true
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile=/var/www/laravue/storage/logs/supervisord-stdout.log

ps: 建议通过Supervisord监管主进程,前提是不能加-d选项并且设置swoole.daemonizefalse

项目.env配置

.env中配置

1
2
3
4
5
6
7
8
9
10
11
12
DB_CONNECTION=mysql 
DB_HOST=mysql # 注意
DB_PORT=3306
DB_DATABASE=xxx
DB_USERNAME=laravels
DB_PASSWORD=xxx

REDIS_HOST=redis # 注意
REDIS_PASSWORD=xxx
REDIS_PORT=6379

LARAVELS_LISTEN_IP=php-worker #LaravelS守护进程在php-worker中
构建并启动 Laradock 相关服务

在laradock目录中

1
docker-compose up -d nginx mysql redis php-worker

ps:php-fpmnginx 的 depends_on 依赖项,workspacephp-fpm 的依赖项,所以这两个容器会自动创建并启动,不需要写出来。
ps:启动后,可以通过ps查看进程运行情况,通过docker logs查看相关进程日志。

项目配置

通过docker-compose exec workspace bash进入容器,配置项目,具体步骤见项目README.md。
一般如:composer installnpm install 等。

配置hosts

在服务器中配置:

1
127.0.0.1 laravels.com

本机中配置:

1
xx.xx.xx.xx laravels.com

ps:多项目必须配置hosts

ab压测
1
ab -n 100 -c 100 http://laravels.com/ab_test

自测为php-fpm的5到6倍。

常见问题

  1. workspace 和 php-fpm 的区别
    环境配置文件 .env 里包含相似的两块配置:workspace 和 php-fpm,它们对应两个不同的容器,一个是 FPM,一个是 CLI。不管是安装插件还是修改配置,都要分开修改。