文章目录

  • Laravel Sail 安装
  • Dockerfile 修改
  • PhpStorm 打开项目
  • .env 修改
  • PhpStorm 配置 PHP 解释器
  • 浏览器 XDebug Helper 扩展
  • PhpStorm 配置 Servers
  • Enjoy it~
  • 可能的误区
    • 缓存了路由又在 web.php 打断点
    • PHPStorm 路径映射配置错误
  • 参考资料

如果遇到问题,可以私信问我,将在能力范围内尽量解答。

Laravel Sail 安装

Laravel Sail 是为 Laravel 提供的基于 Docker 的开发环境,可同时搭建包含 PHP、MySQL、Redis,XDebug 在内的开发环境,优势:

  • 降低开发环境的搭建难度
  • 将对主机已有环境的影响降至最低
  • 统一团队开发环境

在 WSL 内使用指令:

curl -s https://laravel.build/<项目名称> | bash

执行后,将在当前目录下建立一个 <项目名称> 的文件夹,并在里面构建一个 Laravel Sail 项目。

成功创建 Laravel 项目后,我们通过 cd 指令进入项目目录

cd <项目名称>

Dockerfile 修改

安装 Laravel Sail 后,不要马上按照提示执行 vendor/bin/sail up,还需要针对国内网络环境对 Dockerfile 进行调整,也就是将其中 Composer 等包管理工具的包来源修改为国内镜像网站。

Laravel Sail 支持用户自定义 Dockerfile 文件,只需使用以下指令发布 Dockerfile 文件即可

php artisan sail:publish

发布后,可在项目根目录的 docker 文件夹中找到对应的 Dockerfile,共有三个版本,具体是哪个版本可打开项目根目录的 docker-compose.yml 查看。

# For more information: https://laravel.com/docs/sail
version: '3'
services:laravel.test:build:# 此处即为执行的 Dockerfile 所在的文件夹context: ./docker/8.1# 此处为 Dockerfile 的文件名dockerfile: Dockerfile# 此处记录 Dockerfile 的参数,${var} 表示 .env 文件中 var 对应的值args:WWWGROUP: '${WWWGROUP}'

找到对应的 Dockerfile 后,将其中的内容替换为:

来源:PRIN BLOG 略有修改

Dockerfile

# FROM  [PRIN BLOG]https://printempw.github.io/laravel-sail-built-with-mirrors/
FROM ubuntu:21.04LABEL maintainer="Taylor Otwell"ARG WWWGROUP# DEBUG ARGUMENT
ARG XDEBUG
ARG XDEBUG_PORTWORKDIR /var/www/htmlENV DEBIAN_FRONTEND noninteractive
ENV TZ=Asia/Shanghai
ENV APT_MIRROR http://mirrors.ustc.edu.cn
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 16.9.1
ENV NVM_NODEJS_ORG_MIRROR https://mirrors.ustc.edu.cn/node
ENV NVM_SOURCE https://hub.fastgit.org/nvm-sh/nvm.gitSHELL ["/bin/bash", "-o", "pipefail", "-c"]RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN echo 'APT::Acquire::Retries "5";' > /etc/apt/apt.conf.d/80-retries \&& sed -i "s|http://archive.ubuntu.com|$APT_MIRROR|g; s|http://security.ubuntu.com|$APT_MIRROR|g" /etc/apt/sources.list \&& sed -i "s|http://ports.ubuntu.com|$APT_MIRROR|g" /etc/apt/sources.list \&& apt-get update \&& apt-get install -y gnupg gosu curl ca-certificates zip unzipRUN apt-get install -y git supervisor sqlite3 libcap2-bin libpng-dev python2RUN mkdir -p ~/.gnupg \&& chmod 600 ~/.gnupg \&& echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \# PHP&& echo "deb https://launchpad.proxy.ustclug.org/ondrej/php/ubuntu hirsute main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \&& apt-get update \&& apt-get install -y php8.0-cli php8.0-dev \php8.0-pgsql php8.0-sqlite3 php8.0-gd \php8.0-curl php8.0-memcached \php8.0-imap php8.0-mysql php8.0-mbstring \php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \php8.0-intl php8.0-readline php8.0-pcov \php8.0-msgpack php8.0-igbinary php8.0-ldap \php8.0-redis php8.0-swoole php8.0-xdebug# Composer
RUN curl -so /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar \&& chmod a+x /usr/bin/composer \&& composer --version \&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \# Node.js&& mkdir -p $NVM_DIR \&& curl -so- https://raw.fastgit.org/nvm-sh/nvm/v0.38.0/install.sh | bash \&& source $NVM_DIR/nvm.sh \&& nvm install $NODE_VERSION \&& nvm use $NODE_VERSION \&& node -v && npm -v \&& npm config set registry https://registry.npm.taobao.org \# Yarn&& npm install --global yarn \&& yarn config set registry https://registry.npm.taobao.org \&& apt-get install -y mysql-client \&& apt-get install -y postgresql-client \&& apt-get -y autoremove \&& apt-get clean \&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATHRUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sailCOPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-containerEXPOSE 8000ENTRYPOINT ["start-container"]

修改后,即可启动容器

vendor/bin/sail up

若容器尚未构建的话,该指令会自动构建容器后启动。也可以使用 -d 参数使其在后台运行。

vendor/bin/sail up -d

若想要关闭在后台运行的容器,可以使用指令

vendor/bin/sail stop

如果在此前你已经构建过容器且希望重新构建一个,可以使用以下命令重新构建:

vendor/bin/sail build --no-cache

成功启动容器后,使用主机访问 localhost 即可看到 Laravel 的初始界面

如果出现 Permission Denied 的情况,请赋予项目目录 777 权限,在项目目录根目录下执行

sudo chmod 777 ./ -R

PhpStorm 打开项目

File >> Open 在子系统的目录中选择我们的项目

打开项目后,可以直接在 Terminal 中运行需要在子系统中运行的指令,从而摆脱来回切换 PhpStorm 和 Windows Terminal 的麻烦。

将项目目录及内其内的文件权限修改为 777,方便使用 PhpStorm 进行编辑。

sudo chmod 777 ./ -R

这样之后就可以关闭独立的 WSL 窗口了,直接在 PhpStorm 的 Terminal 窗口启动即可。

.env 修改

为了能够使用 Xdebug ,我们需要在容器启动之前,在 .env 文件中启用这个功能,加入以下键值即可

SAIL_XDEBUG_MODE=develop,debug

加入后启动容器

vendor/bin/sail up -d

PhpStorm 配置 PHP 解释器

由于通过 Laravel Sail 的开发环境,位于主机的 PhpStorm 并无法直接访问到 PHP 解释器,但是 PhpStorm 支持通过 Docker 配置它

按如图所示操作添加位于 Docker 内的 PHP 解释器,注意 PHP language level 一项也需要手动选择为与 Docker 内一致的版本。

浏览器 XDebug Helper 扩展

访问浏览器的扩展商店搜索 XDebug Helper 并安装

如果使用 Edge 可以直接访问 Xdebug helper - Microsoft Edge Addons

PhpStorm 配置 Servers

在 File >> Setting >> PHP >> Servers 按如图配置

Enjoy it~

打开 PhpStorm 的 XDebug 监听

随机修改 routes/web.php 中的代码,这里使用

Route::get('/', function () {$a = 1;return view('welcome');
});

在 return 语句打上断点

启用 XDebug Helper 的 Debug 模式,并刷新 localhost 页面

此时 PhpStorm 可能弹出 Debug 连接的窗口,连接即可,便可以看到断点的 Debug 信息:

可能的误区

缓存了路由又在 web.php 打断点

使用了 sail php artisan route:cache 后,路由将直接由缓存加载,将无法访问到代码中的断点。

PHPStorm 路径映射配置错误

在配置 PhpStorm 的 Server 时,远程的绝对路径应该是 /var/www/html,这是项目在容器中的路径,而非项目在子系统中的路径。

参考资料

PhpStorm 官方文档

Laravel Sail 官方文档

将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程 | myhui0926 | LearnKu

使用 PhpStorm 来开发和 Debug Laravel Sail 项目相关推荐

  1. 使用 Laravel Sail 和 Laravel Octane 开发高性能 PHP 项目

    文章目录 Laravel Octane 的安装 开放容器端口 安装 Chokidar 修改 Supervisord 指令 容器 reBuild Enjoy it~ 本文原创,转载请注明出处. 我写的其 ...

  2. mac启动本地redis_通过 Laravel Sail 构建基于 Docker 的本地开发环境

    Laravel 官方最近发布了 Laravel Sail -- 一个轻量级的.基于 Docker 的 Laravel 本地集成开发环境,今天学院君就以 Mac 系统为例,给大家演示下如何基于 Lara ...

  3. 优雅的使用 PhpStorm 来开发 Laravel 项目

    [目录] Prerequisites plugin installation and configuration 1 Ensure Composer is initialized 2 Install ...

  4. PhpStorm+PhpStudy开发环境的配置

    PHP是一种脚本语言,用来写动态网页的,适用于Web开发领域.接触PHP的第一步就是搭建一个能够执行PHP程序的开发环境平台,这里选用的是PhpStorm+PhpStudy开发环境的配置,PhpSto ...

  5. Laravel大型项目系列教程(七)之7 扩展包和Artisan开发

    本节教程将讲解扩展包开发和Artisan扩展开发,并浏览不同分辨率下的自适应效果.本节结束后整个教程就结束了,文章最后有完整版程序代码的下载. 1.扩展包开发 在前面开发中,我们经常要用到通知,如修改 ...

  6. docker-sync 加速 Laravel Sail 代码同步

    一.配置文件 docker-sync.yml 文件配置置于根目录下 version: "2" syncs:unison-sync:sync_strategy: 'unison'sr ...

  7. laravel sail的坑

    sail composer update或者sail composer require package导致更新sail本身,而处于容器内的/var/www/html/vendor/laravel/sa ...

  8. laravel sail

    安装 在 Linux 使用 Laravel Sail docker 安装 1 卸载旧版本 sudo yum remove docker \docker-client \docker-client-la ...

  9. Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接

    Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接: 推荐给你高品质的实战课程 https://laravel-china.org/courses?rf=15818 ...

最新文章

  1. An Error Correction and DeNovo Assembly Approach for Nanopore Reads Using Short Reads
  2. Java日志框架-Logback手册中文版以及官方配置文档教程
  3. 原生、无依赖的web弹层组件——HLayer.js
  4. springAOP的设计和实现(一)
  5. java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
  6. codetyphon, Lazarus+FreePascal+Tools+Free Components packages+Free Libraries
  7. Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
  8. NVIDIA显示下载Java_大佬们!我的NVIDIA Geforce Experience 一直下载更新怎么办?
  9. r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库
  10. ES6的Reflect对象
  11. 机器学习实战——Logistic回归
  12. Hive 建表语句详解
  13. Android热修复Sophix
  14. 如何用ChemDraw实现3D建模
  15. Android P 网络请求相关总结
  16. vue请求拦截 给所有的api接口的请求 params 带上一个存储的值及qs的安装
  17. C语言 实现长整数的相加
  18. 分布式下如何实现统一日志系统?
  19. 如涵定格3.4美元退市:投资人“三折”下车,成败均系张大奕一身
  20. linux 底下traceroute报错(下载安装流程教学)

热门文章

  1. android地图选点,【百度地图】Android实现地图展示、定位、选点、地点查询和地点模糊查询功能...
  2. 大型欧姆龙PLC NJ系列ST语言Ethercat总线24轴 伺服电池生产线欧姆龙PLC程序大型程序NJ系列
  3. 什么是百度搜索引擎关键词快速排名上首页?
  4. ubuntu 16.04 安装anaconda tensorflow opencv keras openslide-python pycharm
  5. 经典时间片轮转RR算法C语言实现
  6. Linux系统和内核目录解析
  7. 蓝桥杯单片机——中断系统(7)
  8. 公司无线WIFI解决方案
  9. mysql1044什么意思_MySQL:1044和1045
  10. 2018.10.04 codeforces1060E. Sergey and Subway(树形dp)