깜놀하는 해므찌로

bash deploy 배포 방법 예시 본문

IT

bash deploy 배포 방법 예시

agnusdei1207 2023. 8. 21. 13:43
반응형
SMALL

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 파일


2. `HOST=123.123.123.7`: 배포할 서버의 IP 주소를 `HOST` 변수에 할당합니다. `123.123.123.7`는 예시로 주어진 실제 IP 주소이며, 배포하려는 서버의 IP 주소로 변경되어야 합니다.

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

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

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

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

7. `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` 디렉토리 내용을 모두 삭제하는 명령입니다.

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

9. `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` 명령을 사용하여 디렉토리 전체를 서버로 복사합니다.

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

반응형
LIST