一步步教你如何使用 laradock 搭建项目环境

前言:

看群里和laravel社区有些人对docker不太会使用,在这里我推荐使用laradock来部署我们的项目环境,用laradock部署简单快捷,方便管理,可以为你省出很多时间陪陪家人。现在用laradock一步步搭建环境。

setup 1:

从github上拉去laradock项目

git clone https://github.com/laradock/laradock.git   

setup 2:

进入laradock文件夹,重命名或者复制 env-example 到 .env文件

setup 3:

编辑.env文件(这个.env文件是对环境信息的一些配置)。在这里对.env文件里一些配置信息做个简单说明:

1.APPLICATION=../    设置docker-compose基础目前映射  比如:容器里的 /var/www目录映射到上级目录
2.PHP_VERSION=71     使用环境的php版本号。这里71表示7.1版本。之后在安装的过程中,php-fpm和php-cli安装版本都会引用这个变量。
3.PHP_INTERPRETER=php-fpm     使用php的解释引擎,这儿有两个参数可以选择(hhvm php-fpm)
4.DATA_SAVE_PATH=~/.laradock/data     数据保存目录。这儿的意思是:容器里的数据目录映射到宿主机哪个目录。
5.DOCKER_HOST_IP=10.0.75.1    设定docker内部网络ip
备注:简单的介绍几个配置说明,建议同学们有时间可以把该配置文件读一遍,能理解每一个参数的含义,这样有助于搭建docker-compose环境。还有同学们只需要知道这个.env文件是对docker-compose构建容器时候,提供的一些参数即可。很像laravel的 .env文件
对了,.env文件还有这下面的一些参数呢,它的意思就是具体对某一个容器的设置了。
    例如:
    PHP_FPM_INSTALL_XDEBUG=false
    PHP_FPM_INSTALL_MONGO=false
    PHP_FPM_INSTALL_MSSQL=fals
    比如这些就是设定在php-fpm容器中中是否安装xdebug,mongo扩展这些。     (建议同学们下来自己看看,由于文章篇幅原因我只复制了一点点内容。因为是教程的原因,我这里也不作更改,使用默认的配置即可。)
在这里再介绍下: docker-compose.yml文件, 这个文件是对具体容器的配置,还需要熟悉一些yml文件的一些语法。不过没关系,我会在文章后面附上docker和docker-compose的学习地址。

setup 4:

接下来我们就开始构建容器吧!

运行: docker-compose up -d mysql nginx
参数 up 表示启动容器  -d 表示后台运行
第一次构建会有点慢,因为它要拉取数据。

setup 5:

访问服务器ip,如果出现404,说明就能够正常访问了。现在我们去laradock/nginx/sites/目录下,修改或者添加后缀为conf文件。

修改default.conf文件,把网站www目录修改到项目目录即可。这儿需要注意一点的是:最开始提到的.env文件 APPLICATION参数所配置的映射目录,就是宿主机与容器的目录映射关系。

总结:

在QQ群里有时会看见有些网友会问关于如何使用laradock搭建环境的问题,随根据自己最近在工作中有使用laradock搭建环境得出的一些经验和踩过的一些坑,写成文章分享给大家。 由于我不太会写文章,可能会存在语句不通顺的情况,还请大家见谅,我会努力提高写作水平,让大家阅读起来能舒服一点。嘿嘿,受Summer的影响,我会坚持以后每周写一篇文章。

Laravel 三种中间件作用讲解

昨天在开发过程中,需要使用到中间件的技术,之前都只是简单的认为要增加中间件就往middleware里添加中间件即可。本着周末的时间,就仔细研究了下 $middleware $middlewareGroup $routeMiddleware三个属性,到底是怎么样用的,通过查阅文档和网上资料,可算是搞明白了这三个属性是怎么用的和该怎么用。

$middleware属性:

这个属性称为全局中间件,为什么说是全局中间件呢?因为你的每一次请求,这里面的每个中间件都会执行。

$routeMiddleware属性:

这个属性称为路由中间件,为什么说是路由中间件呢?因为定义在该属性内的中间件,只能在定义路由时候引用。
假设这是我们定义的路由中间件:

protected $routeMiddleware = [
    ...
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
];

如果我们要使用IlluminateAuthMiddlewareAuthenticate::class这个中间件该怎么做呢?
Route::get('hello/laravel-china','XXController@index')->middleware('auth');
我们定义路由时候调用了middleware方法,参数值是auth, 这样访问这个路由的时候,就会执行该中间件。明白了吧!很简单的。

$middlewareGroups属性:

这个属性称为中间件组,为什么说是中间件组呢?我们之前说了路由中间件,是不是感觉这样添加路由中间件很麻烦,比如我们执行10个中间件,是不是就要在定义路由时候添加10个呢?有了中间件组就不用这么麻烦了。我们来看下中间件组是怎么定义的。

protected $middlewareGroups = [
 'web' => [
     \App\Http\Middleware\EncryptCookies::class,
     ...
 ],
 'api' => [
     ...
 ],
];

好了,上面的例子就是定义中间件组的格式,比如我们看 web这个键值,它对应为一个数组,该数组有多个中间件组成。当我们定义好后,该怎么使用呢?
我们在声明路由的时候,这样调用就可以了。

Route::group(['middleware' => 'web'],function($route){
    $route->get('hello/world',function(){});
    $route->get('hello/php',function(){});
    // 这样在访问这个这些路由的时候,就会执行中间件组 web 所对应的中间件,方便多了,批量式的。
});

总结:

**$middleware:全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些)
$middlewareGroups:中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。
$routeMiddleware:路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。**

已经掌握中间件的大神就请不要见笑,本着写一次也是想让自己熟悉laravel的中间件和一些初学laravel朋友的一点点帮助,谢谢!

Nginx 负载均衡实战

有时候,为了提高程序负载、增加服务器处理能力,就需要负载均衡技术。该技术主要是把用户请求分发到不同的服务器上去处理,这样做有效的解决单台服务器处理慢,和单机故障问题,真是一举多得的办法。

nginx 实现负载均衡要依赖一个upstream模块和proxy_pass反向代理指令,这个模块通过一些简单的调度算法来实现请求分发从而达到负载均衡策略。下面看nginx.conf文件怎么

nginx负载均衡模块默认支持4种算法:

  1. 轮询:这是upstream模块默认支持的算法,该算法有几个附加属性 ① weight轮询权值 ② backup 备份服务器。
  2. ip_hash:这是按请求ip使用hash结果进行分配,如果采用这种算法有效解决了session问题。
  3. fair:这个是最智能的算法。因为该算法是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。
  4. url_hash:这个算法和ip_hash类似,不同的是hash请求地址url的结果来分配请求。

使用轮询算法

upstream test{
    server 127.0.0.1:91 weight=1;  #weight 权值。值越大分配到的访问几率越高
    server 127.0.0.1:92 weight=2;
    server 127.0.0.1:93 backup;
}
server {
    listen 85 ;
    index index.php  index.html index.htm;
    location / {
        proxy_pass http://test;
    }
}

使用ip_hash算法

upstream test{
    ip_hash;
    server 127.0.0.1:91;
    server 127.0.0.1:92;
    #server 127.0.0.1:93 backup; 使用ip_hash算法时,不能使用backup状态
}
server {
    listen 85 ;
    index index.php  index.html index.htm;
    location / {
        proxy_pass http://test;
    }
}

其余两个算法需要额外的第三方模块支持,所以在这就不做演示啦,不过配置都是一样的。引入指令即可。

Laravel Eloquent 事件详细讲解

这篇文章为大家总结一下 LaravelEloquent模型的事件和具体在什么样的情况下触发事件。

Eloquent事件有:

retrievedcreatingcreatedupdatingupdatedsavingsaveddeletingdaleted

可事件有这么多,那这些事件具体在什么时候才能触发呢?

众多事件触发条件

1.retrieved:当数据库中检索现有模型时会触发该事件。

2.creating:当创建新模型时候,会触发该事件。备注:在创建前调用该方法
3.created:当创建新模型时候,会触发该事件。备注:在创建后调用该方法
4.updating:当模型已经存在数据库中时,并调用了save方法,则会调用该事件。备注:updating在保存前调用
5.updated:当模型已经存在数据库中时,并调用了save方法,则会调用该事件。备注:updating在保存后调用
6.saving:当更新或者创建模型时,会调用该事件。备注:在更新或者创建之前调用该方法
7.saved:当更新或者创建模型时,会调用该事件。备注:在更新或者创建之后调用该方法
8.deleting:当删除模式时,会调用该方法。备注:在删除之前调用
9.deleted:当删除模式时,会调用该方法。备注:在删除之后调用

谢谢大家!希望您喜欢!^_^

原文地址: 睿懿

自定义 Session 数据保存

当项目访问量大的时候,我们就不能采取php默认session存储方式了(php默认为文件存储),这个时候我们就要自己实现session数据存储。好在php提供了重写session数据的接口给我们。下面就是简单的用mysql存储session数据案例。

<?php
/**
 * @Author: Aaron
 * @Last Modified by:   Aaron
 */