為雲準備您的Laravel應用程序
>最近在Laraconus發表的公告引發了人們對Laravel社區內基於雲的部署的重新興趣。隨著如何部署應用程序的辯論繼續進行,一件事很明顯:對於Laravel用戶而言,雲已成為更可行的選擇。
>在本文中,我們將探討如何使用Frankenphp,Caddy,Dockerfiles在雲環境中準備Laravel應用程序,並最終將其部署到Sevalla。那麼我們從哪裡開始呢?當然,在當地環境中! ?
#LOCAL開發環境
為了簡單起見,我們假設您在本地計算機上安裝了一個新的Laravel應用程序,該應用程序連接到PostgreSQL數據庫以讀取/編寫一些數據。在我們繼續前進之前,請確保您的項目root中有一個
文件,其中包含以下內容:
:.env
>經過驗證,我們就可以開始構建。 ? ☕️.env
<!-- Syntax highlighted by torchlight.dev -->... DB_CONNECTION=pgsql ...
#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>
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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
