亚洲国产日韩欧美一区二区三区,精品亚洲国产成人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

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

使用 Docker 和 ECR

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

在 git 存儲(chǔ)庫的根目錄中,創(chuàng)建一個(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;
    }
}

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

將圖像推送到 Amazon ECR

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

創(chuàng)建 ECR 存儲(chǔ)庫

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

將鏡像推送至ECR

選擇您剛剛創(chuàng)建的存儲(chǔ)庫,單擊查看推送命令,然后在終端中運(yùn)行命令。命令將如下所示(確保選擇正確的區(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 控制臺(tái),進(jìn)入存儲(chǔ)庫,并確認(rèn)鏡像已成功推送,標(biāo)簽為latest。

Part  Deploying a PHP (Laravel) application to Amazon ECS

使用 Amazon ECS

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

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

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

向下滾動(dòng)到 Container - 1 部分,然后輸入以下值:

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

創(chuàng)建ECS集群

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

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

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

暫時(shí)不要點(diǎn)擊創(chuàng)建。

添加負(fù)載均衡器

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

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

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

向下滾動(dòng)到負(fù)載均衡部分,選擇應(yīng)用程序負(fù)載均衡器,然后選擇選項(xiàng)創(chuàng)建新的負(fù)載均衡器。

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

調(diào)整以下值:

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

點(diǎn)擊創(chuàng)建。

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

服務(wù)可能需要幾分鐘時(shí)間才會(huì)顯示在服務(wù) 表中。如果您沒有立即看到新服務(wù),請(qǐng)稍等一下,然后刷新頁面。

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

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

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

將域名連接到服務(wù)

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

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

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

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

Part  Deploying a PHP (Laravel) application to Amazon ECS

復(fù)制負(fù)載均衡器的 DNS 名稱。

如果您使用 53 號(hào)公路,請(qǐng)按照以下說明操作:

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

如果您不使用 53 號(hào)公路:

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

恭喜你

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

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

本教程系列即將推出

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機(jī)

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版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量范圍解釋了 PHP變量范圍解釋了 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檢測(cè)真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串并根據(jù)檢測(cè)類型決定擴(kuò)展名存儲(chǔ)至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

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

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

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

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過于簡(jiǎn)單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背后的原因,如說明為何需手動(dòng)輸出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中獲取字符串特定索引字符可用方括號(hào)或花括號(hào),但推薦方括號(hào);索引從0開始,超出范圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長度,動(dò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

易于效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles