Windows搭建 Laravel Sail 开发环境遇到的坑
最近试着用sail搭建开发环境,教程地址:搭建 Laravel Sail 开发环境 - Windows
因为用到了docker等,由于网络原因,遇到了很多坑,由些可解,有些只能绕开…
前往 Docker 官网下载 Docker Desktop
官网打不开啊,下载也太慢了。用阿里云的镜像吧:developer.aliyun.com/mirror/。包括docker hub的加速也可以用阿里云的(需要阿里云的账号)。
创建测试项目时发现没有 vendor 目录
其实是因为没有把整个项目文件下载全,就是composer的问题。要设置镜像源,但是不是在 wsl 的Ubuntu里,是在新拉取的 laravelsail/php82-composer 中。
首先,修改命令,不要直接 bash 中直接运行了,改成输出成文件,然后进行修改。
# curl -s https://laravel.build/example-app | bash 改为
curl -s https://laravel.build/example-app > install.sh
看一下文件内容:
docker info > /dev/null 2>&1
# Ensure that Docker is running...
if [ $? -ne 0 ]; then
echo "Docker is not running."
exit 1
fi
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php82-composer:latest \
# bash -c "laravel new example-app && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium " 改为composer用阿里云的镜像站
bash -c "composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && laravel new example-app && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "
cd example-app
# Allow build with no additional services..
if [ "mysql redis meilisearch mailpit selenium" == "none" ]; then
./vendor/bin/sail build
else
./vendor/bin/sail pull mysql redis meilisearch mailpit selenium
./vendor/bin/sail build
fi
CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'
echo ""
if sudo -n true 2>/dev/null; then
sudo chown -R $USER: .
echo -e "${BOLD}Get started with:${NC} cd example-app && ./vendor/bin/sail up"
else
echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
echo ""
sudo chown -R $USER: .
echo ""
echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd example-app && ./vendor/bin/sail up"
fi
这个文件主要完成三个功能:拉取 laravelsail/php82-composer 镜像,建了个 laravel 的空项目;docker 拉取了mysql redis meilisearch mailpit selenium四个镜像;用sail build
也就是docker compose build
命令执行项目目录下的 docker-compose.yml 文件。
前两项执行还是顺利,最后一项很麻烦。执行完这一步后,docker中的镜像如下,除了划线那个,那个要接下来自己build的
sail build 时 Ubuntu 秘钥验证的问题
sail build
也就是用docker compose build
命令执行项目目录下的 docker-compose.yml 文件,然后调用./vendor/laravel/sail/runtimes/8.2 创建一个基于Ubuntu的新镜像,再与原来的镜像连接起来,组成开发环境。
这步跟网络非常相关,在有些网络环境下能成功,在有些网络环境下,是如何也无法成功啊!
主要是这个错误:
The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C
搜到的大部分处理方式是apt-key添加,如下:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
但是有时,同样的网络环境中,在 wsl 的 Ubuntu 中能成功,但是在 docker 中 Ubuntu 就是不成功,所以别浪费时间了,打包docker save
构建成功的镜像,然后导入到docker load
到需要的地方就行吧!
两篇非常有用的参考文献:
- 将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程
- 使用构建好的 Docker 镜像来搭建 Laravel Sail 开发环境,解决 Laravel Sail 镜像构建失败的问题
总结
- laravel的文档说:
Laravel Sail 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 为使用 PHP, MySQL, 和 Redis 构建 Laravel 应用提供了一个很好的起点,不需要事先有 Docker 经验。
但是,除非非常好的网络环境,一路顺利。否则,不知道 docker compose 如何使用 docker-compose.yml,不知道 Dockerfile 的编写规则,没法调试和使用。
- 搭个环境真重啊,docker的安装文件和镜像文件都在C盘,还改不了设置。装完感觉得都10多G的空间,镜像有6个,一个还运行时不用。编码时,一开 docker,内存和CPU只奔100%去了。
我是直接修改
docker-compose.yml
文件把除mysql、redis外的都删除,因为用不到,所以启动时只会启动3个,节省很多百度搜一下, 可以限制 win 下 linux 子系统的资源占用的。 如果不限制的话, 确实子系统会把所有的富余内存都占了。
说实话,还不如学下docker,summer的这种sail方式,对网络不好的同学,简直是浪费时间。
好好学docker,docker并不难,自己整个laravel环境的docker-compose,爽得很。