2

前言

我同事告诉我他的windows电脑装不上homestead,我已经有了在windwos下面折腾vagrant+virtual box+homestead的惨痛经验,然后偶然打开百度搜索了一下Laravel docker,嗯,不错,找到了Laradock。搞起来,怕啥!

我的惨痛经验

Vagrant+Virtual box+HomesteadLaravel项目开发中大多数人的标配,或者说是Web开发本地环境的标配(还在使用XAMPP, Phpstudy等等,诸如此类的开发环境的人,请认真看:-D)。
但是如果是在Linux下使用的话,问题不是很大,体验还是很完美的,也就搞定文件挂载,搞定公网私网IP,忍受漫长的启动过程。
但是在Windows下面,简直不要太难受,具体怎么难受,我大概是忘记了,但是依稀还记得,怎么装也装不上,怎么启动也报错,肯定是有的。再或者需要安装个其他的软件,比如,ElasticSearch 还需要手动安装。
被这些事情搞到放弃的人,我也相信是有的。废话少说,下面我们来看看如何使用Laradock。

为什么要用?

这个问题问得好,首先,你不觉得这年头不懂Docker就像乡下来的?其次,自己百度一下什么是Docker,Docker都有哪些优点。总之,不用Laradock那就是和自己过不去。

Laradock

基本情况

图片描述

安装

  • 自行解决Docker安装,此处给个文档:Install
  • Linux:

    1. git clone https://github.com/Laradock/laradock.git
    2. cd laradock
    3. cp env-example .env
    4. docker-compose up -d nginx mysql phpmyadmin redis workspace
    5. 到这先停一停
  • Windows:

    • 和Linux差不多

注:Windows用户可能会遇到一个执行startup.sh这个文件失败的问题,导致nginx容器启动不了,不要怕,我已经遇到过了。Github Issue
解决办法如下:

vim nginx/Dockerfile
# 把下面这两行注释掉
ADD ./startup.sh /opt/startup.sh
CMD ["/bin/bash", "/opt/startup.sh"]
# 改成
CMD ["nginx"]
# 暂时关闭 `Nginx SSl` 功能

使用

官网介绍了三种使用方式,我们呢只考虑最后一种,多个项目共用一个Laradock,但是,我会把整个安装遇到的问题都给你说明白。
假设:我们有一台刚刚装好系统,Docker,Git的电脑。

创建项目

为什么把创建项目放到第一个来说,是因为可以避免研究时,无项目可用。

  1. cd laradock
  2. docker-compose exec --user=laradock workspace bash (为什么要加--user = laradock,是因为权限问题)
  3. composer create-project --prefer-dist laravel/laravel blog 文档:安装Laravel,推荐使用 composer安装
    注:composer config -g repo.packagist composer https://packagist.phpcomposer.com Composer 中国镜像
  4. 内容比较多,看下面的shell

    # 此时在workspace bash中
    cd blog
    vim .env
    # 修改Mysql && Redis链接
    DB_HOST=mysql
    REDIS_HOST=redis
    # 修改数据库和用户名:因为我们如果看一下 laradock/.env 文件,我们就会知道默认如下所示:
    MYSQL_VERSION=latest
    MYSQL_DATABASE=default
    MYSQL_USER=default
    MYSQL_PASSWORD=secret
    MYSQL_PORT=3306
    # 至于如何修改成Homestead:Homestead,或者说,改了没效果(我不会告诉你,我改了N多次也没用)等等这些问题,我们单独讨论

运行项目

  1. Nginx 配置

    # 重新开一个终端,也可以先退出workspace bash
    cd nginx/sites/
    cp laravel.conf.example xxx.conf
    vim blog.conf
    # 修改Server name && root && Log Path :这个你自己应该能搞定
    server_name blog.com;
    root /var/www/blog/public;
    
    ...
    
    error_log /var/log/nginx/blog_error.log;
    access_log /var/log/nginx/blog_access.log;
    # 注意root只修改/var/www/blog/public
  2. 让你的Nginx容器加载你的配置

    # 在Laradock目录下
    docker-compose exec nginx nginx -t
    docker-compose exec nginx nginx -s reload
  3. 绑定Host

    sudo vim etc/hosts
    # ADD 
    127.0.0.1  blog.com
  4. 打开浏览器,访问 blog.com
    clipboard.png
  5. 测试数据库链接,

    • 进入 docker-compose exec --user=laradock workspace bash
    • cd blog
    • php artisan make:auth
    • php artisan migrate
      报错了,GitHub Issue,解决办法如下:GitHub Issue

      cd laradock
      # 打开mysql/my.cnf
      vim mysql/my.cnf
      # 增加如下内容:
      # default_authentication_plugin=mysql_native_password
      # 执行如下命令
      docker-compose down
      # 删除 laradock/.env 文件中 `DATA_PATH_HOST` 变量指定的目录下的文件(不删除,如何build都不起作用)
      sudo rm -rf ~/.laradock/data
      docker-compose up -d nginx mysql phpmyadmin redis workspace 
      docker-compose exec --user=laradock workspace bash
      cd xxxx
      php artisan migrate

      clipboard.png

  6. 测试 Redis 链接 Laravel Redis

    • composer require predis/predis
    • 在Home控制器添加Redis set方法

      # use Illuminate\Support\Facades\Redis;
      public function index()
      {
          Redis::set('test', 'test');
          return view('home');
      }
    • 完成注册,查看Redis 记录

      clipboard.png

OK,至此,我们就已经搞定运行项目了。

Laradock Mysql的一些事

  1. 如何修改默认用户名,默认数据库

    cd laradock
    vim .env
    # 修改 `MYSQL_DATABASE` && `MYSQL_USER` 如 图 1
    # 删除 laradock/.env 文件中 `DATA_PATH_HOST` 变量指定的目录下的文件
    docker-compose down
    sudo rm -rf ~/.laradock/data
    docker-compose up -d nginx mysql phpmyadmin redis workspace

    图一

  2. 如何创建数据库

    # 手动 (一般是这种方式)
    cd laradock/mysql/docker-entrypoint-initdb.d
    cp createdb.sql.example createdb.sql
    vim createdb.sql
    # 删除注释
    CREATE DATABASE IF NOT EXISTS `blog` COLLATE 'utf8_general_ci' ;
    GRANT ALL ON `blog`.* TO 'homestead'@'%' ;
    
    FLUSH PRIVILEGES ;
    cd laradock
    docker-compose exec mysql bash
    mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql
    
    # 自动是有条件的,条件如下:
    # this sql script will auto run when the mysql container starts and the $DATA_PATH_HOST/mysql not found. (试过了,不删除`DATA_PATH_HOST`是不会执行滴)

可能会遇到的问题

  • Ubuntu elasticsearch max virtual memory areas vm.max_map_count [65530] is too low, increase to at le

    # 切换到root用户修改配置sysctl.conf
    vi /etc/sysctl.conf 
    # 添加下面配置:
    vm.max_map_count=655360
    # 执行命令
    sysctl -p
    重新启动elasticsearch

至此,就差不多了,遇到问题,欢迎留言!


amorZhu
232 声望14 粉丝

安安静静写代码。