搭建 Laravel Sail 开发环境 - MacOS
说明
本文将一步步带你在 MacOS 搭建 Laravel Sail 开发环境。
请遵循步骤进行操作,如遇问题在文章下方提问。
一、下载和安装软件
1. 下载 Docker Desktop
首先前往 Docker 的官网,下载对应系统版本的 Docker Desktop ,文件比较大,可能需要花费一些时间,你也可以使用迅雷等多线程工具进行下载。
下载完成后,按照指示,将 Docker.app 拖到 Applications 目录即可完成安装:
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
为例进行介绍。
首先点击这里进入设置中心:
复制以下内容:
,
"registry-mirrors": [
"https://hub-mirror.c.163.com"
]
进入 Docker Engine 里,黏贴上面的代码,如下:
最后点击 Apply & Restart ,进行重启,一般需要耗费一两分钟。
三、依赖说明
Sail 依赖以下三个东西:
- Docker Desktop
- docker-compose.yml 文件
- 构建容器的 Dockerfile
Docker Desktop 是底层软件,这里不再赘述。
Laravel,所以需要先创建 Laravel 。
docker-compose.yml 自 Laravel 8 起默认自带,存放于根目录下。老版本可通过 sail:publish
初始化此文件。
Dockerfile 用以存放容器的构建命令,在 docker-compose.yml 中设置:
四、配置 Dockerfile
Sail 容器初始化时,会执行一系列操作,如:
- 更新 Linux 系统
- 通过 Ubuntu PPA 下载 PHP、MySQL 等
国内因为网络问题,经常会在初始化过程中卡住,定制 Dockerfile 可有效解决此问题。
定制 Dockerfile ,请运行以下命令:
$ php artisan sail:publish
此命令会做两个事情:
- 根目录下创建
docker
目录,并将 vendor/laravel/sail/runtimes 目录下的文件及目录复制过来; - 更新 docker-compose.yml 文件,使用
docker
目录中的 Dockerfile,如下图:
五、修改 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
命令运行成功后,会一直显示软件的实时日志界面:
此时你可以 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
可以查看当前正在运行的容器情况:
运行以下命令:
$ sail shell
可进入容器内部,在这里我们可以直接使用 artisan 命令,如:
$ php artisan tinker
$ php artisan migrate
等命令。
2. Docker Desktop
Sail 运行时会占用本地端口,正常情况下,只能有一个 Sail 容器运行。在端口被占用的情况下运行 sail up
命令,会出现:
一般运行 Sail Up 时,都会加 -d
参数,假如我们电脑上有十多个项目,在繁忙的工作中,很容易就忘记了哪个项目正在运行。
如何快速查看当前正在运行 Sail 容器?
首先进入 Docker Desktop 管理界面:
鼠标移动到当前容器,即可看到右边的管理按钮,点击 STOP 按钮即可关闭:
另外需注意,当一个容器不再需要时,闲置着会占用系统磁盘空间,此时可利用上面的删除按钮。
八、附录:连接方式
目前 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/