搭建 Laravel Sail 开发环境 - MacOS

未匹配的标注

说明

本文将一步步带你在 MacOS 搭建 Laravel Sail 开发环境。

请遵循步骤进行操作,如遇问题在文章下方提问。

一、下载和安装软件

1. 下载 Docker Desktop

首先前往 Docker 的官网,下载对应系统版本的 Docker Desktop ,文件比较大,可能需要花费一些时间,你也可以使用迅雷等多线程工具进行下载。

下载完成后,按照指示,将 Docker.app 拖到 Applications 目录即可完成安装:

MacOS 下的 Sail 环境搭建

2. 集成 Laravel Sail

Laravel 8 已经默认集成了 Sail,可以打开 composer.json 文件,查看 require-dev 项里是否存在 laravel/sail,或者查看根目录下的 docker-compose.yml 文件。

二、Docker 镜像下载加速

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。

国内各大云服务商(腾讯云、阿里云、百度云)均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考本页最后一小节。

本节我们以 网易云 镜像服务 https://hub-mirror.c.163.com 为例进行介绍。

首先点击这里进入设置中心:

MacOS 下的 Sail 环境搭建

复制以下内容:

,
  "registry-mirrors": [
    "https://hub-mirror.c.163.com"
  ]

进入 Docker Engine 里,黏贴上面的代码,如下:

搭建 Laravel Sail 开发环境 - MacOS

最后点击 Apply & Restart ,进行重启,一般需要耗费一两分钟。

三、依赖说明

Sail 依赖以下三个东西:

  1. Docker Desktop
  2. docker-compose.yml 文件
  3. 构建容器的 Dockerfile

Docker Desktop 是底层软件,这里不再赘述。

Laravel,所以需要先创建 Laravel 。

docker-compose.yml 自 Laravel 8 起默认自带,存放于根目录下。老版本可通过 sail:publish 初始化此文件。

Dockerfile 用以存放容器的构建命令,在 docker-compose.yml 中设置:

MacOS 下的 Sail 环境搭建

四、配置 Dockerfile

Sail 容器初始化时,会执行一系列操作,如:

  • 更新 Linux 系统
  • 通过 Ubuntu PPA 下载 PHP、MySQL 等

国内因为网络问题,经常会在初始化过程中卡住,定制 Dockerfile 可有效解决此问题。

定制 Dockerfile ,请运行以下命令:

$ php artisan sail:publish

此命令会做两个事情:

  1. 根目录下创建 docker 目录,并将 vendor/laravel/sail/runtimes 目录下的文件及目录复制过来;
  2. 更新 docker-compose.yml 文件,使用 docker 目录中的 Dockerfile,如下图:

MacOS 下的 Sail 环境搭建

五、修改 Dockerfile 文件

Laravel 8 默认用的是 ./docker/8.0 目录下的 Dockerfile,本文将以此来讲解。7.4 或其他版本与此类似。

1. 加速 Linux 更新

新建文件,内容如下:

docker/8.0/sources.list

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

在设置 Timezone 后面,RUN apt-get update 之前,新增 ADD 命令:

docker/8.0/Dockerfile

.
.
.
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD sources.list /etc/apt/

RUN apt-get update \
.
.
.

2. Ubuntu PPA 加速

在 docker/8.0/Dockerfile 文件中,搜索并将:

http://ppa.launchpad.net

替换为:

https://launchpad.proxy.ustclug.org

这是中国科学技术大学开源软件提供的镜像。

3. 下载 Composer 可执行文件

在 docker/8.0/Dockerfile 文件中,搜索以下这一行:

    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \

替换为:

    && curl -so /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar \
    && chmod a+x /usr/bin/composer \
    && composer --version \

这是从阿里云镜像上下载。

4. Node 二进制文件下载

Node 二进制文件下载是以下这一行代码:

    && curl -sL https://deb.nodesource.com/setup_15.x | bash - \

目前没有好的加速通道,安装时可能会卡住这里,多尝试几次。

六、运行容器

在项目的根目录下,执行以下命令:

$ ./vendor/bin/sail up

第一次运行的时候,会初始化容器,有了上面的我们对 Dockerfile 的定制,应该会比较顺利。如果卡住了,可以到社区 learnku.com/laravel 留意以寻求帮助。

注意 sail up 命令运行成功后,会一直显示软件的实时日志界面:

搭建 Laravel Sail 开发环境 - MacOS

此时你可以 ctrl+c 中断运行,再次运行时,可以使用 -d 参数让 sail up 命令在后台运行:

$ ./vendor/bin/sail up -d

扩展知识:d 为 Deamon 的简写。Daemon 程序,又称为守护进程,通常在系统后台长时间运行。

七、快速上手

1. Sail 命令

Sail 的大部分操作都是通过可执行文件 ./vendor/bin/sail 来执行。

首先需要设置快捷命令:

alias sail='bash vendor/bin/sail'

重启终端,即可直接 sail up 而不是 ./vendor/bin/sail up

$ sail up

是启动容器的命令,对应的关闭容器:

$ sail down

一般我们使用参数 -d 来启动 Sail 容器,让其在后台运行:

$ sail up -d

直接运行命令:

$ sail

可以查看当前正在运行的容器情况:

MacOS 下的 Sail 环境搭建

运行以下命令:

$ sail shell

可进入容器内部,在这里我们可以直接使用 artisan 命令,如:

$ php artisan tinker
$ php artisan migrate

等命令。

2. Docker Desktop

Sail 运行时会占用本地端口,正常情况下,只能有一个 Sail 容器运行。在端口被占用的情况下运行 sail up 命令,会出现:

MacOS 下的 Sail 环境搭建

一般运行 Sail Up 时,都会加 -d 参数,假如我们电脑上有十多个项目,在繁忙的工作中,很容易就忘记了哪个项目正在运行。

如何快速查看当前正在运行 Sail 容器?

首先进入 Docker Desktop 管理界面:

MacOS 下的 Sail 环境搭建

鼠标移动到当前容器,即可看到右边的管理按钮,点击 STOP 按钮即可关闭:

MacOS 下的 Sail 环境搭建

另外需注意,当一个容器不再需要时,闲置着会占用系统磁盘空间,此时可利用上面的删除按钮。

八、附录:连接方式

目前 Sail 集成软件的连接方式,都可以通过修改 .env 文件来实现,以下是各自修改的参数:

MySQL:

DB_HOST=mysql

Redis:

QUEUE_CONNECTION=redis
REDIS_HOST=redis
MEMCACHED_HOST=redis

MailHog:

MAIL_HOST=mailhog

HTTP:

网页:localhost/
MailHog: localhost:8025/

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
Summer
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1
讨论数量: 3
发起讨论 只看当前版本


Alvis1235
sail up之后,是重新创建项目,还是把容器挂载到宿主机?
0 个点赞 | 4 个回复 | 问答 | 课程版本 9.x
jeff_coseibai
sail up报错,试了很多次都无法成功
0 个点赞 | 2 个回复 | 问答 | 课程版本 9.x
manbofish
运行" php artisan sail:publish" 报错,php要求8.1以上版本
0 个点赞 | 1 个回复 | 问答 | 课程版本 8.x