首页 > 后端开发 > php教程 > 为云准备您的Laravel应用程序

为云准备您的Laravel应用程序

Emily Anne Brown
发布: 2025-03-07 01:02:09
原创
639 人浏览过

>最近在Laraconus发表的公告引发了人们对Laravel社区内基于云的部署的重新兴趣。随着如何部署应用程序的辩论继续进行,一件事很明显:对于Laravel用户而言,云已成为更可行的选择。

>在本文中,我们将探讨如何使用Frankenphp,Caddy,Dockerfiles在云环境中准备Laravel应用程序,并最终将其部署到Sevalla。

那么我们从哪里开始呢?当然,在当地环境中! ?

#LOCAL开发环境

为了简单起见,我们假设您在本地计算机上安装了一个新的Laravel应用程序,该应用程序连接到PostgreSQL数据库以读取/编写一些数据。

在我们继续前进之前,请确保您的项目root中有一个

文件,其中包含以下内容:

.env

>经过验证,我们就可以开始构建。 ? ☕️.env

>拥有与您的生产环境非常相似的当地开发环境总是一个好主意。这样,您可以尽早发现任何问题,并在生产中部署应用程序时避免出人意料。
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
登录后复制
登录后复制
登录后复制
> 为了模仿生产设置,我们将使用Docker和Docker组成。如果您的计算机上没有安装Docker,则可以从官方网站下载。

#running laravel没有数据库

>首先,在Laravel项目的根部创建一个名为

的新文件,并添加以下内容:>

此配置文件定义了使用compose.ymlimage的服务,该服务是Frankenphp映像,它包含运行Laravel应用程序的必要扩展名。

>环境变量将配置CADDY以在端口

上聆听。 我们还将公开端口compose.yml从主机计算机访问该应用程序。>

要测试您的配置,请尝试在终端中运行以下命令:>
<!-- Syntax highlighted by torchlight.dev -->services:
  php:
    image: dunglas/frankenphp:php8.3-bookworm
    environment:
      SERVER_NAME: ":8080"
    ports:
      - 8080:8080
    volumes:
      - .:/app
登录后复制
登录后复制
登录后复制

>您应该看到一个Laravel错误页面,以说明该连接未在数据库中建立,因为当您在浏览器中导航到php时缺少驱动程序。这是可以预期的,因为我们尚未将Laravel应用程序连接到数据库。dunglas/frankenphp:php8.3-bookworm> SERVER_NAME太棒了,到目前为止,我们已经配置了我们的Laravel应用程序,可以由Frankenphp服务器提供。> 8080接下来,让我们将本地应用与PostgreSQL数据库联系起来!8080>

#running laravel与数据库

要将您的Laravel应用程序连接到PostgreSQL数据库,我们需要做几件事。
<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
登录后复制
登录后复制
登录后复制
首先,我们需要在您的

>文件中设置以下环境变量:> http://localhost:8080

<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
登录后复制
登录后复制
登录后复制
在此之后,您需要在您的

文件中添加新服务,并为开发环境创建自定义compose.yml。使用以下内容创建和更新文件:Dockerfile

Dockerfile.dev

<!-- Syntax highlighted by torchlight.dev -->services:
  php:
    image: dunglas/frankenphp:php8.3-bookworm
    environment:
      SERVER_NAME: ":8080"
    ports:
      - 8080:8080
    volumes:
      - .:/app
登录后复制
登录后复制
登录后复制
>

>仅是您的本地/开发环境使用的,它将Dockerfile.dev图像扩展到包含dunglas/frankenphp:php8.3-bookworm>扩展名,这是连接到PostgreSQL数据库所需的。 pdo_pgsql

compose.yml

>这里发生了很多事情,让我们看一下发生了什么变化和原因:>
<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
登录后复制
登录后复制
登录后复制

我们已经更新了

服务,以使用称为
    的自定义Dockerfile来构建一个新图像,其中包含连接到PostgreSQL数据库的必要扩展名。
  1. >我们添加了一个名为php>的新服务,该服务使用Dockerfile.dev> image运行PostgreSQL数据库。我们还定义了一些环境变量来设置数据库用户,密码和数据库名称。
  2. 我们已经创建了一个名为db的新卷,以持续计算机上的数据库中的数据,而Docker可以重新启动服务时将其重新使用。 postgres:16.4-alpine>还添加了一种称为
  3. 的新服务,它是reuses
  4. 。此图像用于运行db_data命令来运行数据库迁移。
  5. 键可确保在运行迁移之前
  6. 服务正在启动并运行。init> Dockerfile.dev>php artisan migrate服务现在取决于depends_on>服务,以确保在Laravel应用启动之前运行数据库迁移。>>>>>>>>> db>我们已经在服务中添加了健康检查,以确保PostgreSQL数据库在运行迁移之前正在启动并运行。
  7. 要测试您的配置,请在终端中运行以下命令:php> init
  8. 您的应用程序现在应该连接到您的PostgreSQL数据库,并且您的数据库迁移始终运行。 ?
  9. db>您的当地环境现在准备模仿您的生产环境。现在,您可以在本地开发应用程序,并测试您将在生产中使用的非常相似的设置。init>
  10. #prexing for Production
是时候为您的生产环境做出必要的更改了。

>

>第一步是告诉Docker在构建生产图像时可以安全地忽略哪个目录。在Laravel项目的根部创建一个名为
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432 # default PostgreSQL port
DB_DATABASE=main
DB_USERNAME=admin
DB_PASSWORD=password
登录后复制
的新文件,并添加以下内容:>

此文件告诉Docker忽略

> Directories。然后,创建将用于构建您的生产图像的

> Dockerfile

Dockerfile

这个
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
登录后复制
登录后复制
登录后复制
类似于我们之前创建的

>,但其中包括一些其他步骤:Dockerfile Dockerfile.dev

> FrankenPHP映像使用Caddy作为默认的Web服务器,我们将
    >环境变量设置为
  1. >以指示Caddy在端口SERVER_NAME>。 :8080我们安装了8080php扩展名,以在图像中安装作曲家。
  2. >
  3. @composer命令运行以安装Laravel应用的依赖项。
  4. >我们将工作目录设置为
  5. >,并将您的Laravel应用程序的内容复制到图像。 composer install
  6. 要测试当地环境中的更改,您需要生成应用程序的生产构建。在您的终端中运行以下命令:
  7. /app
  8. 此命令构建了一个基于当前目录中的
>的新docker映像。

要测试您新构建的生产图像,请使用以下命令:>
<!-- Syntax highlighted by torchlight.dev -->services:
  php:
    image: dunglas/frankenphp:php8.3-bookworm
    environment:
      SERVER_NAME: ":8080"
    ports:
      - 8080:8080
    volumes:
      - .:/app
登录后复制
登录后复制
登录后复制

>替换my-laravel-appDockerfile>文件中的

>环境变量的值或从此处获取键

>访问Localhost:8080在您的浏览器中,您的应用程序应以生产模式开始。由于缺乏数据库连接,可能会出错,但这是预期的。

#deploying到云
<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
登录后复制
登录后复制
登录后复制

>现在您拥有准备生产的Docker映像,您可以将其部署到云提供商。 ?<your-app-key> APP_KEY在本教程中,我们将使用Sevalla,这是一种新的云提供商,该提供商提供了一种简单的部署.env基于

的部署的方法。

>您的应用取决于PostgreSQL数据库,因此最好先在Sevalla上提供新的PostgreSQL数据库。登录Sevalla仪表板后,

>导航到创建数据库模式

选择PostgreSQL数据库Dockerfile

确认设置并创建数据库

  1. 准备好数据库后,您可以在Sevalla上创建Laravel应用程序。
>导航到创建应用模式

从您喜欢的git提供商中选择您的应用程序存储库

请确保选择数据库在>中的相同数据中心

设置Laravel

所需的环境变量
    选择
  1. 作为构建类型
  2. 确认其余设置并点击“稍后部署”按钮
  3. APP_KEY
  4. 如果您的应用程序准备就绪,您现在可以将其连接到PostgreSQL数据库中。Dockerfile
    1. >导航到应用程序的页面
    2. 转到“网络”选项卡
    3. >单击“添加连接”按钮,然后选择您的PostgreSQL数据库
    4. >
    5. 确认设置并点击“连接”

    然后,在“环境变量”选项卡中设置具有数据库连接详细信息的“环境变量”选项卡中的以下环境变量:

    • DB_CONNECTION
    • DB_HOST
    • DB_PORT
    • DB_DATABASE
    • DB_USERNAME
    • DB_PASSWORD

    >我们建议将数据库的内部网络地址作为值。这样,您的应用程序可以通过专用网络连接到数据库。

    DB_HOST最后一步是在启动应用程序之前设置一个工作过程,以便您的应用程序运行数据库mirgations。

    >导航到“进程”选项卡

      >单击“创建过程”按钮,然后选择“作业”
    1. >将命令设置为
    2. >
    3. >将起始策略设置为“部署前” php artisan migrate --force
    4. 确认设置并点击“创建”

    如果也完成了此操作,您现在可以在“部署”选项卡中启动应用程序的手动部署。 ?

    如果一切顺利,恭喜!您已经成功为云准备了Laravel应用程序。 ?

    #conclusion

    在本文中,我们探索了:>

    如何设置本地环境以使用Docker和

    >如何使用Docker,Frankenphp和Caddy准备Laravel应用程序在云环境中部署
      我们还介绍了如何将您的应用程序部署到Sevalla之类的云提供商。
    • docker compose
    • >遵循以下步骤,您可以将Laravel应用程序带到新的高度,并享受基于云的部署的好处。 ?
    • #update:2024年9月8日
    • >我们通过对X的讨论收到了社区的宝贵反馈。
    >第一个点突出显示了

    >文件中的

    命令是不必要的,因为它绕过了Frankenphp服务器。我们已经通过更新

    >文件的相关部分来纠正此。

    >

    第二点由KévinDunglas(Frankenphp的创建者)共享,建议使用基于Debian的图像(bookworm)而不是Alpine(alpine),因为Debian提供了与PHP的更好兼容性,并且与Frankenphp的性能更好。结果,我们同时更新了Dockerfile.devDockerfile> files。

    >

    我们感谢社区的支持和反馈。 ? ❤️

以上是为云准备您的Laravel应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板