文章彙整

AWS CodeDeploy 佈屬你的網站,簡單又快速

Astral WebBy Astral Web 3 weeks agoNo Comments
首頁  /  網站設計與開發  /  後端開發  /  AWS CodeDeploy 佈屬你的網站,簡單又快速

 

AWS CodeDeploy-佈署你的網站,簡單又快速

DevOps在當今是個流行與受歡迎的角色與文化,大部份工程師或多或少也都會碰到架構與佈署的問題。而在佈署程式碼一定也聽過各式各樣的方式,尤其是在尚未建立完善的CI/CD流程時,像是直接上SERVER下git pull、利用rsync、甚至用ftp上傳、或是其他不同方式以及各種互相搭配等等。

而CodeDeploy是在AWS在佈署上提供的其中一種方案,且簡單使用,對於IT人員也較為直覺。

相關的服務還包括CodeCommit、CodePipline、CodeBulid等等,
以下本文及流程只會使用CodeDeploy來做說明。

流程與概念

CodeDeploy的概念就是為了讓使用者能夠編寫定義整個佈署所需的指令及流程甚至一些繁複的事務,定義完之後未來只需要只要把需要佈署的code放在github或aws codeCommit,或壓縮打包放上aws S3等等,再來簡單的一個指令,就能自動完成佈署。

而CodeDeploy會需要一個appspec.yml來定義這些佈署階段事件。

以下範例會用壓縮打包上S3的方式來說明,其他如從github拉code的方式相較更為簡單,只需在參數中加入github的repository及commit hash即可。

實作會需要包含如下:

  • 定義appspec.yml
  • 編寫appspec.yml中各階段事件的指令或shell script
  • 打包佈署所需的檔案並壓縮為zip,
    此壓縮檔中第一層需包含appspec.yml
  • 編寫打包以及下達aws deploy指令的script方便以後佈署

佈署開始時會依照以下事件階段進行:
enter image description here


定義appspec.yml

./appspec.yml範例

files字段是定義檔案及佈署的路徑

  • source 表示的是zip檔內的路徑,例如/表示整個zip內資料
  • destination 表示的是要把source丟到server機器的哪裡

hooks字段表示的就是各事件階段

version: 0.0 
os: linux 
files: 
  - source: / 
    destination: /var/www/html/
hooks:
  BeforeInstall: 
    - location: scripts/docker_pull.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/clean_dirs.sh
      timeout: 300
      runas: root
  ApplicationStart: 
    - location: scripts/docker_run.sh
      timeout: 300 
      runas: root 
  ApplicationStop: 
    - location: scripts/docker_stop.sh 
      timeout: 300 
      runas: root
~

編寫appspec.yml中各階段的指令或shell script

./script/docker_run.sh範例

此處我們只提供ApplicationStart事件的定義,可以看到只需編寫所需執行的shell script即可
其他事件也是如此,請定義出自己需要的指令

而此處我們是直接使用command來執行docker run,當然也可以改為docker-compose up -d來使用定義好的docker-compose.yml執行docker。

#!/bin/bash
docker run -d \
		--name fpm \
		--network=magento \ 
		-v /var/www/html:/app \ 
		magento/magento-cloud-docker-php:7.0-fpm
docker run -d \ 
		--name web \ 
		--network=magento \ 
		-p 0.0.0.0:80:80/tcp \ 
		-v /var/www/html:/app \ 
		magento/magento-cloud-docker-nginx:latest

編寫打包以及下達aws deploy指令的script方便以後佈署

./aws-deploy.sh

#/bin/bash
 
# go to magento web root 
cd /var/www/html 

# put the date in the filename to make it unique filename=magento2-$(date '+%Y%m%d%H%M%S').tar.gz 

# make archive, exclude some stuff 
tar -Ipigz -cvf ../${filename} \
  --exclude='pub/media' \
  --exclude='pub/static/_cache' \
  --exclude='var' \
  --exclude='.git' \
  --exclude='var/log' \
  --exclude='var/report' \
 .

# copy archive to s3 
aws s3 cp ../${filename} s3://niuniu-production/

# create deployment
aws deploy create-deployment \
  --application-name magento2 \
  --deployment-config-name CodeDeployDefault.OneAtATime \
  --deployment-group-name magento2 \
  --s3-location bucket=niuniu-production,bundleType=tgz,key=${filename}

# cleanup 
rm ../${filename}
cd -

喜歡本次分享的讀者們,別忘了追蹤歐斯瑞臉書粉絲團Instagram 以及訂閱歐斯瑞電子報唷!

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Categories:
  後端開發網站設計與開發

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。