본문 바로가기
Archive

서버를 cloude server 에 배포할때의 고민

by livemehere 2022. 4. 17.

외주업무에 필요한 express API서버를 naver cloud platform server에 올렸다.

하지만 네이버클라우드플랫폼에서는 1년간 무료로 제공하는 micro 이미지의 메모리가 1GB 밖에 되지 않는다.

정말느렸다.

docker환경에서 배포를 진행했는데, 컨테이너를 키는데 소요되는 명령어 하나하나에 20초는 기다렸던것 같다.

메모리 문제라생각된다. 이전에 AWS EC2에서는 이런일이없었다.. 그건 프리티어가 4GB였다.(알고보니 EC2도 1GB..)

이때 1GB에서 docker를 돌리기에 무리인건가? 라는 생각을했다.

참고로, express 서버 두개와 mariadb 1개를 포함한 총3개의 컨테이너를 돌리고있었다.(버거울만 하기도..)

번외로,

나는 서버를 관리할때 아직 CI/CD 는 익숙지 않아서, SSH접속 후 github를 통해서 코드최신화를 한다.(이제는 github Actions 사용해요!)

그리고 npm script로 간단히 빌드하고 재실행하도록 했다. 내가 할 수 있는선에서 최대한 자동화를 해놓았다.

jenkins나 github Actions를 배워 사용할수도있겠지만 아직은 이해가안되는 부분들이 많은거 보니 때가 아니라 생각하고있다. 돌고돌아오면 흡수할 수 있는 날이 올거라생각한다.

어쨋든..

총 두번의 문제가 발생했다.

처음으로는 db컨테이너가 중지되고, 내부 데이터도 날아갔다. 데이터량이 상당히 많았는데, 혹시나해서 백업해두었던게 정말다행이었다.

db백업은 필수!

volume도 연결해두었는데, 그냥 디비자체적으로 맛이간거 같았다.

두번째로는 cloud server 자체가 중지되고, 경고알림이떴다. 해당알림은 메모리 가용능력이 초과되었을때 뜨는 알림이었다.

내가 무리를 하기도했다.. 1GB메모리에 2개의 express 서버를 돌리다니..

결국 docker를 지우고, 그냥 ubuntu환경에 node, mariadb, npm, git 을 직접 설치해 사용하기로 결정했다.

docker 잠시 안녕..

내가 docker를 배워야겠다고 생각했던이유와 사용했던 이유는 환경설정이다.

어떤 환경에서 작업하던, 그작업환경을 저장하고있어, 지금처럼 local에서 동작하던것이 아무설정없이 cloud server에서 동작할 수 있다.

그게 docker가 제공하는 장점이기도하다.

결론부터

node특정버전 설치

curl -sL <https://deb.nodesource.com/setup_16.x> | sudo bash -
cat /etc/apt/sources.list.d/nodesource.list
apt-get install -y nodejs
npm i -g yarn

Git 설치

apt-get git

mariadb설치

apt-get install mariadb-server

# mysql : 디비 접속
select User from mysql.user; # 유저 list
SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user; # user들의 접가능 IP list

# 필수로 해아할 거(외부접속 설정)
update mysql.user SET Host='%' where Host='localhost' and User='root'; # root계정의 접속가능 IP를 wildCard로 변경
grant all privileges on *.* to 'root'@'%'; # root@% 에게 모든 권한 부여
flush privileges; # 변경사항 저장

# db종료하고 설정파일 수정 후 ubuntu에서 mariadb 재시작
vim /etc/mysql/mariadb.conf.d/50-server.cnf 에서 "bind-address = 127.0.0.1" 이부분 주석처리(외부접속허용)
service mysql restart

결론부터 말하자면 ubuntu 서버를 대여했을때 위 명령어들을 순차적으로 실행하기만 하면된다.

물론 apt-get update ,apt-get upgrade 는 별도!
ubuntu환경에서 패키지를 어떻게 설치하고, 삭제하고, 실행하는지는 검색하면 너무나 잘나오니 생략합니다.

 

핵심은 설치했을때, node를 설치하는 방법이다.

ppa, nvm, curl, apt, apt-get 등 설치하는 방법이 다양한데, 그냥 일반적으로 apt-get을 많이사용한다.

근데 그냥 설치하면 node 버전이 상당히 낮게 설치된다.

 

그래서 이상한 명령어들을 사전에 입력해준다.

그리고 난 yarn을 더 선호하기때문에 yarn은 npm으로 설치해주었다.

위와같은 방식으로 설치하면 npm은 따로 설치해줄 필요없이 덤으로 따라온다.

 

 

Workbench 접속이 안된다

디비가 말썽이다.

설치하고나서는 localhost환경에서만 접속이 가능하다.

보통은 root계정의 접속허용 IP가 localhost만 되어있는데, 그것을 wildcard인 '%'로 변경해주는 작업을 해준다.

db의 user정보는 mysql.user에 있다

우선 db에 접속해 그리고 root에 모든 권한을 부여한다. 아마 기본적으로 root에는 있을텐데.. 삽질하다가 순서가 꼬여서 이걸안해도되는지는 다시  테스트해보진않았다.

 

그리고 반드시 flush privileges;를 통해서 저장하고, db를 종료하고

mariadb의 경우 50-server.cnf파일에서 주소가 localhost만으로 바인딩되어있는것을 주석처리해서 외부에서도 접속이 가능하도록 해주어야한다.

최종적으로 서버를 재실행하면, workbench에서 접속이가능하다.

 

 

반응형