我有一個配置了生產代碼設置的AMI。我使用Nginx +獨角獸作爲服務器設置。 我面臨的問題是,無論何時流量增加,我需要將實例登錄到實例中,並執行git pull,捆綁更新以及預編譯資產。這很耗時。所以我想避免所有這些過程。在啓動時捆綁服務器更新的最佳方式
現在我想要一個腳本/過程,我可以自動完成整個部署過程,比如從這個AMI啓動一個新實例時,就像git pull,軟件包更新和預編譯一樣。
有沒有最好的方法來完成這個過程?任何幫助,將不勝感激。
我有一個配置了生產代碼設置的AMI。我使用Nginx +獨角獸作爲服務器設置。 我面臨的問題是,無論何時流量增加,我需要將實例登錄到實例中,並執行git pull,捆綁更新以及預編譯資產。這很耗時。所以我想避免所有這些過程。在啓動時捆綁服務器更新的最佳方式
現在我想要一個腳本/過程,我可以自動完成整個部署過程,比如從這個AMI啓動一個新實例時,就像git pull,軟件包更新和預編譯一樣。
有沒有最好的方法來完成這個過程?任何幫助,將不勝感激。
你可以將你的代碼放在/etc/rc.local中(當服務器被加載時,這個文件中的命令將被執行)。
但最好的方法是使用(capistrano)。您需要將require "capistrano/bundler"
添加到您的deploy.rb文件中,並且軟件包更新將自動運行。欲瞭解更多信息,你可以閱讀這篇文章:https://semaphoreapp.com/blog/2013/11/26/capistrano-3-upgrade-guide.html
另一種方法是將您的應用部署到一個單獨的EBS卷(你仍可以掛載這裏面的/ var /網絡/應用程序或無論它目前是)
部署完成後,您將創建此卷的EBS快照。當你創建一個新的實例時,你告訴ec2從快照中爲你的實例創建一個新的卷,所以實例將以已安裝的最新的gems /代碼開始(我發現bundle安裝可能需要幾分鐘)。您的所有啓動腳本需要執行的操作是安裝卷(或者,如果您在創建ami時將其添加到fstab中,那麼您甚至不需要這樣做)。我更喜歡使用這種擴展操作來實現無依賴關係(例如,如果github或rubygems只是在需要部署時纔會停機,你會怎麼做)
你甚至可以通過使用亞馬遜的自動調節服務來進一步做到這一點。簡而言之,您將創建一個啓動配置,您可以在其中指定ami,實例類型,卷快照等。然後,根據固定的計劃或基於cloudwatch指標手動(通過Web控制檯或api)控制組大小。 Amazon將根據需要使用啓動配置中的信息創建或銷燬實例。
'capistrano'有很多任務,你可以編寫捆綁更新/安裝的配方,並重新啓動'獨角獸'(重新啓動kill worker並啓動它們)。 –