hesle

hesle 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

hesle 提出了问题 · 8月13日

解决mysql 如何获取表的按比例获取数据 (比如获取30%记录)

想达到的目的是通过计算好的比例 比如10.49%、30%、0.23%这种比例
从数据库查询 此比例的数据记录

关注 3 回答 2

hesle 提出了问题 · 6月9日

关于 Laravel Excel 多个数据左右排版问题

WX20200609-163259@2x.png

laravel-excel 3.1 版本
【需求】实现如图一样的效果 两个不同的数据在同一排 左右排列。
【探索几天的发现】用 laravel view 把 blade 转 excel 文件 存在的问题就是导出的时 数据样式会发生改变

经过几天的探索始终未找到合适的解决方案,希望指教。

关注 2 回答 0

hesle 提出了问题 · 6月3日

解决哪位大shen如何高效的处理此数组~谢谢

原数据结果:
需求是如果route_name 相同把vid,id合并 并压入到新数组里

$data=[
    
        [
            'village_id' => 6200,
            'agency_id' => 9,
            'route_id' => 1,
            'route_name' => 'test'
        ],
        [
            'village_id' => 4407,
            'agency_id' => 1589,
            'route_id' => 1,
            'route_name' => 'test',
        ],

        [
            'village_id' => 6199
            'agency_id' => 2739
            'route_id' => null 
            'route_name' => null
        ]

];

理想结果:

$data=[
    
        [
            'village_id' => [6200,4407],
            'agency_id' => [9,1589],
            'route_id' => 1,
            'route_name' => 'test'
        ],
        [
            'village_id' => 6199
            'agency_id' => 2739
            'route_id' => null 
            'route_name' => null
        ]

];

关注 5 回答 3

hesle 收藏了问题 · 6月3日

php将两个数组相同的key合并到一个数组

$arr = array(
    array(
    'id' => 1,
    'user_name'=>'test1'
    ),
    array(
    'id' => 2,
    'user_name'=>'test2'
    ),
    array(
    'id' => 3,
    'user_name'=>'test3'
    )
);
$arr2 = array(
     array(
    'id' => 1,
    'shop_name'=>'shop1'
    ),
    array(
    'id' => 5,
    'shop_name'=>'shop2'
    ),
    array(
    'id' => 3,
    'shop_name'=>'shop3'
    )
);
怎么根据2个数组id相同的一维数组,将$arr2的shop_name添加到$arr,如果没有相同的id,shop_name为空,形成如下数组:
$good_arr =array(
    array(
    'id' => 1,
    'user_name'=>'test1',
    'shop_name'=>'shop1'
    ),
    array(
    'id' => 2,
    'user_name'=>'test2',
    'shop_name'=>''
    ),
    array(
    'id' => 3,
    'user_name'=>'test3',
    'shop_name'=>'shop3'
    )

);

我的方案:有更好的吗?O(∩_∩)O谢谢

    /*foreach($arr as $key => &$value) {
        $value['shop_name']='';
    }
        unset( $value );
        */
    foreach($arr as $k2 =>&$v2) {
            $v2['shop_name']='';
        foreach($arr2 as $k =>$v) {
            if($v2['id'] == $v['id']) {
            $v2['shop_name'] = $v['shop_name'];
            }
        }
    }
    print_r($arr);

hesle 收藏了文章 · 4月28日

nginx实现一个域名配置多个laravel项目

背景

随着公司的子项目越来越多,会有大大小小十几个工程(仅后端),按照原先的做法,每上线一个项目,那么必须要有一个二级域名映射到对应的工程上,十个工程那么就意味着需要有十个二级域名(还不包含测试环境,次生产环境等),如此多的域名不仅仅是难于管理,更重要的是比较浪费资源,这个问题困扰了我很久,今天终于解决了这个问题,特此记录一下采坑日记,本文不会讲nginx中各个指令的原理,而是用实际的项目配置来练习nginx指令的用法并举一反三。

事先准备

域名

假设域名为:http://www.dev.com

实验环境

阿里云ECS + centos + Nginx + php-fpm

项目1

1.工程路径: /data/wwwroot/project1/
2.访问路径:http://www.dev.com/project1/

项目2

1.工程路径: /data/wwwroot/project2/
2.访问路径:http://www.dev.com/project2/

项目3

1.工程路径: /data/wwwroot/project3/
2.访问路径:http://www.dev.com/project3/

涉及的知识点

  1. Nginx的location指令,用法可以参考:https://www.cnblogs.com/coder...
  2. Nginx的alias指令,用法可以参考:https://www.jianshu.com/p/4be...

实现步骤

