国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 將 PHP (Laravel) 應用程序部署到 Amazon ECS 部分

將 PHP (Laravel) 應用程序部署到 Amazon ECS 部分

Oct 20, 2024 am 06:07 AM

在教程系列的第一部分中,我們將逐步完成將 PHP (Laravel) 應用程序部署到 Amazon ECS 的步驟。我們將首先創(chuàng)建一個 Docker 映像,將其推送到 Amazon ECR,創(chuàng)建一個 ECS 任務定義、一個 ECS 集群、一個 ECS 服務并將域名連接到該服務。

使用 Docker 和 ECR

創(chuàng)建 Dockerfile 和 nginx 配置

在 git 存儲庫的根目錄中,創(chuàng)建一個包含以下內(nèi)容的 Dockerfile:

# Use the official PHP-FPM image as the base
FROM public.ecr.aws/docker/library/php:fpm

# Define a user variable
ARG user=www-data

# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
    git curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip unzip libzip-dev \
    nginx \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install \
        pdo_mysql \
        mbstring \
        exif \
        pcntl \
        bcmath \
        gd \
        zip

# Install Composer
COPY --from=public.ecr.aws/composer/composer:latest-bin /usr/bin/composer /usr/bin/composer

# Create a system user for running Composer and Artisan commands
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Copy Nginx configuration and entrypoint script
COPY ./docker/default.conf /etc/nginx/sites-enabled/default
COPY ./docker/entrypoint.sh /etc/entrypoint.sh

# Make the entrypoint script executable
RUN chmod +x /etc/entrypoint.sh

# Set the working directory
WORKDIR /var/www

# Copy the application code
COPY --chown=www-data:www-data . /var/www

# Install PHP dependencies
RUN composer install

# Expose port 80
EXPOSE 80

# Define the entrypoint
ENTRYPOINT ["/etc/entrypoint.sh"]

新建一個名為 docker 的文件夾,并將以下兩個文件放入其中。

  • docker/entrypoint.sh
#!/usr/bin/env bash

# Start Nginx service
service nginx start

# Run Laravel migrations
php artisan migrate --force

# Create symbolic link for storage
php artisan storage:link

# Clear and optimize the application cache
php artisan optimize:clear
php artisan optimize

# Start PHP-FPM
php-fpm
  • docker/default.conf
