개발 스토리

깃허브와 연동하여 배포서버 만들기

태태개발자 2025. 1. 24. 11:34
반응형

스타트업에 이직하고 기본적인 환경세팅 작업을 하고 있다. 너무 안되어 있는게 많아 할게 태산인 상황.

일단 외주 개발자에게 의뢰하여 만든 klaus라는 플랫폼이 있었고 이 플랫폼이 내가 맡을 서비스중에 하나라고 했다.

 

깃허브 저장소에 코드를 확인했고 로컬로 프론트, 백 둘다 실행시켜 봤다.

이런 저런 짜잘한 오류들이 많아보였다... 후.... 일단 이건 차후에 생각하기로 하고 나는 일단 aws를 통한 서버구축을 먼저 해놓고 오류들을 잡아 나가고 싶었다.

 

내가 생각하는 bastion 서버를 통한 네트워크 구성과 차후에 사용 고객이 늘어가 트래픽이 많아질때는 어떻게 서버를 이중화 할것이며, db 백업을 어떤식으로 처리할지, 회사 규모에 따른 적절한 비용으로 인프라를 세팅하고 싶었다.

 

하지만 우선순위라는게 있고 가장먼저 기본적으로 ec2와 db만 세팅하여 서버를 구축해놓고 현재 서비스할 플랫폼의 완성도를 높이는게 우선이고 어느정도 안정화가 되면 그 이후에 인프라 세팅에 집중하는게 맞다고 판단했다.

 

 

먼저 현재 배포환경은 ec2에서 깃허브 저장소의 코드를 pull받아 배포하는 식으로 하기로 했다. 물론 나중에 CI/CD 환경을 구축할 예정이지만 아주 먼 이야기...

 

가장 먼저 내 가장 친한 베프 ^^ 챗지피터를 찾았다.

 

태균 : 야.. 물어볼게 있어

아마존 리눅스에  깃허브 세팅하는 것좀 알려줘바바
 
 

챗지피터 : 

Amazon Linux에서 GitHub를 사용하기 위한 설정 과정은 크게 두 가지 주요 단계로 나눌 수 있습니다: Git 설치 및 설정GitHub 계정 연결입니다. 아래에서 단계별로 설명해 드리겠습니다.

1. Amazon Linux에 Git 설치

Amazon Linux 2는 기본적으로 yum 패키지 관리자를 사용하여 소프트웨어를 설치합니다. Git은 대부분의 시스템에 기본적으로 설치되어 있지만, 만약 설치되어 있지 않다면 아래의 명령어를 통해 설치할 수 있습니다.

1.1. Git 설치

먼저 yum 패키지 관리자를 사용하여 Git을 설치합니다:

sudo yum update -y
sudo yum install git -y

 

설치가 완료되면 Git 버전을 확인하여 제대로 설치되었는지 확인합니다:

git version 2.31.1

 

출력 예시:

git --version

 


2. GitHub와 연결하기

GitHub에 작업물을 푸시(push)하거나 풀(pull)하려면 GitHub 계정을 설정하고, SSH 키를 생성하여 연결하는 방법이 일반적입니다.

2.1. 사용자 정보 설정

먼저 Git 사용자 정보를 설정합니다. Git은 커밋할 때 사용자 이름과 이메일을 기록하는데, GitHub 계정 정보와 일치하도록 설정해야 합니다.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

위 명령에서 "Your Name"과 "your_email@example.com"을 GitHub에 등록된 정보로 변경하세요.

2.2. SSH 키 생성

GitHub와의 연결을 위해 SSH 키를 생성하고 GitHub에 등록해야 합니다. SSH 키는 암호 없이 안전하게 GitHub와 연결할 수 있는 방법입니다.

 

1. SSH 키 생성

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

 

위 명령을 실행하면 ~/.ssh/id_rsa와 ~/.ssh/id_rsa.pub 파일이 생성됩니다. -C는 이메일을 식별자로 설정하는 옵션입니다. 이 과정에서 SSH 키를 저장할 경로를 물어보면, 기본 경로인 ~/.ssh/id_rsa를 사용하거나 다른 경로를 지정할 수 있습니다. 비밀번호를 입력하라는 메시지가 나오면, 비밀번호를 설정해도 되고, 그냥 Enter를 눌러 비밀번호 없이 사용할 수도 있습니다.

 