为了实现以上的访问形式,我们需要用到nginx里面的location指令和alias指令,配置如下

location ^~ /${PROJECT}/ {
    alias  {$PATH};
    try_files $uri $uri/ @${PROJECT};

    location ~ \.php$ {
            fastcgi_pass unix:/dev/shm/php-cgi.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
    }
}

location @${PROJECT}{
    rewrite /${PROJECT}/(.*)$ /${PROJECT}/index.php?/$1 last;
}

说明: 上面的这个配置中的${PROJECT}和{$PATH}都是属于在实际过程中需要替换的部分,其中${PROJECT}为url需要访问的path部分,如project1,{$PATH}则代表的是项目的真实访问路径,如/data/wwwroot/project1,以http://www.dev.com/project1 访问为例,那么对应的Nginx的配置是这样子的

location ^~ /project1/ {
    alias  /data/wwwroot/project1/public;
    try_files $uri $uri/ @project1;

    location ~ \.php$ {
            fastcgi_pass unix:/dev/shm/php-cgi.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
    }
}

location @project1{
    rewrite /project1/(.*)$ /project1/index.php?/$1 last;
}

对于project2和project3的配置只需要按照上面的配置模板依葫芦画瓢就可以了,最后完整nginx配置如下

server {
    listen 80;
    server_name www.dev.com;
    access_log /data/wwwlogs/nginx/access_log/www.dev.com_nginx.log combined;
    error_log /data/wwwlogs/nginx/error_log/www.dev.com_errr_log;
    index index.html index.htm index.php;

    # project1开始的配置
    location ^~ /project1/ {
        alias  /data/wwwroot/project1/public;
        try_files $uri $uri/ @project1;
        location ~ \.php$ {
                fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
        }
    }
    
    location @project1{
        rewrite /project1/(.*)$ /project1/index.php?/$1 last;
    }
    
    # project2开始的配置
    location ^~ /project2/ {
        alias  /data/wwwroot/project2/public;
        try_files $uri $uri/ @project2;
    
        location ~ \.php$ {
                fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
        }
    }
    
    location @project2{
        rewrite /project2/(.*)$ /project2/index.php?/$1 last;
    }
    
    # project2开始的配置
    location ^~ /project3/ {
        alias  /data/wwwroot/project3/public;
        try_files $uri $uri/ @project3;
    
        location ~ \.php$ {
                fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
        }
    }
    
    location @project3{
        rewrite /project3/(.*)$ /project3/index.php?/$1 last;
    }
    
    
    # 解析所有的.php
    location ~ \.php$ {
        fastcgi_pass unix:/dev/shm/php-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fastcgi_param SCRIPT_FILENAME $request_filename;
        include fastcgi_params;
    }
   
    #图片、视频的的链接,此处是做缓存 ,缓存30天,不写入访问日志
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
        expires 30d;
        access_log off;
    }
       
       #js css文件的配置,此处是做缓存 ,缓存7天,不写入访问日志
    location ~ .*\.(js|css)?$ {
        expires 7d;
        access_log off;
    }

    location ~ /\.ht {
        deny all;
    }
}

参考地址

怎么在 localhost 下访问多个 Laravel 项目

查看原文

hesle 收藏了文章 · 2019-11-13

打造你的Laravel即时应用(二)-消息推送与监听

打造你的Laravel即时应用(二)-消息推送与监听

2019年08月04日20:16:21 XXM

接于上篇博客: 打造你的Laravel即时应用(一)-项目初始化构建

在上一篇博客中,介绍了项目的基本构建,现在进入实战操作.

(一、消息推送)

1.创建事件类

Laravel的广播推送通过Event来实现,下面通过artisan命令来创建一个事件类

php artisan make:event TestEvent

为了配合我们的广播系统使用需要实现==IlluminateContractsBroadcastingShouldBroadcast==接口,就像这样

class TestEvent implements ShouldBroadcast

2.指定推送频道

更改==broadcastOn==返回的Channel对象

public function broadcastOn()
{
        return new Channel('notice');
}

3.监听消息

需要安装laravel-echo及 socket. io client这两个包

npm install --save socket.io-client 
npm install --save laravel-echo

安装完成后,打开==resources/assets/js/bootstrap.js==文件,添加包含基本Echo对象构建的代码

import Echo from 'laravel-echo'

window.io = require('socket.io-client');
window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
}); 

构建完成后,在我们的js代码中开始监听频道事件.

PS:更改后记得运行==npm run prod || npm run dev==

window.Echo.channel('test-event')
    .listen('ExampleEvent', (e) => {
        console.log(e);
    });

4.测试应用结果

我们通过添加一条路由来测试

