2016-11-23 133 views
2

我的node.js應用程序由兩部分組成,一個表達後端和一個響應前端。Elastic Beanstalk運行後部署腳本

我在這個結構中的兩個的package.json文件

package.json 
/app/package.json 

我想要做的就是在我的前端文件夾,應用程序,即建立我的代碼運行的腳本。

我想運行的腳本是npm installnpm run build 如何在部署發生後運行此腳本?

commands: 
    01_app_npm_install: 
     command: npm install 
     cwd: app/ 
    02_app_npm_build: 
     command: npm run build 
     cwd: app/ 

但它返回一個錯誤,說「沒有這樣的文件或直銷 保守黨:‘應用程序/’。」

這是可能的,以在AWS上做彈性魔豆?

回答

1

感謝@gustaf和其他一些網站,我設法把解決方案放在一起。它不漂亮,但它的工作原理。

我創建了一個文件.ebextensions/01_build.config

commands: 
    create_post_dir: 
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post" 
    ignoreErrors: true 
files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     cd /var/app/current/app/ 
     sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm install 
     sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm run build 

硬編碼的節點版本是不完美的,但它適用於現在。

+0

我不認爲你需要創建該目錄,它應該已經在那裏。我不必在python環境中這樣做。如果你願意的話,你顯然也可以將一個文件移動到container_commands中的那個目錄中。 – Gustaf

0

如果您參考文檔,你會發現,container_commands是你應該把應用程序相關的東西。

該文件是基於各個部分的首選項執行的,commands是第一個,container_commands是最後一個。在此階段,應用程序尚未複製到所需位置(/var/app/current)。

此外,如果您設置環境變量,這些將提供給您只container_commands

+0

即使我將其更改爲container_commands,它仍然無法找到目錄app /。 我在.ebextensions目錄下有.config文件,是否正確? –

4

我還沒有自己的NodeJS做有彈性魔豆,但我已經做了很多的Django的。

commands:部分運行項目文件都到位了。例如,您可以在這裏安裝服務器軟件包。

container_commands:部分在將文件放入其最終目標(對於nodejs來說,它是/ var/app/current)之前在暫存目錄中運行。在這裏,您可以根據需要修改文件。

參考上面: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

您還可以運行後部署腳本。這沒有很好的記錄(至少不是)。你可以這樣做:

files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh": 
     mode: "000755" 
     owner: root 
     group: root 
     content: | 
      #!/usr/bin/env bash 
      service httpd restart 
相關問題