亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 後端開發(fā) php教程 將 PHP (Laravel) 應(yīng)用程式部署到 Amazon ECS 部分

將 PHP (Laravel) 應(yīng)用程式部署到 Amazon ECS 部分

Oct 20, 2024 am 06:07 AM

在教學(xué)系列的第一部分中,我們將逐步完成將 PHP (Laravel) 應(yīng)用程式部署到 Amazon ECS 的步驟。我們將首先建立一個(gè) Docker 映像,將其推送到 Amazon ECR,建立 ECS 任務(wù)定義、一個(gè) ECS 叢集、一個(gè) ECS 服務(wù)並將網(wǎng)域連接到該服務(wù)。

使用 Docker 和 ECR

建立 Dockerfile 和 nginx 配置

在 git 儲存庫的根目錄中,建立一個(gè)包含以下內(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"]

新建一個(gè)名為 docker 的資料夾,並將以下兩個(gè)檔案放入其中。

  • 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;
    }
}

並透過執(zhí)行 chmod x docker/entrypoint.sh 使entrypoint.sh可執(zhí)行。

將映像推送到 Amazon ECR

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

建立 ECR 儲存庫

前往 Amazon ECR 控制臺,按一下 建立儲存庫,然後輸入儲存庫名稱來建立 ECR 儲存庫。對於此範(fàn)例,我們將使用 demo-app。

Part  Deploying a PHP (Laravel) application to Amazon ECS

建立後,複製儲存庫的 URI。稍後您將需要此 URI。

將鏡像推送至ECR

選擇您剛剛建立的儲存庫,按一下查看推播指令,然後在終端機(jī)中執(zhí)行指令。命令將如下所示(確保選擇正確的區(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

指令成功運(yùn)作後,返回Amazon ECR 控制臺,進(jìn)入儲存庫,並確認(rèn)鏡像已成功推送,標(biāo)籤為latest。

Part  Deploying a PHP (Laravel) application to Amazon ECS

使用 Amazon ECS

建立 ECS 任務(wù)定義

下一步是使用我們剛剛推送到 ECR 的 Docker 映像建立 ECS 任務(wù)定義。
首先前往 Amazon ECS 控制臺,在 任務(wù)定義 下,按 建立新任務(wù)定義。

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

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

  • 名稱:示範(fàn)?wèi)?yīng)用程式
  • 圖片:123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest(替換為我們之前複製的您自己的 ECR URI)

稍後,您可能需要根據(jù)您的應(yīng)用程式調(diào)整記憶體和 CPU 設(shè)定。如果需要,您也可以在此處新增環(huán)境變數(shù)和 EFS 磁碟區(qū)。我們將在單獨(dú)的教程中介紹它。

Part  Deploying a PHP (Laravel) application to Amazon ECS

暫時(shí)不要更改此部分的任何其他內(nèi)容。向下捲動到底部並點(diǎn)擊建立。

建立ECS集群

我們現(xiàn)在需要建立一個(gè) ECS 叢集。叢集是我們執(zhí)行剛剛建立的任務(wù)定義中定義的服務(wù)的地方。

前往Amazon ECS 控制臺,在叢集 下,點(diǎn)選建立叢集,輸入?yún)布Q,並確保選擇AWS Fargate(無伺服器) 作為基礎(chǔ)設(shè)施:

Part  Deploying a PHP (Laravel) application to Amazon ECS

建立叢集需要幾分鐘。叢集建立偶爾會失敗,特別是對於新帳戶;只需等待幾分鐘,然後重試,選擇不同的叢集名稱。

創(chuàng)建ECS服務(wù)

開啟剛剛建立的集群,向下捲動至 Services 表,按一下 建立,然後輸入以下值:

  • 家庭:演示應(yīng)用程式
  • 修訂:1(保持原樣)
  • 服務(wù)名稱:demo-app

Part  Deploying a PHP (Laravel) application to Amazon ECS

暫時(shí)不要點(diǎn)擊建立。

新增負(fù)載平衡器

由於我們可能透過 HTTPS 為應(yīng)用程式提供服務(wù),因此我們需要新增一個(gè)負(fù)載平衡器。您以後不能再做。

向下捲動至網(wǎng)路部分,然後選擇要將服務(wù)部署到的 VPC。確保 VPC 具有 公用子網(wǎng)路,並附加有 Internet 閘道。如果您沒有 VPC,您可以透過點(diǎn)擊建立新 VPC 並按照精靈操作來建立 VPC。

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

向下捲動至負(fù)載平衡部分,選擇應(yīng)用程式負(fù)載平衡器,然後選擇選項(xiàng)建立新的負(fù)載平衡器

如果此選項(xiàng)不可用,則您可能在上一個(gè)步驟中沒有選擇 VPC。

調(diào)整以下數(shù)值:

  • 負(fù)載平衡器名稱:demo-app-alb
  • 健康檢查寬限期:300(我建議將其設(shè)定為 300 秒,即 5 分鐘,以便您的應(yīng)用程式啟動並穩(wěn)定)

