【Laravel vx Docker】利用 Laravel Sail 高效搭建 Laravel 应用开发环境

关于 laravel sail

laravel sail 是 laravel 框架的官方开发环境。 sail 提供了一个轻量级的命令行界面 (cli),可以使用 docker 轻松设置和管理 laravel 应用程序开发环境。下面,我们讲解一下 laravel sail 的主要特性和使用方法。

使用 laravel sail 的好处

构建独立于操作系统的开发环境sail 使用 docker 来容器化 laravel 应用程序的开发环境。这使您可以构建独立于操作系统的开发环境。轻松设置开发环境使用 sail,只需几条命令即可搭建 laravel 开发环境。即使使用 mysqlredis、mailhog 等复杂的开发环境,也可以轻松构建。轻松管理不同版本的项目例如,laravel 的版本取决于 php 的版本,但通过在 docker-compose.yml 文件中设置每个项目的环境,可以轻松切换版本。

【Laravel vx Docker】利用 Laravel Sail 高效搭建 Laravel 应用开发环境
当您使用 docker 和 laravel sail 创建项目时,结构将如上图所示。

用法

开发环境

mac php v8.3 laravel v11 docker

先决条件

在创建 laravel 项目之前,请下载并启动 docker desktop。
https://www.docker.com/products/docker-desktop/

1. 创建 laravel 项目

运行以下命令创建一个新的 laravel 项目并设置 laravel sail。

curl -s "https://laravel.build/example-app" | bashcd example-app

这将创建 laravel 项目文件。生成的 docker-compose.yml 文件中描述了开发环境。

使用 with 查询指定服务

如果要指定php版本或者使用postgresql而不是mysql,可以在生成项目时的命令中指定with=,,…

curl -s "https://laravel.build/example-app?php=81&with=pgsql,redis" | bash

2. 起航

移动到项目目录并启动 sail。

./vendor/bin/sail up -d

此命令启动 docker 容器并运行 laravel 应用程序。

※注册别名

输入 ./vendor/bin/sail 很麻烦,因此请将其保存为 shell 配置文件中的别名 sail。

使用以下命令检查您正在使用的 shell 的路径

echo $shell

示例:/bin/zsh

编辑 shell 配置文件

对于 zsh

shell 配置文件是 ~/.zshrc。
要添加别名,请运行以下命令

echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.zshrcsource ~/.zshrc

对于 bash

shell 配置文件是 ~/.bash_profile 或 ~/.bashrc。
要添加别名,请运行以下命令:

echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.bash_profilesource ~/.bash_profile

通过上述设置,您可以以缩写形式运行 sail 命令。

sail up -d

3. 使用 sail 命令

您可以使用sail执行各种开发任务。以下是一些示例。

启动应用程序

sail up -d

停止应用程序

sail down

运行 artisan 命令

sail artisan migrate

运行 composer 命令

sail composer install

运行 npm 命令

sail npm install

4. 改变服务

即使在创建项目后,您也可以通过修改 docker-compose.yml 文件(即 docker 配置文件)来更改服务。在这里,我们将更改 php 版本和使用的数据库。

更改 php 版本

首先检查当前php版本

sail php -vphp 8.3.12 (cli) (built: sep 27 2024 03:53:05) (nts)

接下来修改docker-compose.yml文件中描述的开发环境信息。

services:    laravel.test:        build:            context: "./vendor/laravel/sail/runtimes/8.3"            dockerfile: dockerfile            args:                wwwgroup: "${wwwgroup}"        image: "sail-8.3/app"

将构建上下文和镜像更改为 8.1 .

services:    laravel.test:        build:            context: "./vendor/laravel/sail/runtimes/8.1"            dockerfile: dockerfile            args:                wwwgroup: "${wwwgroup}"        image: "sail-8.1/app"

修改 docker-compose.yml 后,停止应用。

sail down

接下来,重建 docker 容器以反映更改。

sail build --no-cache

重新启动应用程序。

sail up -d

检查php版本是否有变化。

sail php -vphp 8.1.30 (cli) (built: sep 27 2024 04:07:29) (nts)

php 版本已从 php 8.3 更改为 php 8.1。

更改使用的数据库

将使用 mysql 创建的项目更改为 postgresql。

运行 sail 安装命令

sail php artisan sail:install

选择 pgsql

 ┌ which services would you like to install? ───────────────────┐ │   ◼ mysql                                                  ┃ │ │ › ◻ pgsql                                                  │ │ │   ◻ mariadb                                                │ │ │   ◻ redis                                                  │ │ │   ◻ memcached                                              │ │ └────────────────────────────────────────────────── 1 selected ┘  use the space bar to select options.

检查 docker-compose.yml 文件并确认 pgsql 条目已添加。

services:    laravel.test:...        depends_on:            - mysql            - redis            - meilisearch            - mailpit            - selenium            - pgsql...        pgsql:            image: 'postgres:17'            ports:                - '${forward_db_port:-5432}:5432'            environment:                pgpassword: '${db_password:-secret}'                postgres_db: '${db_database}'                postgres_user: '${db_username}'                postgres_password: '${db_password:-secret}'            volumes:                - 'sail-pgsql:/var/lib/postgresql/data'                - './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'            networks:                - sail            healthcheck:                test:                    - cmd                    - pg_isready                    - '-q'                    - '-d'                    - '${db_database}'                    - '-u'                    - '${db_username}'                retries: 3                timeout: 5s

ext,打开项目目录下的.env文件,确认设置了db_connection=pgsql和db_host=pgsql。
如果没有,请手动更改它们。

db_connection=pgsqldb_host=pgsqldb_port=5432db_database=laraveldb_username=saildb_password=******

确认 docker-compose.yml 和 .env 中的更改后,停止应用程序。

sail down

接下来,重建 docker 容器以反映更改。

sail build --no-cache

重新启动应用程序。

sail up -d

运行迁移文件。

sail artisan migrateinfo  preparing database.creating migration table ................................ 6.00ms doneinfo  running migrations.0001_01_01_000000_create_users_table .................... 5.74ms done0001_01_01_000001_create_cache_table .................... 1.45ms done0001_01_01_000002_create_jobs_table ..................... 3.44ms done

在 docker 中启动 shell 并检查 pgsql

显示当前正在运行的 docker 容器的列表。

sail ps
name                                image                          command                  servicelaravel-sail-setup-laravel.test-1   sail-8.3/app                   "start-container"        laravel.testlaravel-sail-setup-mailpit-1        axllent/mailpit:latest         "/mailpit"               mailpit

检查应用程序的容器名称并在 docker 内启动应用程序的 bash。

docker exec -it laravel-sail-setup-laravel.test-1 bash

连接到 pgsql。

psql -u sail -h pgsql laravel

系统将提示您输入密码,因此请输入 .env 文件中指定的 db_password。

password for user sail:******

检查pgsql中的表

laravel=# dt               List of relations Schema |         Name          | Type  | Owner--------+-----------------------+-------+------- public | cache                 | table | sail public | cache_locks           | table | sail public | failed_jobs           | table | sail public | job_batches           | table | sail public | jobs                  | table | sail public | migrations            | table | sail public | password_reset_tokens | table | sail public | sessions              | table | sail public | users                 | table | sail(9 rows)

这样,即使创建了项目,也可以从 mysql 更改为 postgresql。

结论

通过本文,您将了解如何使用 laravel sail 高效地设置和管理开发环境。通过根据项目的需求选择合适的服务并自定义设置,您可以实现更灵活、更强大的开发环境。

以上就是【Laravel vx Docker】利用 Laravel Sail 高效搭建 Laravel 应用开发环境的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1248681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 20:42:30
下一篇 2025年12月8日 10:31:42

相关推荐

  • 基于状态如何对订单进行排序?

    基于状态的订单排序:优先显示“待操作”,最后显示“撤销” 问题描述: 有一个订单表,包含订单状态字段。需要根据特定的排序规则进行排序: “待操作”状态的订单始终排在最前面。“撤销”状态的订单始终排在最后面。其他状态按升序排列。 解决方案: mysql 中的实现: SELECT *FROM ( SEL…

    2025年12月9日
    000
  • 如何按照状态对订单表数据排序,优先展示状态为 2 的订单?

    mysql 查询订单表按照状态排序 (-1 永远排最后,2 排最前) 如何将订单表中的数据按照状态排序,使得状态为 -1 的订单永远排在最后,状态为 2 的订单永远排在最前,其他状态按照升序排列? sql 查询 select * from (select case when status==2 th…

    2025年12月9日
    000
  • 如何正确使用 Access Token 进行 GitHub 三方授权登录?

    github 三方授权登录:access token 使用指南 在使用 github 进行第三方授权登录时,将 access token 放入请求头的“authorization”字段中可能会遇到无法成功获取用户令牌的问题。 根据官方文档,github 授权头部的正确格式应为: authorizat…

    2025年12月9日
    000
  • Authorization 请求头如何正确的设置 Access Token?

    github 三方授权登录 access token 使用 在进行 github 三方授权登录时,用户需要提供来自 github 的 access token。access token 应该被放置在请求头的 authorization 字段中,正确格式如下: authorization: beare…

    2025年12月9日
    000
  • 在 PHP 中连接到 MySQL 数据库

    PHP 通常与 MySQL 搭配使用,MySQL 是使用最广泛的开源关系数据库管理系统之一,可以在小型和大型项目中快速高效地处理数据。 无论您是创建简单的网站还是高级 Web 应用程序,您都需要知道如何将 PHP 连接到 MySQL 数据库。 MySQL 和 PHP 集成概述 MySQL 因开源关系…

    2025年12月9日
    000
  • 在 Swoole 协程中操作变量时,是否需要加锁以确保变量的安全性?

    协程操作变量时是否需要加锁:安全性分析 在 swoole 协程中,多个协程的操作同一个变量是否需要加锁,一直是开发者关心的问题。 示例代码 考虑以下代码示例: use SwooleRuntime;use SwooleCoroutine;use SwooleCoroutineWaitGroup;// …

    2025年12月9日
    000
  • GitHub 三方登录 access_token 如何正确使用?

    github 三方授权登录中 access_token 使用问题 在使用 github 进行三方登录时,将 access_token 放置于请求头的’authorization’字段中,却无法成功获取用户令牌。 根据 github 授权文档,正确的授权头部应为”a…

    2025年12月9日
    000
  • 使用 Github 三方授权登录时 Authorization 字段的正确格式是什么?

    github 三方授权登录 access_token 使用问题 在使用 github 进行三方登录时,将 access token 放入请求头的 authorization 字段却一直未成功获取到用户的令牌。 问题代码 private async getgithubuserinfo(accessto…

    2025年12月9日
    000
  • 授权:了解 Laravel 中的策略

    控制用户在应用程序中可以执行或不能执行的操作是构建实际应用程序时需要做的最重要的事情之一。 例如,在待办事项应用程序中,您不希望用户能够编辑或删除其他用户的待办事项。 在本文中,您将学习在 laravel 中实现此目的的无缝方法之一,即使用策略来控制用户可以通过构建简单的待办事项应用程序执行哪些操作…

    2025年12月9日
    000
  • 使用swoole作为基于ESP6的脚本可编程控制器的云端物联网网关框架

    脚本可编程控制器的本地功能已经基本完成,开始实现远程相关功能。 远程系统整体架构如下:使用ESP8266的SDK实现tcp服务器和tcp客户端。在tcp服务器的基础上编写http协议解析代码,设计简单的http服务器,处理与浏览器的数据交互,包括内置网页的下载,并使用ajax技术获取状态并保存数据。…

    2025年12月9日
    000
  • VIRTUALGROHOUSE 的 PHP 初学者指南

    您好,我正在制作一个简单的 PHP 指南,以帮助我自己和其他人成为 webdevs。祝你好运,万事如意! 请关注我的旅程并向我提问!我正在和你一起学习,所以集思广益会很好! 警告:完成后我会将 URL 发布到此处,在此之前,如果此消息在此,则表示尚未准备好 第 1 章:PHP 基础知识1.1 语法1…

    2025年12月9日
    000
  • 如何使用 Eloquent 计算多列的总和

    在本教程中,我将向您展示如何使用 eloquent 计算多列的总和。 laravel 提供了通过“sum”方法聚合列值的内置支持,允许您计算列值的总和。您可以学习如何使用 eloquent 计算列的平均值 这里的主要警告是 eloquent 一次只能对一列求和。要对 2 列求和,我们可以调用 sum…

    2025年12月9日
    000
  • Laravel 中新的 `@bool` Blade 指令!

    新的 @bool blade 指令 laravel 的 blade 模板引擎获得了一个方便的新功能:@bool 指令。这允许您直接将布尔值打印到字符串中或在对象构造中使用它们,使您的 javascript 集成更干净、更高效。 使用方法如下: let config = { isactive: @bo…

    2025年12月9日
    000
  • Laravel 领域驱动设计 (DDD) 简单指南

    您是否曾感觉到,随着 laravel 项目的发展,事情开始变得有点失控?控制器变得臃肿,模型开始做太多事情,突然之间,你的代码库就像你几个月来一直想组织的抽屉一样。这就是 领域驱动设计 (ddd) 可以介入并让您的生活更轻松的地方。 ddd 是一种设计应用程序的方法,使其结构与您在现实世界中解决的问…

    2025年12月9日
    000
  • Laravel 中的交易

    在某些情况下,我们需要进行一系列连续的操作,必须全部顺利完成,不能半途而废。 一个常见的示例是创建用户,其中还必须分配角色并发送注册电子邮件。 为了处理这些类型的情况,需要使用事务。下面的方法创建用户、分配角色,然后通过 sendemail() 方法发送电子邮件。此方法接收电子邮件作为参数并相应地发…

    2025年12月9日
    000
  • 了解 PSR – PHP 编码风格指南

    如果您使用 php 进行开发已有一段时间,您可能遇到过术语 psr-12。它是 php 社区中最广泛接受的编码标准之一,旨在确保不同项目之间 php 代码库的一致性。无论您是单独工作还是作为团队的一员,遵循 psr-12 都可以使您的代码更干净、更具可读性并且更易于维护。在本博客中,我们将详细介绍 …

    2025年12月9日
    000
  • Laravel 中的整洁代码架构:实用指南

    如果您使用 laravel 进行开发已经有一段时间了,您可能听说过“干净的代码”这个词。但它在 laravel 开发的背景下实际上意味着什么?更重要的是,你为什么要关心? “干净的代码”是指易于理解、维护和扩展的代码。干净的代码架构通过提供一种结构使这一点更进一步,使您可以随着应用程序的增长更轻松地…

    2025年12月9日
    000
  • Laravel 自定义辅助函数 – 快速提示

    辅助函数在 laravel 开发者中非常流行。它们提供了对一些巧妙算法的访问,可以使用单个语句在您的代码中使用。 最知名的辅助函数可能是 url(),它允许您生成内部应用程序 url。 另一个很棒的帮手是 retry() 函数,例如:https://laravel.com/docs/11.x/hel…

    2025年12月9日
    000
  • Lithe 上的 PHP 会话管理:从基础配置到高级使用

    当我们谈论 web 应用程序时,首要需求之一是在用户浏览页面时维护用户的信息。这就是 lithe 中的 会话管理 的用武之地,它允许您存储登录信息或用户首选项等数据。 安装简单快捷 要开始在 lithe 中使用会话,您只需通过 composer 安装会话中间件。只需在项目中的终端中运行以下命令: c…

    2025年12月9日
    000
  • 使用 Lithe 进行 PHP 会话管理:从基本设置到高级使用

    当我们谈论 web 应用程序时,首要需求之一是在用户浏览页面时维护用户信息。这就是 lithe 中的 会话管理 的用武之地,它允许您存储登录信息或用户首选项等数据。 安装简单快捷 要开始在 lithe 中使用会话,您只需通过 composer 安装会话中间件。只需在项目中的终端中运行以下命令: co…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信