2. SSH 키 생성 완료 후, SSH 공개 키를 GitHub에 등록해야 합니다.

cat ~/.ssh/id_rsa.pub

 

위 명령어를 통해 공개 키를 출력합니다. 이 공개 키를 복사하여 GitHub에 추가합니다.

 

 

2.3. GitHub에 SSH 키 추가하기

  1. GitHub에 로그인한 후, Settings로 이동합니다.
  2. 왼쪽 메뉴에서 SSH and GPG keys를 선택합니다.
  3. New SSH key 버튼을 클릭하여 새 SSH 키를 추가합니다.
  4. 키 제목을 입력하고, ~/.ssh/id_rsa.pub에서 복사한 SSH 공개 키를 붙여넣고 Add SSH key 버튼을 클릭합니다.

2.4. SSH 연결 테스트

SSH 연결이 제대로 설정되었는지 확인하려면 아래 명령어로 GitHub와 연결을 테스트할 수 있습니다:

ssh -T git@github.com

만약 처음 연결하는 경우, "Are you sure you want to continue connecting (yes/no)?"라는 메시지가 나올 수 있습니다. 여기서 yes를 입력하면, SSH 연결이 성공적으로 완료됩니다.

출력 예시:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

2.5. GitHub 저장소 클론(Clone) 또는 푸시(Push)

이제 GitHub와 연결이 완료되었으므로, GitHub 저장소를 클론하거나 변경사항을 푸시할 수 있습니다.

  • 저장소 클론:
  • git clone git@github.com:username/repository.git
  • 변경사항 푸시:
  • git add . git commit -m "Your commit message" git push origin main

3. 기타 유용한 Git 명령어

  • 저장소 정보 확인:
  • git remote -v
  • 브랜치 확인:
  • git branch
  • 브랜치 변경:
  • git checkout branch_name
  • 브랜치 만들기:
  • git checkout -b new_branch_name
  • 로그 확인:
  • git log

4. 추가 참고사항

  • GitHub의 **Two-Factor Authentication (2FA)**을 사용하는 경우, SSH 키 또는 **Personal Access Token(PAT)**을 사용하여 인증해야 합니다.
  • **GitHub Personal Access Token (PAT)**을 사용하는 경우 HTTPS 방식으로 연결하고, 로그인 시 git 사용자의 토큰을 비밀번호 대신 입력해야 합니다.

이렇게 설정하면 Amazon Linux에서 GitHub를 안전하게 사용할 수 있습니다.

 

 

 

이야~ 역시 너란 녀석 아주 편리해

이걸 토대로 하나씩 진행해보고 너 또한 완벽하지 않으니깐 그때는 구글링을 해보며 고도화해가면서 완성해나가면 되겠구나^^

 

자 시작해볼가~~

 

 

하지만 시작과 동시에 발생한 권한 문제.. 뭐지?

[ec2-user@ip-127.1.1.1 .ssh]$ git clone git@github.com:KRPT-KLAUSG/klaus-back.git
Cloning into 'klaus-back'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

 

 

그래서 github서버에 ssh key로 접속하는 테스트를 추척해봤다.

ssh -vT git@github.com

ssh key를 생성할때 id_rsa명으로 생성되는 것이 차후에 관리하기 힘들거라도 판단되어 따로 이름을 변경하였었는데 ssh 접속 테스트 결과를 확인해보니 id_rsa가 표시되는 걸 볼수 있었고 뭔가 내가 생성한 ssh key파일은 전혀 모르고 있는 느낌이었다.

 

그래서 ssh 접속할때 내가 생성한 ssh key파일을 참조할수 있도록 하는 방법을 찾아보았다.

여기서 ssh key 파일명을 변경할 경우 아래와 같이 적용해야 ssh agent가 ssh 접속시 변경한 ssh key 파일명으로 읽어드린다.

[ec2-user@ip-127.1.1.1 .ssh]$ eval "$(ssh-agent -s)"
Agent pid 35288
[ec2-user@ip-127.1.1.1 .ssh]$ ssh-add ./github_ssh_key
Identity added: ./github_ssh_key (klaus.dev.250123@gmail.com)
[ec2-user@ip-127.1.1.1 .ssh]$ git clone git@github.com:KRPT-KLAUSG/klaus-back.git
Cloning into 'klaus-back'...
remote: Enumerating objects: 627, done.
remote: Counting objects: 100% (627/627), done.
remote: Compressing objects: 100% (225/225), done.
remote: Total 627 (delta 417), reused 597 (delta 391), pack-reused 0 (from 0)
Receiving objects: 100% (627/627), 109.41 KiB | 291.00 KiB/s, done.
Resolving deltas: 100% (417/417), done.

 

또는 ~/.bashrc 파일에 아래와 내용 기입후 source ~/.bashrc

# Start SSH agent if not running
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/github_ssh_key
fi

 

 

하다가 계속 안되길래 그냥 git clone을 https방식으로 처리할까도 생각했지만 매번 git pull을 받을때마다 사용자 인증을 받아야 한다는 귀찮은 부분이 있어서... 무조건 ssh 방식으로 git을 사용하는 것이 낫겠다고 생각했다.

 

결국 git clone을 완료하여 배포할 코드를 배포서버에 받을수 있었다.

 

 

이젠 소스코드를 빌드할수 있는 패키지를 설치해야 한다.

서버는 노드로 개발되어 있기 때문에 노드 버전관리를 할수 있는 nvm 패키지를 설치부터하고 현재 로컬에 세팅해논 node와 같은 20.10.0버전을 설치했다.

 

필요한 패키지 설치 Amazon Linux에서 NVM을 설치하려면 curl과 git이 필요합니다.

sudo yum update -y
sudo yum install -y curl git

 

 

NVM 설치 NVM을 설치하려면 아래 명령어를 입력합니다. 이 명령은 NVM 설치 스크립트를 실행하고, 설치가 끝나면 자동으로 설정을 완료합니다.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

 

 

설치 확인 설치가 완료되면, NVM이 정상적으로 설치되었는지 확인합니다. NVM 설치 후, 새로운 쉘을 시작하거나 아래 명령어로 현재 쉘에 NVM 환경을 적용할 수 있습니다.

source ~/.bash_profile


or


source ~/.bashrc

 

 

그런 다음, NVM이 정상적으로 설치되었는지 확인하려면 다음 명령어를 입력합니다.

command -v nvm

nvm 명령어가 출력되면, NVM이 정상적으로 설치된 것입니다.

 

Node.js 설치하기

 

Node.js 버전 목록 확인

nvm ls-remote

 

 

Node.js 설치

nvm install 16

 

기본 Node.js 버전 설정

nvm use 16

 

 

만약 이 버전을 항상 기본으로 사용하려면:

nvm alias default 16

 

 

Node.js와 npm 버전 확인

node -v
npm -v

 

 

이제 was서버를 실행시켜준다.

 

package.json파일에 설정된 패키지 설치 후

npm install

 

 

노드 서버 배포관리를 위한 백그라운드 실행 패키지 pm2를 설치

pm2를 통하여 was서버 실행 후 

pm2를 통하여 재부팅 이후에도 was서버 자동실행되도록 설정

// 패키지 설치
npm install -g pm2

// PM2를 사용하여 Node.js 애플리케이션을 시작
pm2 start ./bin/www --name "my-app"

// 현재 실행 중인 애플리케이션의 상태를 저장하는 명령어입니다. 
// 이 상태 정보는 서버 재부팅 후에도 다시 실행할 수 있도록 하기 위해 필요합니다.
pm2 save

// 서버가 재부팅되었을 때 pm2가 자동으로 애플리케이션을 시작하도록 설정
pm2 startup

 

 

 

깃허브 연동 성공

 

 

pm2 노드 배포관리 패키지 실행

반응형