首頁 >後端開發 >php教程 >為雲準備您的Laravel應用程序

為雲準備您的Laravel應用程序

Emily Anne Brown
Emily Anne Brown原創
2025-03-07 01:02:09645瀏覽

>最近在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