>最近在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.yml
image的服务,该服务是Frankenphp映像,它包含运行Laravel应用程序的必要扩展名。
上聆听。
我们还将公开端口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
>
要将您的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数据库的必要扩展名。
- >我们添加了一个名为
php
>的新服务,该服务使用Dockerfile.dev
> image运行PostgreSQL数据库。我们还定义了一些环境变量来设置数据库用户,密码和数据库名称。 - 我们已经创建了一个名为
db
的新卷,以持续计算机上的数据库中的数据,而Docker可以重新启动服务时将其重新使用。postgres:16.4-alpine
>还添加了一种称为 的新服务,它是reuses - 。此图像用于运行
db_data
命令来运行数据库迁移。 键可确保在运行迁移之前 - 服务正在启动并运行。
init
>Dockerfile.dev
>php artisan migrate
服务现在取决于depends_on
>服务,以确保在Laravel应用启动之前运行数据库迁移。>>>>>>>>> db
>我们已经在服务中添加了健康检查,以确保PostgreSQL数据库在运行迁移之前正在启动并运行。 - 要测试您的配置,请在终端中运行以下命令:
php
>init
您的应用程序现在应该连接到您的PostgreSQL数据库,并且您的数据库迁移始终运行。 ? -
db
>您的当地环境现在准备模仿您的生产环境。现在,您可以在本地开发应用程序,并测试您将在生产中使用的非常相似的设置。init
> #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
- >环境变量设置为
- >以指示Caddy在端口
SERVER_NAME
>。:8080
我们安装了8080
php扩展名,以在图像中安装作曲家。 >
-
@composer
命令运行以安装Laravel应用的依赖项。 >我们将工作目录设置为 - >,并将您的Laravel应用程序的内容复制到图像。
composer install
要测试当地环境中的更改,您需要生成应用程序的生产构建。在您的终端中运行以下命令: -
/app
此命令构建了一个基于当前目录中的
。
要测试您新构建的生产图像,请使用以下命令:<!-- Syntax highlighted by torchlight.dev -->services: php: image: dunglas/frankenphp:php8.3-bookworm environment: SERVER_NAME: ":8080" ports: - 8080:8080 volumes: - .:/app
>替换my-laravel-app
在Dockerfile
>文件中的
>访问Localhost:8080在您的浏览器中,您的应用程序应以生产模式开始。由于缺乏数据库连接,可能会出错,但这是预期的。
#deploying到云<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
>现在您拥有准备生产的Docker映像,您可以将其部署到云提供商。 ?<your-app-key></your-app-key>
APP_KEY
在本教程中,我们将使用Sevalla,这是一种新的云提供商,该提供商提供了一种简单的部署.env
基于
>您的应用取决于PostgreSQL数据库,因此最好先在Sevalla上提供新的PostgreSQL数据库。登录Sevalla仪表板后,
>导航到创建数据库模式
选择PostgreSQL数据库Dockerfile
- 准备好数据库后,您可以在Sevalla上创建Laravel应用程序。
从您喜欢的git提供商中选择您的应用程序存储库
设置Laravel
所需的环境变量- 选择
- 作为构建类型
- 确认其余设置并点击“稍后部署”按钮
-
APP_KEY
- 如果您的应用程序准备就绪,您现在可以将其连接到PostgreSQL数据库中。
Dockerfile
- >导航到应用程序的页面
- 转到“网络”选项卡
- >单击“添加连接”按钮,然后选择您的PostgreSQL数据库 >
- 确认设置并点击“连接”
-
DB_CONNECTION
-
DB_HOST
-
DB_PORT
-
DB_DATABASE
-
DB_USERNAME
-
DB_PASSWORD
值。这样,您的应用程序可以通过专用网络连接到数据库。 DB_HOST
最后一步是在启动应用程序之前设置一个工作过程,以便您的应用程序运行数据库mirgations。>导航到“进程”选项卡
- >单击“创建过程”按钮,然后选择“作业”
- >将命令设置为
- >
- >将起始策略设置为“部署前”
php artisan migrate --force
确认设置并点击“创建”
如果也完成了此操作,您现在可以在“部署”选项卡中启动应用程序的手动部署。 ?
> 。
>如何使用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.dev
和Dockerfile
> files。我们感谢社区的支持和反馈。 ? ❤️
以上是为云准备您的Laravel应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

负载均衡会影响会话管理,但可以通过会话复制、会话粘性和集中式会话存储解决。1.会话复制在服务器间复制会话数据。2.会话粘性将用户请求定向到同一服务器。3.集中式会话存储使用独立服务器如Redis存储会话数据,确保数据共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP会话的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。1.Cookies通过在客户端存储数据来管理会话,简单但安全性低。2.Token-basedAuthentication使用令牌验证用户,安全性高但需额外逻辑。3.Database-basedSessions将数据存储在数据库中,扩展性好但可能影响性能。4.Redis/Memcached使用分布式缓存提高性能和扩展性,但需额外配

Sessionhijacking是指攻击者通过获取用户的sessionID来冒充用户。防范方法包括:1)使用HTTPS加密通信;2)验证sessionID的来源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

本文比较了PHP和ASP.NET,重点是它们对大规模Web应用程序,性能差异和安全功能的适用性。两者对于大型项目都是可行的,但是PHP是开源和无关的,而ASP.NET,


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3汉化版
中文版,非常好用

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。