Game Server Build

1. AWS Instance Create

  • 사용하는 Server App의 아키텍쳐에 맞추어 인스턴스 생성
  • 무료이고 크게 속도가 필요 없으며 테스트용의 용도에 맞게 t2.micro 로 인스턴스 생성
목록 내용
Provider Amazon AWS
Instance
Machine
Amazon Linux 2023 AMI
Instance
Arcitacture
x86, arm
Instance
Category
t2.micro (free tier)
Instance Spec 1 vCPU, 1 GiB Memory, 8GB Storage

1 - 1. Instace Connect Test

A) Pem Key Change to Permission

  • 최초 발급 받은 pem Key의 경우 거의 다 서버 접근을 하려고 하면 Permission Denied 가 발생하기 때문
daniel@Danielui-MacBookPro ~ % ssh -i /Users/daniel/Desktop/GameServer.pem ec2-user@your-server-public-ip

The authenticity of host 'your-server-public-ip' can't be established.

ED25519 key fingerprint is SHA256:bL+C3q646IZa4Eguia79418UHbeMbWowY4by8R9KF7U.

This key is not known by any other names.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added 'your-server-public-ip' (ED25519) to the list of known hosts.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Permissions 0644 for '/Users/daniel/Desktop/GameServer.pem' are too open.

It is required that your private key files are NOT accessible by others.

This private key will be ignored.

Load key "/Users/daniel/Desktop/GameServer.pem": bad permissions

ec2-user@52.78.28.10: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
  • pem key의 위치를 확인 후 해당 pem Key의 경로를 입력하거나 Key를 Drag && Drop 하면 된다
daniel@Danielui-MacBookPro Desktop % chmon 400 /Users/daniel/Desktop/GameServer.pem
$ cmod 400 pemKey-path

B) Server Connect

  • Key 권한 설정이 끝났다면 해당 Pem 키를 이용해 서버에 접속하자
  • AWS Server의 경우 다음과 같이 접근할 수 있다
$ ssh -i pemKey-Path ec2-user@public-IP
  • AWS Linux의 경우 볼수 있는 접속 화면
daniel@Danielui-MacBookPro Desktop % ssh -i /Users/daniel/Desktop/GameServer.pem ec2-user@your-server-public-ip

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'

2. Node JS Engine Install

  • AWS Instance의 경우 처음 인스턴스 생성시 비어있기 때문에 세팅일 필요
  • 지금 필요한 Program은 다음과 같다
    • Node JS App
    • postgresql DataBase
    • 무중단 배포를 위한 PM2

Node 설치

  • 현재 LTS버전 보다 많이 떨어질 수 있는 패키지가 설치 될 수 있으니 호환성을 체크하기를 요망

A) node 설치 전 Instance의 설치 가능한 Package Manager를 업데이트 해준다

  • AWS Linux의 경우 yum을 사용한다
sudo yum update -y
  • sudo : 관리자 권한
  • yum : Package Manager
  • update : 명령
  • -y : 중간 중간 의사를 묻는 분기가 나오는데 이떄 모두 일관 yes 처리를 하겠다는 보조명령어
    (작성한하면 분기에서 멈추어 의사를 물어봅니다.)

B) 설치 가능한 패키지 보기

  • 전체 설치 가능한 리스트를 보려면
  • 직접 실행해보면 엄청나게 많은 리스트가 나온다
yum list available

  • 원하는 설치 파일 목록만 보기
sudo yum available | grep 패키지이름

여기서는 버전 이슈에 대응하기 위해 별도의 NVM을 설치하기로 함

nvm Github해당 링크에서 최신 nvm 버전을 확인하여 url을 통해 인스턴스에 직접 설치 하기로 한다

  • Linux 의 경우 두개 다 사용 가능하다 여기서는 두번째 wget링크를 이용한다
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

  • 설치 이후 변경사항을 적용 시켜준다
[ec2-user@ip-172-31-38-37 ~]$ source ~/.bashrc
  • nvm 으로 최신 Node JS LTS 버전 설치하기
[ec2-user@ip-172-31-38-37 ~]$ nvm install --lts
  • 만약 원하는 버전이 있다고 하면
# node의 버전을 명시
nvm install 18.14.0

# LTS에 아닌 제공하는 최신버전
nvm install node

  • 설치된 Node 및 npm Version 확인
node -v
npm -v

Node 프로젝트 인스턴스에 옮기기

  • 많은 방법이 있지만 FileZilla를 이용한 방법으로 Node JS 프로젝트를 Instance에 설치 해보겠습니다.

A) File Zilla Install

  • 좌측 상단에 사이트관리자를 선택하고
  • 관리자 화면에서 새 사이트 생성

  • 우측 세팅
  • 프로토콜 : SFTP - SSH File Transfer Protocol
  • 호스트 : 인스턴스 접근 Public IP (포트 공란)
  • 로그온 유형 : 키 파일
  • 사용자 : ec2-user
  • 키 파일 => 찾아보기 => pem Key File Path

  • 연결 상태

  • 이곳에서 Local 위치에서 제작한 프로젝트를 해당 Ec2 Instance에 Drag && Drop 방식으로 파일을 옮길 수 있습니다. ❗️ 경로는 특별한 이유가 없다면 ec2-user Path 에서 하시기를 권장 드립니다.
  • 파일 전송이 끝났다면 인스턴스에 정상적으로 들어왔는지 확인 합니다.
# 해당 인스턴스 Path에 있는 목록 출력
ls

Server Test

  • 여기 까지 모두 완료 하였다면 해당 프로젝트를 실행 하고 web에서 접속 시도를 해봅니다.

  • 웹에서도 접속 시도를 해봅니다

  • 네 접속이 되지 않습니다.
  • AWS의 보안 탭을 확인해 봅니다.

  • 인바운드 규칙 중에 지금 Node 프로젝트의 Port인 3000 을 설정 하지 않았습니다.
  • 인바운드 규칙 편집으로 설정해 줍니다.

  • 다시 접속을 시도 합니다.

  • 정상적으로 접속 되는 것을 확인 합니다.

Client And Server Test

  • 서버가 확인 되었다면 Client와 연결해 봅니다
  • 먼저 Client의 접속 TCP 를 수정합니다

  • 제대로 접속 되는 것 까지 확인이 완료 되었습니다.