server {
    listen 80 default_server;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_hide_header X-Powered-By;

        # Tells PHP we're using a reverse proxy with TLS termination
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_X_FORWARDED_PROTO $scheme;
        fastcgi_param HTTP_X_FORWARDED_SSL on;
        add_header Content-Security-Policy "upgrade-insecure-requests" always;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

并通過運行 chmod x docker/entrypoint.sh 使entrypoint.sh可執(zhí)行。

將圖像推送到 Amazon ECR

第一步是將鏡像推送到 ECR。您需要先手動執(zhí)行此步驟,然后才能繼續(xù)將應用程序部署到 ECS。

創(chuàng)建 ECR 存儲庫

通過前往 Amazon ECR 控制臺,單擊 創(chuàng)建存儲庫,然后輸入存儲庫名稱來創(chuàng)建 ECR 存儲庫。對于此示例,我們將使用 demo-app。

Part  Deploying a PHP (Laravel) application to Amazon ECS

創(chuàng)建后,復制存儲庫的 URI。稍后您將需要此 URI。

將鏡像推送至ECR

選擇您剛剛創(chuàng)建的存儲庫,單擊查看推送命令,然后在終端中運行命令。命令將如下所示(確保選擇正確的區(qū)域并使用正確的帳戶 ID):

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker build -t demo-app .
docker tag demo-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest

命令成功運行后,返回Amazon ECR 控制臺,進入存儲庫,并確認鏡像已成功推送,標簽為latest。

Part  Deploying a PHP (Laravel) application to Amazon ECS

使用 Amazon ECS

創(chuàng)建 ECS 任務定義

下一步是使用我們剛剛推送到 ECR 的 Docker 映像創(chuàng)建 ECS 任務定義。
首先前往 Amazon ECS 控制臺,在 任務定義 下,單擊 創(chuàng)建新任務定義。

為任務定義選擇一個唯一的名稱(我們將使用 demo-app),并確保選擇 Fargate 作為啟動類型。暫時不要更改此部分中的任何其他內(nèi)容。

向下滾動到 Container - 1 部分,然后輸入以下值:

  • 名稱:演示應用程序
  • 圖片:123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest(替換為我們之前復制的您自己的 ECR URI)

稍后,您可能需要根據(jù)您的應用程序調(diào)整內(nèi)存和 CPU 設置。如果需要,您還可以在此處添加環(huán)境變量和 EFS 卷。我們將在單獨的教程中介紹它。

Part  Deploying a PHP (Laravel) application to Amazon ECS

暫時不要更改此部分中的任何其他內(nèi)容。向下滾動到底部并單擊創(chuàng)建。

創(chuàng)建ECS集群

我們現(xiàn)在需要創(chuàng)建一個 ECS 集群。集群是我們運行剛剛創(chuàng)建的任務定義中定義的服務的地方。

前往 Amazon ECS 控制臺,在 集群 下,單擊 創(chuàng)建集群,輸入集群名稱,并確保選擇 AWS Fargate(無服務器) 作為基礎設施:

Part  Deploying a PHP (Laravel) application to Amazon ECS

創(chuàng)建集群需要幾分鐘時間。集群創(chuàng)建偶爾會失敗,特別是對于新帳戶;只需等待幾分鐘,然后重試,選擇不同的集群名稱。

創(chuàng)建ECS服務

打開剛剛創(chuàng)建的集群,向下滾動到 Services 表,單擊 創(chuàng)建,然后輸入以下值:

  • 家庭:演示應用程序
  • 修訂:1(保持原樣)
  • 服務名稱:demo-app

Part  Deploying a PHP (Laravel) application to Amazon ECS

暫時不要點擊創(chuàng)建。

添加負載均衡器

由于我們可能通過 HTTPS 為應用程序提供服務,因此我們需要添加一個負載均衡器。您以后不能再這樣做。

向下滾動到網(wǎng)絡部分,然后選擇要將服務部署到的 VPC。確保 VPC 具有 公共子網(wǎng),并附加有 Internet 網(wǎng)關。如果您沒有 VPC,您可以通過單擊創(chuàng)建新 VPC 并按照向?qū)Р僮鱽韯?chuàng)建一個 VPC。

選擇 VPC 后,請繼續(xù)閱讀。

向下滾動到負載均衡部分,選擇應用程序負載均衡器,然后選擇選項創(chuàng)建新的負載均衡器

如果此選項不可用,則您可能在上一步中沒有選擇 VPC。

調(diào)整以下值:

  • 負載均衡器名稱:demo-app-alb
  • 健康檢查寬限期:300(我建議將其設置為 300 秒,即 5 分鐘,以便您的應用程序啟動并穩(wěn)定)

Listener 部分下,保持選中 創(chuàng)建新監(jiān)聽器 選項,但調(diào)整值以使用端口 443 和 HTTPS 協(xié)議。要確認此選擇,您需要您要使用的域的 ACM 證書;有關如何獲取的更多信息,請參閱 AWS 文檔。

Part  Deploying a PHP (Laravel) application to Amazon ECS

目標組部分下,調(diào)整以下值:

  • 協(xié)議:HTTP(這是默認值,請確保保留它,因為我們的 nginx 容器正在偵聽端口 80)
  • 注銷延遲:60(我建議將其設置為 60 秒,而不是默認的 5 分鐘,以使部署更快一點)
  • 健康檢查路徑:/(我建議將其設置為您在應用程序中專門創(chuàng)建的路由,例如/healthcheck;您現(xiàn)在可以將其保留為默認值)

Part  Deploying a PHP (Laravel) application to Amazon ECS

點擊創(chuàng)建。

檢查服務狀態(tài)

服務可能需要幾分鐘時間才會顯示在服務 表中。如果您沒有立即看到新服務,請稍等一下,然后刷新頁面。

如果一切順利,您應該會看到 服務 表中列出的服務,其狀態(tài)為 活動部署和任務 顯示 1/1正在運行任務。

