Laravel - Mac下搭建环境_Docker部署

环境搭建

社区Wiki给的环境搭建有四种方法:Laravel 安装和开发环境:Mac 开发环境布置

  • Laravel Homestead —— 官方 Ubuntu 虚拟机
  • Laravel Valet —— 官方的 Mac 集成环境
  • Laradock —— 专为 Laravel 优化的 PHP Docker 虚拟环境方案
  • 其他方案

最后想着顺便学习一波 Docker,所以选择了第三种Laradock,参考的是这一篇文章:在 Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境

安装 Docker

这一个 UP 主发布整理的 Docker 简介比较容易理解。给你讲的 Docker 实操课 #01 Docker 课程介绍

  • Docker 基于 Go 语言开发,是一个基于 LXC 技术之上构建的 Container 容器引擎。
  • 使用场景:
    • Web 应用的自动化打包和发布;
    • 自动化测试和持续集成、发布;
    • 在服务型环境中部署和调整数据库或其他的后台应用;
    • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
安装 Docker,切换国内源

直接使用Homebrew安装Docker

brew cask install docker

也可以直接下载安装包 Docker for Mac Edge

切换国内源:任务栏 Docker 图标 -> Perferences -> Daemon -> Registry mirrors。

在列表中填写加速器地址即可http://hub-mirror.c.163.com。修改完成之后,点击 Apply & Restart 按钮

常用命令:
docker images : 列出本地镜像
docker pull : 从镜像仓库中拉取或者更新指定镜像

docker run :创建一个新的容器并运行一个命令
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
--name="nginx-lb": 为容器指定一个名称
-v:目录映射,格式为:主机目录:容器目录

docker rm :删除一个或多个容器
docker start :启动一个或多少已经被停止的容器
docker stop :停止一个运行中的容器
docker kill :杀掉一个运行中的容器(强制)
docker restart :重启容器
docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。

docker logs : 获取容器的日志
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志

docker exec -i -t  mynginx /bin/bash:在容器mynginx中开启一个交互模式的终端,即通过SSH协议进入容器

docker ps : 列出容器
-a :显示所有的容器,包括未运行的。

docker cp:拷贝主机docker cp /www/runoob 96f7f14e99ab:/www/

安装 Laravel

  1. 克隆项目到本地
    git clone https://github.com/Laradock/laradock.git
  2. 重命名env-example.env

    cd laradock
    cp env-example .env
  3. 运行容器,安装 nginx mysql redis workspace
    docker-compose up -d nginx mysql redis workspace
>Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

第一次运行时间比较漫长,因为需要安装。且某些包需要`Docker`账户验证,需要番强出去注册,然后点击`Docker`图标登录。

顺利跑完进度条后,可能会存在端口被占用的问题,最后会有提示:
ERROR: for nginx  Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (xxxx): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
查询端口对应进程`PID`,`kill`掉所有进程:(`lsof`需要在`sudo`下执行)

lsof -i:80
kill -9 PID
其实你会发现直接通过`kill`是关不了自带的http服务的,根源还是要关闭`apachectl`服务(`macOS`自带`apache`服务)

关闭后,`lsof -i:80`会发现80端口不再占用。再次运行容器

docker-compose up -d nginx mysql redis workspace
# 相关参数可以看上面的常见命令
全部运行
laradock_mysql_1 is up-to-date
laradock_redis_1 is up-to-date
laradock_docker-in-docker_1 is up-to-date
laradock_workspace_1 is up-to-date
laradock_php-fpm_1 is up-to-date
Starting laradock_nginx_1 ... done
  1. 打开 .env添加如下配置:

    DB_HOST=mysql
    REDIS_HOST=redis
    QUEUE_HOST=beanstalkd

创建 Laravel 应用

  1. laradock父级目录创建和它同级的 wwwroot,cd 进去,运行命令创建一个新的laravel应用,会发现出现了一个 blog 的文件夹
    composer create-project laravel/laravel blog --prefer-dist
  2. 编辑配置项 laradock/.env
    APP_CODE_PATH_HOST=../wwwroot/
相当于为 `wwwroot`与Docker的 /var/www 目录建立了软连接,然后在 `laradock/nginx/sites`下增加 `blog.conf`的配置,设置虚拟域名 `blog.test`
server {

    listen 80;
    listen [::]:80;

    server_name blog.test;
    root /var/www/blog/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }
}
  1. /etc/host解析域名,添加 127.0.0.1 blog.test
  2. 重启 Docker 的 Nginx ( 需要到laradock目录下 )
    docker-compose up -d nginx
  3. 浏览器访问应用: http://blog.test

    有可能会抛出文件权限错误无法正常运行,到 wwwroot/blog/下设置两个权限

    chmod -R 777 storage
    chmod -R 777 bootstrap/cache
顺便复习下 chmod 和 chown
- chomod 修改文件和文件夹`读写执行属性`  `chmod 777 hh.c` 
    - 可写 w=4 、可读 r=2 、可执行 x=1 
- chown 修改文件和文件夹的`用户和用户组属性`  `chown -R root:www /tmp/xxx `
- 文件权限字段 `drwxr-xr-x` `用户、组、其他人`
    - 第一段:样例中字母“d”,表示文件所在文件夹
    - 第二段:样例中字符串“rwx”,表示文件全部者对此文件的操作权限
    - 第三段。样例中字符串“r-x”,表示文件全部者所在组对些文件的操作权限
    - 第四段。样例中字符串“r-x”,表示除2、3两种外的不论什么人对此文件的操作权限

刷新浏览器,见到以下界面,证明安装成功!

屏幕快照 2019-09-04 下午 8.48.16.png

至此,Laravel环境搭建、创建一个 Laraval应用的流程完成。

如果要创建多个应用,就是在 wwwroot目录下创建应用,然后在 laradock/nginx/sites创建配置文件,解析域名。

感兴趣的还可以尝试使用 Vagrant(Homestead) 搭建,另外也可以使用MacOS自带的 Valet 传送门

本文链接:https://ariser.cn/index.php/archives/409/
本站文章采用 知识共享署名4.0 国际许可协议进行许可,请在转载时注明出处及本声明!