Route::get('/notice',function(){
    $event = event(new \App\Events\TestEvent('测试通知'));
});

页面监听效果如下:
image

以上就完成了基本的消息推送和监听,当然还有更多的技巧没有展示到位,有兴趣的同学可以查询文档: https://laravel.com/docs/5.6/... 来获得更多的知识和技巧.

==TestEvent.php== 完整代码如下:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class TestEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('notice');
    }
}
查看原文

hesle 赞了文章 · 2019-10-18

laravel-admin利用ModelTree实现对分类信息的管理

根据laravel的基本操作步骤依次完成如下操作:
主要是参考laravel-admin内置的Menu菜单管理的功能,利用ModelTree实现业务中的Tree数据管理。

1. 创建模型
    php artisan make:model Models/Category
2. 创建迁移文件
    php artisan make:migration create_categories_table
3. 创建填充文件
    php artisan make:seeder CategoriesSeeder
4. 创建后端控制器
    php artisan admin:make CategoryController --model=App\Models\Category
5. 创建后端路由
    app/admin/routes.php : $router->resource('/web/categories',CategoryController::class);
6. 添加后端菜单
    /web/categories:菜单路径
7. 其他定义及编辑定制

定义Model文件Category.php

namespace App\Models;

use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use ModelTree, AdminBuilder;
    //
    protected $fillable = ['name','description','order','parent_id'];

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->setParentColumn('parent_id');
        $this->setOrderColumn('order');
        $this->setTitleColumn('name');
    }
}

定义迁移

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('description')->nullable();
            $table->integer('order')->unsigned();
            $table->integer('parent_id')->unsigned()->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

填充文件

class CategoriesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        DB::table('categories')->delete();
        for($i = 0; $i < 3; $i++ ){
            DB::table('categories')->insert(
                [
                    'name' => 'CAT'.$i,
                    'description' => 'desc_'.$i,
                    'order' => $i,
                    'parent_id' => null
                ]
            );
        }

    }
}

定义控制器

<?php

namespace App\Admin\Controllers;

use App\Models\Category;

use Encore\Admin\Form;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;
use Encore\Admin\Layout\Row;
use Encore\Admin\Tree;
use Encore\Admin\Widgets\Box;
use Illuminate\Support\Facades\DB;

class CategoryController extends Controller
{
    use ModelForm;

    protected $header = '类型管理';

    /**
     * Index interface.
     *
     * @return Content
     */
    public function index()
    {
        return Admin::content(function (Content $content) {

            $content->header($this->header);
            $content->description('类型列表');

            $content->row(function (Row $row) {

                $row->column(6, $this->treeView()->render());

                $row->column(6, function (Column $column) {
                    $form = new \Encore\Admin\Widgets\Form();
                    $form->action(admin_base_path('/web/categories'));


                    $form->text('name','类型名称');
                    $form->textarea('description','类型描述信息');
                    $form->number('order','排序序号');
                    $form->select('parent_id','父类名称')->options(Category::selectOptions());
                    
                    $form->hidden('_token')->default(csrf_token());

                    $column->append((new Box(trans('admin.new'), $form))->style('success'));
                });
            });



        });
    }


    protected function treeView()
    {
        return Category::tree(function (Tree $tree) {
            $tree->disableCreate();
            return $tree;
        });
    }
    

    /**
     * Edit interface.
     *
     * @param $id
     * @return Content
     */
    public function edit($id)
    {
        return Admin::content(function (Content $content) use ($id) {

            $content->header($this->header);
            $content->description('编辑类型');

            $content->body($this->form()->edit($id));
        });
    }

    /**
     * Create interface.
     *
     * @return Content
     */
    public function create()
    {
        return Admin::content(function (Content $content) {

            $content->header($this->header);
            $content->description('添加类型');

            $content->body($this->form());
        });
    }


    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Admin::form(Category::class, function (Form $form) {

            $form->display('id', 'ID');

            $form->text('name','类型名称');
            $form->textarea('description','类型描述信息');
            $form->number('order','排序序号');
            $form->select('parent_id','父类名称')->options(Category::selectOptions());


        });
    }


    public function getCategoryOptions()
    {
        return DB::table('categories')->select('id','name as text')->get();
    }
}

添加路由

$router->resource('/web/categories',CategoryController::class);

添加后台菜单

具体操作略
图片描述

查看原文

赞 9 收藏 7 评论 0

hesle 收藏了文章 · 2019-10-18

laravel-admin利用ModelTree实现对分类信息的管理

根据laravel的基本操作步骤依次完成如下操作:
主要是参考laravel-admin内置的Menu菜单管理的功能,利用ModelTree实现业务中的Tree数据管理。

