一、docker搭建lnmp环境
- 安装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
- 搭建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目录
- 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",
- 搭建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
获取swoole安装包,地址:https://pecl.php.net/package/swoole
解压swoole安装包 tar –zxvf swoole-4.6.6.tar
将解压出来的安装包copy到php容器 docker cp /home/swoole php:/usr/src/php/ext/swoole
安装swoole docker-php-ext-install swoole
完成安装后,查看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次请求