AWS에 node 배포 후 mysql 설치

2023. 11. 16. 22:33프로그래밍

-서론

aws에 작업하던 프로젝트를 배포한다. 클라이언트 환경은 구체적이진 않으나 사용량이 많지않기 때문에 별도의 RDS는 생성하지 않고 프리티어(t2-micro)의 인스턴스에서 로컬에 mysql을 설치 후 배포하기로 한다. 인스턴스 생성과 관련된 것은 생략한다. 저번에 spring으로 배포한 경험이 있다.

 

SSH로 접속하게 되면 해야할 것은 크게 다음과 같이 나뉜다.

1. 서버환경 세팅
2. git config 설정
3. mysql 설치
4. npm 설치
5. 서버에서 프로젝트를 백그라운드로 실행

 

-본론

1. 서버 환경 세팅 

ubuntu 이미지로 인스턴스를 생성했기 때문에 기본적으로 패키지 관리자 apt를 제공한다. apt를 이용해 다음과 같이 패키지 관리자를 최신 상태로 만들어준다.

$ sudo apt-get update

AWS의 ubuntu image에는 git이 포함돼있기 때문에 별도의 설치를 해주지 않아도 된다. 

 

2. git config 설정

 

서버에서는 github repo에 접근해 clone을 받아야 한다. 그러나 이를 위해서는 github 관련 설정 해줘야 한다. 일반적으로는 git config 과정을 통해서 repo에 접근할 수 있는 유저 정보를 등록해줘야 한다. 그러나 이번 프로젝트에서는 외주이기 때문에 고객사가 함부로 우리 레포지토리에 접근하지 못하게 git config 설정을 건너뛰고 github의 classic 토큰을 발급하고 expiration은 1일로 설정한 뒤 작업을 진행했다 -> 사실 서버 문제 있을때마다 접근할 것이기 때문에 다음날 그냥 새로 토큰을 발급했다. 이 때 기존에 있던 토큰으로는 접속이 안될 수 있다. 내가 clone하려는 프로젝트가 생긴 이후에 생성된 토큰이어야 remote에서 해당 프로젝트로 접근 가능한 듯 했다.

어쨌든 이 단계에서는 token을 통해 일회성으로 remote에 접근하는 것으로 했다.

 

* 추가 -> token을 통해서도 git에 필요한 접근은 모두 할 수 있다고 한다. 그럼에도 git config를 설정해주는 이유는 커밋 히스토리나 여러가지 작업을 할 때 작업자가 누군지 일관성있게 관리하기 위해서라고 한다.

 

3. mysql 설치

터미널에서 mysql을 설치할 수 있는 여러가지 명령어가 있는데 아무거나 하고 관리자 계정 설정등과 같은 것을 진행해야한다. 

-- admin 계정 생성
CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '';
FLUSH PRIVILEGES;

-- 데이터베이스 스키마 생성
CREATE SCHEMA {your_database_name} DEFAULT CHARACTER SET utf8mb4;

-- Admin 계정에 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON {your_database_name}.* TO admin@'%';
FLUSH privileges;

-- sample 테이블 생성
CREATE TABLE {your_database_name}.{your_sample_table_name} (
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '샘플 고유번호',
	`sample` VARCHAR(100) NOT NULL DEFAULT 'sample' COMMENT '샘플 데이터'
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

-- admin 계정 생성
CREATE USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY '{your_password}';
FLUSH PRIVILEGES;

-- Admin 계정에 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON {your_database_name}.* TO admin@'localhost';
FLUSH privileges;

 

순서와 관계없이 모두 계정설정과 관련해서 필요한 유용한 DDL이다.

한가지만 짚고 넘어가자면 admin 계정을 둘로 생성하는데 이는 admin @ {host_name}을 어떻게 선언했느냐의 차이다.

host_name = localhost라면 로컬환경에서만 해당 계정으로 접속할 수 있고 host가 %이면 외부에서 해당 계정으로 접속할 수 있다는 뜻이다. 계정 생성 DDL을 실행했다면 다음과 같이 생성한 계정을 확인해볼 수 있다.

$ mysql -u root -p # 입력 후 pw로 접속. 기본 root계정은 1234로 설정돼있으나 ubuntu로 생성한 경우 password설정이 안돼있기 때문에 아래와 같이 실행
$ sudo mysql -u root
$ use mysql
$ select user,host from user;

 

 

4. npm 설치

apt install을 통해서 npm을 설치하고 이 때 사용하는 node 버전에 맞게 설치해준다. 

 

 

5. 서버에서 프로젝트를 백그라운드로 실행

$ npm install -g pm2 # global(전역)로 설치해 어디에서든 pm2를 실행할 수 있음
$ pm2 start app.js   # 프로젝트의 app.js파일을 백그라운드에서 실행
$ pm2 list   	 	 # pm2로 백그라운드에서 실행중인 프로세스 리스트 확인
$ pm2 delete all     # pm2로 실행중인 프로세스 모두 제거

pm2를 설치하고 서버를 백그라운드에서 실행시켜준다.   

-> 명령어 관련 공식문서 링크

 

 

* AWS애서 설정하는 것들은 추가적으로 언급하지는 않았지만 80포트와 443포트를 0.0.0.0 포트로 인바운드 규칙을 추가해주고 3000번 포트를 80번 포트와 443번 포트로 포트포워딩 해준다. 필자의 경우 HTTPS 사용하지 않았고(ACM 발급 X) HTTPS로 443 포트번호의 포트포워딩이 필요한 경우 추가적인 설정이 필요할 것이니 참고할 것