1. 创建模型
    php artisan make:model Models/Category
2. 创建迁移文件
    php artisan make:migration create_categories_table
3. 创建填充文件
    php artisan make:seeder CategoriesSeeder
4. 创建后端控制器
    php artisan admin:make CategoryController --model=App\Models\Category
5. 创建后端路由
    app/admin/routes.php : $router->resource('/web/categories',CategoryController::class);
6. 添加后端菜单
    /web/categories:菜单路径
7. 其他定义及编辑定制

定义Model文件Category.php

namespace App\Models;

use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use ModelTree, AdminBuilder;
    //
    protected $fillable = ['name','description','order','parent_id'];

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->setParentColumn('parent_id');
        $this->setOrderColumn('order');
        $this->setTitleColumn('name');
    }
}

定义迁移

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('description')->nullable();
            $table->integer('order')->unsigned();
            $table->integer('parent_id')->unsigned()->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

填充文件

class CategoriesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        DB::table('categories')->delete();
        for($i = 0; $i < 3; $i++ ){
            DB::table('categories')->insert(
                [
                    'name' => 'CAT'.$i,
                    'description' => 'desc_'.$i,
                    'order' => $i,
                    'parent_id' => null
                ]
            );
        }

    }
}

定义控制器

<?php

namespace App\Admin\Controllers;

use App\Models\Category;

use Encore\Admin\Form;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;
use Encore\Admin\Layout\Row;
use Encore\Admin\Tree;
use Encore\Admin\Widgets\Box;
use Illuminate\Support\Facades\DB;

class CategoryController extends Controller
{
    use ModelForm;

    protected $header = '类型管理';

    /**
     * Index interface.
     *
     * @return Content
     */
    public function index()
    {
        return Admin::content(function (Content $content) {

            $content->header($this->header);
            $content->description('类型列表');

            $content->row(function (Row $row) {

                $row->column(6, $this->treeView()->render());

                $row->column(6, function (Column $column) {
                    $form = new \Encore\Admin\Widgets\Form();
                    $form->action(admin_base_path('/web/categories'));


                    $form->text('name','类型名称');
                    $form->textarea('description','类型描述信息');
                    $form->number('order','排序序号');
                    $form->select('parent_id','父类名称')->options(Category::selectOptions());
                    
                    $form->hidden('_token')->default(csrf_token());

                    $column->append((new Box(trans('admin.new'), $form))->style('success'));
                });
            });



        });
    }


    protected function treeView()
    {
        return Category::tree(function (Tree $tree) {
            $tree->disableCreate();
            return $tree;
        });
    }
    

    /**
     * Edit interface.
     *
     * @param $id
     * @return Content
     */
    public function edit($id)
    {
        return Admin::content(function (Content $content) use ($id) {

            $content->header($this->header);
            $content->description('编辑类型');

            $content->body($this->form()->edit($id));
        });
    }

    /**
     * Create interface.
     *
     * @return Content
     */
    public function create()
    {
        return Admin::content(function (Content $content) {

            $content->header($this->header);
            $content->description('添加类型');

            $content->body($this->form());
        });
    }


    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Admin::form(Category::class, function (Form $form) {

            $form->display('id', 'ID');

            $form->text('name','类型名称');
            $form->textarea('description','类型描述信息');
            $form->number('order','排序序号');
            $form->select('parent_id','父类名称')->options(Category::selectOptions());


        });
    }


    public function getCategoryOptions()
    {
        return DB::table('categories')->select('id','name as text')->get();
    }
}

添加路由

$router->resource('/web/categories',CategoryController::class);

添加后台菜单

具体操作略
图片描述

查看原文

hesle 赞了文章 · 2019-07-12

初探laradock

前提:

docker version

Client:
 Version:      17.06.1-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   874a737
 Built:        Thu Aug 17 22:48:20 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.1-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   874a737
 Built:        Thu Aug 17 22:54:55 2017
 OS/Arch:      linux/amd64
 Experimental: true

laradoc

这里记录一下个人所选择的安装流程及遇到的和简单使用

具体可参考:

英文

中文:v5.0.0

安装流程:

依赖:

安装:

  • 克隆 Laradock 仓库:将laradock.git克隆到跟你的项目平级的目录下

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

图片描述

  • 编辑laradock目录下的.env 文件(如果没有.env,请复制.env.example)

cp .env.example .env
  • 修改.env文件(这个很重要,基本上nginx跟mysql及php的配置都在里面可以配置)
    由于,我需要配置多项目,所以,做如下修改:

APPLICATION_1=../  这一行代表nginx的www目录的位置,../:指的是laradock仓库的上一级目录

使用:

运行nginx跟mysql的服务

docker-compose up -d nginx mysql

maybe可以打开浏览器访问localhost,如果不行请往下看。

自定义虚拟域名

  • 进入laradock/nginx/sites

  • 复制一份sample.conf.example重命名为your like.conf

  • 修改

    server_name your like;
    root /var/www/your like;
  • 重启nginx服务
    docker-compose restart nginx

配置laraval项目连接数据库

打开laravel项目的.env文件,修改DB_HOST=XXXDB_HOST=mysql

常用的docker-compose命令

docker-compose up -d nginx:Create and start containers

docker-compose down :Stop and remove containers, networks, images, and volumes

docker-compose images: List images

docker-compose exec: Execute a command in a running container

some坑:

以下的.env文件使用的是laradock:v5.5.5

  • clone下的laradock后,必须copy .env.example并重命名为 .env

  • 有可能laradock有些版本使用起来有bug。比如,个人使用过的v5.5.5,mysql启动不了

    • 解决方案(方案一)

      ~~1. 切换版本,进入laradock。使用`git tag`列出所有的tag~~
      ~~2. 使用`git checkout v5.0.0`,切换版本~~
      ~~3. 查看当前分支版本:`git branch`~~
    • 方案(二)

      **直接将docker ce版的stable版改为edge版**
  • mysql,php,nginx的配置信息都在laradock/.env文件里

    • 切换php版本,可以改PHP_VERSION=70。

    • 新增php扩展,可以改PHP_FPM_INSTALL_BCMATH=true(开启bc函数扩展)

  • docker-compose命令得进入laradock目录才能执行

查看原文

赞 3 收藏 2 评论 16

hesle 赞了文章 · 2019-07-12

初探laradock

前提:

docker version

Client:
 Version:      17.06.1-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   874a737
 Built:        Thu Aug 17 22:48:20 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.1-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   874a737
 Built:        Thu Aug 17 22:54:55 2017
 OS/Arch:      linux/amd64
 Experimental: true

laradoc

这里记录一下个人所选择的安装流程及遇到的和简单使用

具体可参考:

英文

中文:v5.0.0

安装流程:

依赖:

安装:

  • 克隆 Laradock 仓库:将laradock.git克隆到跟你的项目平级的目录下

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

图片描述

  • 编辑laradock目录下的.env 文件(如果没有.env,请复制.env.example)

cp .env.example .env
  • 修改.env文件(这个很重要,基本上nginx跟mysql及php的配置都在里面可以配置)
    由于,我需要配置多项目,所以,做如下修改:

APPLICATION_1=../  这一行代表nginx的www目录的位置,../:指的是laradock仓库的上一级目录

使用:

运行nginx跟mysql的服务

docker-compose up -d nginx mysql

maybe可以打开浏览器访问localhost,如果不行请往下看。

自定义虚拟域名

  • 进入laradock/nginx/sites

  • 复制一份sample.conf.example重命名为your like.conf

  • 修改

    server_name your like;
    root /var/www/your like;
  • 重启nginx服务
    docker-compose restart nginx

配置laraval项目连接数据库

打开laravel项目的.env文件,修改DB_HOST=XXXDB_HOST=mysql

常用的docker-compose命令

docker-compose up -d nginx:Create and start containers

docker-compose down :Stop and remove containers, networks, images, and volumes

docker-compose images: List images

docker-compose exec: Execute a command in a running container

some坑:

以下的.env文件使用的是laradock:v5.5.5

  • clone下的laradock后,必须copy .env.example并重命名为 .env

  • 有可能laradock有些版本使用起来有bug。比如,个人使用过的v5.5.5,mysql启动不了

    • 解决方案(方案一)

      ~~1. 切换版本,进入laradock。使用`git tag`列出所有的tag~~
      ~~2. 使用`git checkout v5.0.0`,切换版本~~
      ~~3. 查看当前分支版本:`git branch`~~
    • 方案(二)

      **直接将docker ce版的stable版改为edge版**
  • mysql,php,nginx的配置信息都在laradock/.env文件里

    • 切换php版本,可以改PHP_VERSION=70。

    • 新增php扩展,可以改PHP_FPM_INSTALL_BCMATH=true(开启bc函数扩展)

  • docker-compose命令得进入laradock目录才能执行

查看原文

赞 3 收藏 2 评论 16

认证与成就

  • 获得 3 次点赞
  • 获得 8 枚徽章 获得 0 枚金徽章, 获得 2 枚银徽章, 获得 6 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2014-11-15
个人主页被 297 人浏览