laravel使用swoole加速

本文详细介绍了如何在Docker环境中搭建LNMP,并通过安装Swoole来提升Laravel应用的性能。首先,通过Docker安装了nginx、PHP和MySQL,接着在PHP容器中安装Swoole扩展。然后,在Laravel项目中集成LaravelS。最后,通过配置nginx的swoole_test.conf文件并进行ab测试,验证了Swoole加速的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、docker搭建lnmp环境
  1. 安装docker
yum install -y docker

#在启动之前我们需要修改docker的镜像源:
[root@localhost docker]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://ftnejmh3.mirror.aliyuncs.com"]
}

systemctl start docker   # 启动docker
systemctl stop docker    # 停止docker
systemctl status docker  # 查看docker状态
systemctl restart docker # 重新启动docker
  1. 搭建nginx
#拉取nginx镜像
docker pull nginx

#运行容器 nginx
[root@localhost ~]# docker run -p 80:80 -d --name nginx -v /docker/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /docker/www:/docker/www  --privileged=true nginx
# -p 80:80:将容器的80端口映射到主机的80端口
# -d 后台运行(守护进程)
# --name nginx:将容器命名为nginx
# -v 将主机中当前目录下的/docker/www挂载到容器的/docker/www目录

#运行容器 nginx_swoole
[root@localhost ~]# docker run -p 8081:80 -d --name nginx_swoole -v /docker/nginx/swoole_test.conf:/etc/nginx/conf.d/default.conf -v /docker/www:/docker/www  --privileged=true nginx
# -p 8081:80:将容器的8081端口映射到主机的80端口
# -d 后台运行(守护进程)
# --name nginx_swoole :将容器命名为nginx_swoole 
# -v 将主机中当前目录下的/docker/www挂载到容器的/docker/www目录
  1. docker安装php
#拉取镜像
docker pull php:7.4-fpm
#运行容器 php
[root@localhost docker]# docker run -p 9000:9000 -d --name php -v /docker/www:/docker/www --privileged=true php:7.4-fpm
#-p 9000:9000 :将容器的9000端口映射到主机的9000端口
#-d 后台运行(守护进程)
#--name php:将容器命名为php
#-v 将主机中当前目录下的/docker/www挂载到容器的/docker/www目录

#查看容器IP
[root@localhost docker]# docker inspect php | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
  1. 搭建mysql
docker pull mysql

修改mysql 配置文件

[root@localhost docker]# vim /etc/my.cnf

[client]
port        = 3306
socket        = /tmp/mysql.sock

[mysqld]
secure_file_priv=/var/lib/mysql
port        = 3306
socket        = /tmp/mysql.sock
datadir = /usr/local/mysql/data
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 100G
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 4K
read_buffer_size = 768K
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
tmp_table_size = 32M
default_authentication_plugin = mysql_native_password
lower_case_table_names = 1
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id = 1
binlog_expire_logs_seconds = 600000
slow_query_log=1
slow-query-log-file=/usr/local/mysql/data/mysql-slow.log
long_query_time=3
early-plugin-load = ""

innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_buffer_pool_size = 128M
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 1
innodb_write_io_threads = 1

[mysqldump]
quick
max_allowed_packet = 500M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
[root@localhost docker]# docker run -p 3306:3306 -d --name mysql -v /etc/my.cnf:/etc/mysql/my.cnf --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql

#MYSQL_ROOT_PASSWORD=root 设置mysql 连接密码
#-p 3306:3306 :将容器的3306端口映射到主机的3306端口
#-d 后台运行(守护进程)
#--name mysql:将容器命名为mysql
#-v 将主机中的mysql配置挂载到容器的/etc/mysql/my.cnf
# 进入mysql容器
docker exec -it mysql bash
#连接mysql  密码为MYSQL_ROOT_PASSWORD设置的密码
mysql -uroot -p
#创建用户
create user `starsky`@`%` identified by "123456";
#授予权限
grant all on *.* to `test`@`%` with grant option;
二、docker环境安装swoole
  1. 获取swoole安装包,地址:https://pecl.php.net/package/swoole

  2. 解压swoole安装包 tar –zxvf swoole-4.6.6.tar

  3. 将解压出来的安装包copy到php容器 docker cp /home/swoole php:/usr/src/php/ext/swoole

  4. 安装swoole docker-php-ext-install swoole

  5. 完成安装后,查看swoole信息 php --ri swoole

三、laravel 安装LaravelS
#该扩展包具备自动发现功能(Laravel 5.5 以上版本可用),无需手动在 config/app.php 配置文件中注册,安装完成后,运行如下 Artisan 命令相应脚本和配置文件发布到根目录下:
composer require hhxsv5/laravel-s

#该命令会发布配置文件 laravels.php 到 config 目录下,以及脚本文件到 bin 目录下:
php artisan laravels publish

#你可以在配置文件中对 Swoole 进行一些基本配置,而脚本文件主要用于管理 Swoole 服务的启动、重载、关闭等操作。

#也可以在.env 修改工作进程数并重启服务


LARAVELS_LISTEN_IP=0.0.0.0   # 监听的ip
LARAVELS_LISTEN_PORT=5200    # 端口
LARAVELS_WORKER_NUM=4        # 工作进程数

#更多配置项: https://github.com/hhxsv5/laravel-s/blob/master/Settings-CN.md
#启动 LaravelS
root@localhost lmrs]# docker exec -it php bash
root@39fdb3494eb2:/var/www/html# cd /
root@39fdb3494eb2:/# cd docker/
root@39fdb3494eb2:/docker# cd www
root@39fdb3494eb2:/docker/www# cd lmrs/
#进入项目中目录启动laravels
root@39fdb3494eb2:/docker/www/lmrs# php bin/laravels start

在这里插入图片描述

四、nginx配置文件

-普通配置 default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    root /docker/www/lmrs/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /docker/www/lmrs/public;
    }

    location ~ \.php$ {
        root /docker/www/lmrs/public;
        fastcgi_pass   172.17.0.3:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

-swoole加速的 配置 swoole_test.conf

upstream swoole {
   server 172.17.0.3:5200 weight=5 max_fails=3 fail_timeout=30s;
   keepalive 16;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    root /docker/www/lmrs/public;
    index index.php index.html;

    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://swoole;
    }
}
五、ab测试swoole加速
  • 10个并发100次请求
    在这里插入图片描述
  • 50个并发1000次请求
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值