Listener 部分下,保持選取 建立新監(jiān)聽器 選項(xiàng),但調(diào)整值以使用連接埠 443 和 HTTPS 協(xié)定。要確認(rèn)此選擇,您需要您要使用的網(wǎng)域的 ACM 憑證;有關(guān)如何取得的詳細(xì)信息,請參閱 AWS 文件。

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

  • 協(xié)定:HTTP(這是預(yù)設(shè)值,請確保保留它,因?yàn)槲覀兊?nginx 容器正在偵聽連接埠 80)
  • 註銷延遲:60(我建議將其設(shè)定為 60 秒,而不是預(yù)設(shè)的 5 分鐘,以使部署更快一點(diǎn))
  • 健康檢查路徑:/(我建議將其設(shè)定為您在應(yīng)用程式中專門建立的路由,例如/healthcheck;您現(xiàn)在可以將其保留為預(yù)設(shè)值)

Part  Deploying a PHP (Laravel) application to Amazon ECS

點(diǎn)選建立。

檢查服務(wù)狀態(tài)

服務(wù)可能需要幾分鐘才會顯示在服務(wù) 表中。如果您沒有立即看到新服務(wù),請稍等一下,然後重新整理頁面。

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

部署錯(cuò)誤顯示如下:

Part  Deploying a PHP (Laravel) application to Amazon ECS

要偵錯(cuò)部署錯(cuò)誤,請開啟服務(wù),然後按部署標(biāo)籤;向下捲動至 Events 部分,然後按一下最近啟動的任務(wù)的 ID。任務(wù)執(zhí)行的日誌部分將向您顯示有關(guān)出錯(cuò)原因的更多詳細(xì)資訊。

Laravel 通常會抱怨儲存資料夾結(jié)構(gòu)不完整(例如,缺少框架、快取、會話之一)。我們將在單獨(dú)的教程中了解如何將 EFS 磁碟區(qū)附加到任務(wù)定義來解決此問題。

將網(wǎng)域連接到服務(wù)

您可能想要將網(wǎng)域連接到我們剛剛部署的服務(wù)。在前面的步驟中,我們已經(jīng)建立了一個(gè)應(yīng)用程式負(fù)載平衡器,它是負(fù)責(zé)將網(wǎng)路流量路由到服務(wù)的 AWS 元件。

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

要完成該過程並使您的應(yīng)用程式能夠透過 HTTPS 從公共互聯(lián)網(wǎng)訪問,您需要建立一條 DNS 記錄,將您的網(wǎng)域指向負(fù)載平衡器。此過程會有所不同,具體取決於您使用的 DNS 提供者;請參閱他們的文件以獲取更多資訊。

首先取得應(yīng)用程式負(fù)載平衡器的 DNS 名稱。導(dǎo)覽至 AWS 控制臺中的搜尋列(macOS 上的選項(xiàng) S),輸入負(fù)載平衡器,然後選擇 負(fù)載平衡器(EC2 功能)。您將看到一個(gè)表格,其中包含我們需要將網(wǎng)域連接到的負(fù)載平衡器:

Part  Deploying a PHP (Laravel) application to Amazon ECS

複製負(fù)載平衡器的 DNS 名稱。

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

  • 導(dǎo)覽至 Route 53 控制臺,按一下 託管區(qū)域,然後選擇您的網(wǎng)域。
  • 點(diǎn)選建立記錄按鈕。
  • 將記錄類型設(shè)定為A.
  • 選取別名選項(xiàng)。
  • 將流量路由到欄位中,選擇應(yīng)用程式和經(jīng)典負(fù)載平衡器的別名,然後選擇負(fù)載平衡器的區(qū)域。
  • 選擇負(fù)載平衡器下拉清單中,選擇我們需要將網(wǎng)域連接到的負(fù)載平衡器。如果您有多個(gè)負(fù)載平衡器,請檢查從下拉清單中選擇的負(fù)載平衡器必須與我們先前複製的負(fù)載平衡器的 DNS 名稱相符。
  • 關(guān)閉評估目標(biāo)健康狀況
  • 點(diǎn)選建立記錄。

如果您不使用 53 號公路:

請參閱您的 DNS 提供者的文件以了解更多資訊。您可能需要建立一條 CNAME 記錄,將負(fù)載平衡器的 DNS 名稱作為其目標(biāo)/值。

恭喜你

建立 DNS 記錄後,等待幾分鐘讓它傳播,然後嘗試透過網(wǎng)域名稱存取您的應(yīng)用程式。

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

本教學(xué)系列即將推出

  • 將 EFS 磁碟區(qū)附加到任務(wù)定義以修正 Laravel 的儲存資料夾結(jié)構(gòu)問題
  • 使用 AWS CodePipeline 自動將新程式碼部署到服務(wù)
  • 使用 AWS CDK 自動化基礎(chǔ)架構(gòu)配置

以上是將 PHP (Laravel) 應(yīng)用程式部署到 Amazon ECS 部分的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量範(fàn)圍解釋了 PHP變量範(fàn)圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次並在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助於避免錯(cuò)誤並提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來源與類型、控製文件名與路徑、設(shè)置服務(wù)器限制並二次處理媒體文件。 1.驗(yàn)證上傳來源通過token防止CSRF並通過finfo_file檢測真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串並根據(jù)檢測類型決定擴(kuò)展名存儲至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關(guān)鍵在於明確目的與規(guī)範(fàn),註釋應(yīng)解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統(tǒng)一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背後的原因,如說明為何需手動輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問題,便於後續(xù)追蹤與協(xié)作。好的註釋能降低溝通成本,提升代碼維護(hù)效率。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出範(fàn)圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長度,動態(tài)字符串需驗(yàn)證有效性,多語言項(xiàng)目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles