거창하게 만들지 않고 초간단하게 맥미니에서 AWS에 업로드하는 스크립트와 AWS에서 올려진 소스코드를 압축풀고 서버 재시작하는 스크립트를 작성했다.
./upload_nestserver_toaws.sh
#!/bin/sh
today=$(date +"%Y%m%d_%H%M%S")
suffix=$1
# only filename
key=nest_server_${today}_${suffix}
filename=${key}.tar.gz
echo "# create $filename"
git archive --format=tar.gz -o $filename HEAD:nest_server
echo "# mv to ~/backend/azure"
mv ./$filename ~/backend/azure
cd ~/backend/azure
echo "# create upload_command.txt"
echo "cd source_nest_server\\nput $filename" > upload_command.txt
echo "# upload $filename to AZURE"
sftp -i azure_backend1_key.pem -b upload_command.txt ec2-user@azure.mdiwebma.com
echo "# rm $filename"
rm $filename
# 서버 사이드에서 소스 압축풀고 npm 설치후에, 기존 서버 종료후, 새 서버를 재시작
ssh -i azure_backend1_key.pem ec2-user@azure.mdiwebma.com "cd ~/source_nest_server && ./deploy_source.sh ${key}"
--6/25 업데이트: ssh로 원격 명령 실행으로 업로드와 서버 재시작까지 스크립트 하나로 동작하도록 했다.--
하루에 여러번 배포하더라도 초단위로 폴더가 생성되므로 문제가 없다. 원하다면 뒤에 피처이름을 적어줄 수 있다. ./upload_nestserver_toaws.sh feature1 로 실행한다. ssh로 명령실행후에 계속 접속을 유지하고 있는 건 어쩔 수 없을 것 같다.
적절히 스크립트를 재조정한다면 여러 서버에 동시에 소스 배포도 가능하다.
~/source_nest_server/deploy_source.sh
vm에서 새로운 소스 압축을 풀고, 새로운 소스에서 서버를 재 지삭하는 코드이다.
#!/bin/sh
dir=$1
filename=$1.tar.gz
if [ -e $filename ]
then
rm -rf $dir
mkdir $dir
mv $filename $dir
cd $dir
tar xvf $filename
rm $filename
echo "bun install"
~/.bun/bin/bun install
cd ~/nest_server
./stop_server.sh
cd ~/
rm ~/nest_server
ln -s ~/source_nest_server/$dir ~/nest_server
cd ~/nest_server
./start_server.sh
fi