Bash Deploy

agnusdei·2023년 7월 5일
0
post-custom-banner


0. 프로젝트 최상단 라인에 배포를 실행할 sh 및 pem 확장자 파일 생성

#!/bin/bash

HOST=123.123.123.7

echo "🚀 페이지 배포를 시작합니다."

echo "🛠️ 프로젝트를 빌드합니다."

nx build landing

if [ $? -eq 0 ]
then
  echo "✅ 프로젝트 빌드를 성공했습니다."
else
  echo "🚫 프로젝트 빌드를 실패했습니다. 배포를 종료합니다."
  exit 1
fi

echo "📁 빌드된 파일을 서버에 전송합니다."

ssh -i scripts/private_key.pem -o StrictHostKeyChecking=no ubuntu@$HOST "rm -rf /home/ubuntu/landing/*"
ssh -i scripts/private_key.pem -o StrictHostKeyChecking=no ubuntu@$HOST "mkdir -p /home/ubuntu/landing"
scp -i scripts/private_key.pem -o StrictHostKeyChecking=no -r dist/packages/landing/* ubuntu@$HOST:/home/ubuntu/landing

if [ $? -eq 0 ]
then
  echo "✅ 파일 전송을 성공했습니다."
else
  echo "🚫 파일 전송을 실패했습니다. 배포를 종료합니다."
  exit 1
fi

echo "🚀 배포가 완료되었습니다."
  1. deploy_landing.sh 파일
  1. HOST=123.123.123.7: 배포할 서버의 IP 주소를 HOST 변수에 할당합니다. 123.123.123.7는 예시로 주어진 실제 IP 주소이며, 배포하려는 서버의 IP 주소로 변경되어야 합니다.

  2. nx build landing: nx라는 도구를 사용하여 landing이라는 프로젝트를 빌드합니다. nx build 명령은 프로젝트를 빌드하는 명령입니다. 빌드된 파일은 dist/packages/landing 디렉토리에 생성됩니다.

  3. if [ $? -eq 0 ]: 이전 명령의 종료 상태를 확인하기 위한 조건문의 시작입니다. $?는 이전 명령의 종료 상태(exit status)를 나타내며, 0은 성공을 의미합니다. 이 조건문은 이전 빌드 명령이 성공했는지를 확인합니다.

  4. echo "🚫 프로젝트 빌드를 실패했습니다. 배포를 종료합니다.": 이전 빌드 명령이 실패한 경우에 실행되는 블록입니다. 화면에 메시지를 출력하여 "프로젝트 빌드를 실패했습니다. 배포를 종료합니다."를 표시합니다.

  5. exit 1: 스크립트를 종료하고 종료 코드(exit code)를 1로 설정합니다. 1은 일반적으로 실패를 나타내는 코드입니다.

  6. ssh -i scripts/private_key.pem -o StrictHostKeyChecking=no ubuntu@$HOST "rm -rf /home/ubuntu/landing/*": SSH를 통해 $HOST 변수에 지정된 서버에 연결합니다. scripts/private_key.pem 파일은 인증에 사용되는 개인 키입니다. 해당 명령은 서버의 /home/ubuntu/landing 디렉토리 내용을 모두 삭제하는 명령입니다.

  7. ssh -i scripts/private_key.pem -o StrictHostKeyChecking=no ubuntu@$HOST "mkdir -p /home/ubuntu/landing": SSH를 통해 $HOST 변수에 지정된 서버에 연결하고, /home/ubuntu/landing 디렉토리를 생성하는 명령입니다.

  8. scp -i scripts/private_key.pem -o StrictHostKeyChecking=no -r dist/packages/landing/* ubuntu@$HOST:/home/ubuntu/landing: scp 명령을 사용하여 로컬의 dist/packages/landing 디렉토리의 파일들을 SSH를 통해 $HOST 변수에 지정된 서버의 /home/ubuntu/landing 디렉토리로 복사합니다. -i는 인증에 사용할 개인 키 파일을 지정하고, -o StrictHostKeyChecking=no는 호스트 키 확인을 비활성화합니다.

아래는 -i, -o, -r 옵션의 각각의 의미를 설명합니다:

  1. -i: SSH 인증에 사용할 개인 키를 지정하는 옵션입니다. 일반적으로 SSH 접속 시에는 비밀번호 대신 개인 키를 사용하여 인증하는 경우가 많습니다. -i 옵션 다음에는 개인 키 파일의 경로가 지정됩니다.

  2. -o: SSH 클라이언트의 옵션을 설정하는 옵션입니다. -o 옵션 다음에는 SSH 클라이언트 설정 옵션을 지정합니다. 예를 들어, StrictHostKeyChecking=no는 호스트 키 확인을 비활성화하는 옵션입니다. 일반적으로 호스트 키 확인은 SSH 접속 시에 호스트의 신뢰성을 검증하기 위해 수행되지만, 이 옵션을 사용하면 호스트 키 확인 과정을 건너뛸 수 있습니다.

  3. -r: scp 명령에서 사용되는 옵션으로, 디렉토리를 재귀적으로 복사할 때 사용됩니다. -r 옵션을 사용하지 않으면 디렉토리가 아닌 파일에 대해서만 복사 작업이 수행됩니다. -r 옵션을 사용하여 디렉토리를 복사하면 해당 디렉토리의 내용을 모두 복사합니다.

위의 스크립트에서는 이러한 옵션들을 사용하여 SSH 연결에 개인 키 파일을 사용하고, 호스트 키 확인을 비활성화하며, scp 명령을 사용하여 디렉토리 전체를 서버로 복사합니다.

이 방법은 아주 원시적인 서버 배포 방법이자 동시에 매우 강력하고 직관적이며 편리한 방식이기도 합니다.

post-custom-banner

0개의 댓글