部署錯誤顯示如下:

Part  Deploying a PHP (Laravel) application to Amazon ECS

要調(diào)試部署錯誤,請打開服務,然后單擊部署選項卡;向下滾動到 Events 部分,然后單擊最近啟動的任務的 ID。任務執(zhí)行的日志部分將向您顯示有關出錯原因的更多詳細信息。

Laravel 通常會抱怨存儲文件夾結(jié)構(gòu)不完整(例如,缺少框架、緩存、會話之一)。我們將在單獨的教程中了解如何將 EFS 卷附加到任務定義來解決此問題。

將域名連接到服務

您可能想要將域名連接到我們剛剛部署的服務。在前面的步驟中,我們已經(jīng)創(chuàng)建了一個應用程序負載均衡器,它是負責將互聯(lián)網(wǎng)流量路由到服務的 AWS 組件。

我們還已經(jīng)配置了 ACM 證書,用于加密最終用戶和負載均衡器之間的流量。

要完成該過程并使您的應用程序能夠通過 HTTPS 從公共互聯(lián)網(wǎng)訪問,您需要創(chuàng)建一條 DNS 記錄,將您的域名指向負載均衡器。此過程會有所不同,具體取決于您使用的 DNS 提供商;請參閱他們的文檔以獲取更多信息。

首先獲取應用程序負載均衡器的 DNS 名稱。導航到 AWS 控制臺中的搜索欄(macOS 上的選項 S),輸入負載均衡器,然后選擇 負載均衡器(EC2 功能)。您將看到一個表格,其中包含我們需要將域名連接到的負載均衡器:

Part  Deploying a PHP (Laravel) application to Amazon ECS

復制負載均衡器的 DNS 名稱。

如果您使用 53 號公路,請按照以下說明操作:

  • 導航到 Route 53 控制臺,單擊 托管區(qū)域,然后選擇您的域名。
  • 點擊創(chuàng)建記錄按鈕。
  • 將記錄類型設置為A.
  • 選中別名選項。
  • 將流量路由到字段中,選擇應用程序和經(jīng)典負載均衡器的別名,然后選擇負載均衡器的區(qū)域。
  • 選擇負載均衡器下拉列表中,選擇我們需要將域名連接到的負載均衡器。如果您有多個負載均衡器,請檢查從下拉列表中選擇的負載均衡器必須與我們之前復制的負載均衡器的 DNS 名稱相匹配。
  • 關閉評估目標健康狀況
  • 點擊創(chuàng)建記錄。

如果您不使用 53 號公路:

請參閱您的 DNS 提供商的文檔以了解更多信息。您可能需要創(chuàng)建一條 CNAME 記錄,將負載均衡器的 DNS 名稱作為其目標/值。

恭喜你

創(chuàng)建 DNS 記錄后,等待幾分鐘讓它傳播,然后嘗試通過域名訪問您的應用程序。

恭喜!您現(xiàn)已成功將 PHP (Laravel) 應用程序部署到 AWS ECS。

本教程系列即將推出

  • 將 EFS 卷附加到任務定義以修復 Laravel 的存儲文件夾結(jié)構(gòu)問題
  • 使用 AWS CodePipeline 自動將新代碼部署到服務
  • 使用 AWS CDK 自動化基礎設施配置

以上是將 PHP (Laravel) 應用程序部署到 Amazon ECS 部分的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在于驗證文件類型、重命名文件并限制權(quán)限。1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限制文件大小,設置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(松散比較)和===(嚴格的比較)之間有什么區(qū)別? PHP中==(松散比較)和===(嚴格的比較)之間有什么區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在于類型檢查的嚴格程度。==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用于變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用于數(shù)字及類似字符串;4.除法用/號,需避免除以零,并注意結(jié)果可能是浮點數(shù);5.取模用%號,可用于判斷奇偶數(shù),處理負數(shù)時余數(shù)符號與被除數(shù)一致。正確使用這些運算符的關鍵在于確保數(shù)據(jù)類型清晰并處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例并操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設置與獲取,推薦phpredis用于高性能場景,Predis則便于快速部署;兩者均適用于生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設置PHP時區(qū)? 如何設置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles