簡體   English   中英

部署到負載均衡器后面的EC2實例; PHPStorm + GitHub

[英]Deploying to EC2 instances behind a load balancer; PHPStorm + GitHub

我知道這在很多地方都得到了部分回答,但是答案是..遍及整個地圖,已過時且未得到很好的解釋。 我正在尋找截至2016年2月的最佳做法

設置:

駐留在EC2實例中的基於PHP的RESTful應用程序服務。 EC2實例使用S3來上載用戶數據(圖像文件),並使用RDS MySql為其數據庫(這兩點並不是特別重要)。

我們使用PHPStorm開發,源代碼控制為GitHub。 部署時,我們僅使用PHPStorm的內置SFTP部署將文件直接上傳到EC2實例(我們有一個用於暫存環境的實例,另一個用於生產環境的實例)。 我部署到舞台非常頻繁。 可能一天20次。 我只需單擊PHPStorm中的文件,然后說“部署到暫存”,即可進行SFTP傳輸。 或者,我可能只單擊整個項目,然后單擊“部署到暫存”-某些文件夾和文件從上傳中排除,這是PHPStorm部署配置的一部分。

最近,我將EC2實例放在負載均衡器后面。 我這樣做是為了可以通過證書管理器利用Amazon的免費SSL產品,該服務不支持單個EC2實例。

因此,現在,有一個負載均衡器,后面只有一個EC2實例。 我維護一個指向EC2實例的彈性IP,以便可以直接訪問它(請參閱上面的當前部署方法)。

題:

我還沒有膽量在我的負載均衡器后面創建其他(克隆)EC2實例,因為我不確定應該如何部署到它們。 我想到了一些主意,但它們都非常笨拙。

在上述情況下,當前最流暢,最好的方法是A)將代碼庫快速部署到負載均衡器后面的一組EC2實例,以及B)實際上“克隆”我當前的EC2實例以創建其他實例。

盡管我已經提出了一些(非常技術性的)建議,但我仍無法真正清晰地描繪出上述內容。

謝謝!

您需要將您的EC2實例視為100%不需要的。 意思是,它可以隨時終止,您不必擔心。 替換的EC2實例將啟動並接管工作。

有3種方法可以實現此目的:

方法1:每個部署都創建一個新的AMI映像。

部署應用程序時,將其部署到工作人員EC2實例,其唯一目的是“設置”應用程序。 部署新版本后,您可以從EC2實例創建新的AMI映像,並使用新的AMI映像更新Auto Scaling啟動配置。 舊的EC2實例將終止,並用新代碼替換。

新的EC2實例上已經有最新代碼,因此可以將它們添加到負載均衡器中。

方法2:每個部署都針對實例外存儲(如Amazon S3)完成。

EC2實例將從Amazon S3下載最新代碼,並在啟動時進行安裝。

因此,要使新代碼生效,請終止舊實例,並啟動新實例以替換使用新代碼開始的實例。

這可以滾動更新的方式完成,也可以以藍色/綠色部署的方式完成。

方法3:與方法2相似,但是這次實例具有一些智能,可以用信號通知他們下載並安裝代碼。

這樣,您無需終止實例:告訴現有實例從S3更新,並且它們自己進行。

一些可能有用的工具包括:

  • 廚師
  • Ansible
  • CloudFormation

更新:

方法2和方法3均以“基本” AMI開始,該AMI配置為從S3中提取網頁資產。 此AMI不會在您的網站的版本之間進行更改。

例如,AMI可以已經安裝了Apache和PHP,並且在啟動時將AMI中的.php網站資產從S3中提取出來,並將它們放在/var/www/html

CloudFormation為此很好地工作。 此外,對於方法3,可以使用cfn-hup等待更新信號。 收到信號后,它將從S3中提取更新的資產。

另一種可能性是使用Elastic Beanstalk,它可以用來為您管理所有這些。

更新:

要從Git中提取AMI圖像,請嘗試以下操作:

  1. 設置一個EC2實例,其中已安裝了您需要為Web應用安裝的所有內容
  2. 安裝Git並設置本地存儲庫以准備進行Git pull
  3. 關閉並創建實例的AMI。

部署時,請執行以下操作:

  1. Git push送到GitHub
  2. 根據您的AMI映像啟動一個新的EC2實例。

作為用戶數據的一部分(在EC2實例啟動期間指定),請指定以下內容:

#!/bin/sh
cd /git/app
git pull
; copy files from repo to web folder
composer install

這樣做后,該用戶數據將充當腳本,該腳本將在首次引導時運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM