물에 살고싶은 개발자

우분투 18.04에 서버환경 (node+mysql)구축하기 +@ mysql 외부 접속 열어주기 본문

리눅스(Ubuntu)

우분투 18.04에 서버환경 (node+mysql)구축하기 +@ mysql 외부 접속 열어주기

돼지사랑 2019. 6. 13. 15:31

이 글은 차후에 내가 서버를 구축할때 보기위한 글이다. 그러므로 내 취향에 맞게 작성됨을 알린다.

AWS 인스턴스를 생성 후 putty를 이용해 접속하는방법같은건 내가 따로 글을 써둿으니 그쪽을 참고하자.

아래 쓸 내용들은 인스턴스를 생성 한 직후 아무것도 없을때부터 하나하나 설치해가는 내용임을 미리 밝힌다.


1.Node.js 설치


설치법 혹은 사용법이나 기본적인 소개는 공식 깃헙에서 확인하고 사용법위주로 콤팩트하게 진행하자.

아래 필요로 하는 버전을 적어주면 알아서 설치가 된다.

curl -sL https://deb.nodesource.com/setup_원하는.버전을넣자 | sudo -E bash - sudo apt-get install -y nodejs

설치가 모두 끝나고나면 버전을 확인해보는걸로 설치가 정상적으로 원하는버전이 깔렸는지 확인 가능하다.

참고로 난 글을 작성하는 19.06.13 기준으로 stable한 버전인 10대 버전을 깔기 위해 버전에 setup_10.x 를 썻다.

만약 원하는 버전대가 11이라면 setup_11.x 이런식으로 써주자.


2020.03.18 기준으로 LTS 버전은 12.16.1이다

node -v v10.16.1 npm -v 6.9.0




2.Express 설치


express는 쉽게 말하자면 서버를 초기화하는 코드를, 그리고 api를 만들었을때 한층 더 심플하게 기능코드에만 집중할 수 있도록 

각종 귀찮기 짝이없는 설정코드들을 작성하지 않아도 되도록 도와주는 프레임워크다. 좀 더 자세한 내용은 공식홈페이지에서 확인하자.

(매우 친절하게 한글판으로도 볼 수 있다. 다만, 공식지원보다는 오픈소스프로젝트에 참여한 한국어가 가능한 개발자가 번역해준것이기에 영문판보다 구버전의 자료일 수 있는것을 참고하자)


설치법은 아주 심플하다.


우선 프로젝트폴더를 생성하해주자. 방법은 원하는 경로로 이동 후 폴더를 하나 만들고 그 폴더 안에서 아래 명령어를 실행하면 된다. 

mkdir project_dir -> 폴더 생성

cd project_dir -> 해당 폴더로 이동

npm init -> 프로젝트 폴더 생성

프로젝트 폴더에서 아래 명령어를 써주자.

npm install --save express

이걸로 끝이다.


여기까지 하고나면 node를 이용한 웹서버 구축이 끝났다.

정상적으로 웹서버가 동작하는지 확인은 익스프레스 공식홈페이지에 나와있는 가이드를 따라 해보자.


3.Forever 설치


Express까지 설치하고 나서 동작하는지 테스트를 해본 사람들 중 일부는 느꼇을것이다.

putty를 끄면 서버도 죽는다는것을... 

forever는 그 이슈를 아주 쉽고 깔끔하게 해결해준다. forever로 node.js 파일을 실행시켜주면 putty를 꺼도 서버가 죽지않는다 !

forever에 대한 설명은 이것으로도 충분하니 바로 설치법과 사용법 ㄱㄱ


역시나 npm 덕분에 설치 ( 혹시나 퍼미션 오류가 난다면 sudo를 앞에 붙여주자. root 권한으로 설치하면 해결된다. )

npm install -g forever

사용법은 심플하다 

forever 를 쳐서 일단 설치가 되었는지 확인한다.

정상적으로 설치가 되었다면 각종 명령어들을 알려주는 파란색 help가 왕창 뜰것이다. 

그럼 가장 많이쓰이는 아래 명령어들을 쓰면 끝이다. 

forever list -> 관리중인 node app의 list를 보여줌

forever start app.js -> app.js 파일을 실행시킴

forever restart app.js -> app.js를 재시작함

forever stop 0 -> forever로 관리되고있는 프로세스중 0번 프로세스를 정지시킴. 해당내용은 forever list로 확인가능

끝이다. 처음 시작할떄 forever start 로 켜두고 수정사항이 있을때마다 forever restart를 한번씩 해주면 된다.


forever까지 설치하고 나면 웹서버에서 기본적으로 필요로 하는건 다 설치한 셈이다.



4. MySQL 설치


웹서버 설치는 완료되었으니 DB를 설치하자. 가장 무난하게 사용 가능하고 무엇보다 무료인 MySQL 을 설치할것이다.


일단 설치하기 전에 사전준비를 먼저 하자.

sudo apt-get update

sudo apt-get install mysql-server

sudo mysql_secure_installation

마지막 명령어를 실행하면 중간중간 계속 y/n의 선택지가 나올것이다.  

해당 내용은 아래와 같다.

Securing the MySQL server deployment.


Connecting to MySQL using a blank password.


VALIDATE PASSWORD PLUGIN can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD plugin?


Press y|Y for Yes, any other key for No: y  <-- 보안을 위해 패스워드를 설정할건지 질문


There are three levels of password validation policy:


LOW    Length >= 8

MEDIUM Length >= 8, numeric, mixed case, and special characters

STRONG Length >= 8, numeric, mixed case, special characters and dictionary file


Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 <-- 비밀번호 설정방식을 질문

Please set the password for root here.


New password: <-- 비밀번호 입력


Re-enter new password: <-- 입력한 비밀번호 재입력


Estimated strength of the password: 25

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y <-- 패스워드 강도와 이대로 하겠냐고 질문

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.


Remove anonymous users? (Press y|Y for Yes, any other key for No) : y <-- DB에 아무나 접속할 수 없도록 하겠냐는 질문

Success.



Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.


Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n <-- 원격접속 시 root 계정을 사용 못하게 할것인지 질문. 여기서 y를 할 경우 원격접속(예를들면 mysql 워크벤치)할때 접속할 별도의 계정을 생성해야 함. 본인은 테스트&공부가 목적이라 n을 선택함


 ... skipping.


이 아래부터는 test 테이블에 대한 질문이므로 대충 다 y로 해도 무방하다.

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.



Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

 - Dropping test database...

Success.


 - Removing privileges on test database...

Success.


Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.


Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Success.


All done!

선택지에 따라 원하는 답을 하며 진행을 하면 된다. 이 작업이 마무리 되고 나면 아래 명령어로 db에 접속해보자.

sudo mysql -u root -p

이 명령어는 root로 접속하고 패스워드를 입력하겠다는 뜻이다.

실행하고 패스워드를 입력하면 아래처럼 접속이 되는걸 확인할 수 있다.


Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

이렇게 뜨면 성공적으로 설치가 된 것이다.

예전에 APM을 소스설치할때는 귀찮은것들이 굉장히 많았는데 node도 그렇고 여러모로 심플해진거같다. 

아무튼 이렇게 서버구축 완료. 



보너스. MySQL 외부접속 허용하기


다른 DB는 어떨지 모르겠지만 mysql은 외부접속을 허용하기 위해 약간의 세팅이 필요하다.

그 세팅법을 소개한다. 일단 아래 명령어를 실행하자.

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

이렇게하면 mysql의 설정파일을 편집창으로 열 수 있게된다.

(혹시나 초보자라면 이 설정을 하기 전에 vi 사용법을 먼저 익히고 오길 바란다. vi가 없는 커맨드라고 뜨면 설치하고ㅇㅇ)



조금만 내리면 위 사진과 같은 bind-adress가 보일것이다. 저 값을 사진처럼 0.0.0.0으로 바꿔준다.

그리고 저장 후 닫아주고(vi 기준 esc 후 :wq) 아래 명령어를 실행해 mysql을 재시작해준다.(바꾼 설정파일 적용되도록)

그 후 mysql에 접속!

sudo service mysql restart

sudo mysql -u root -p

비밀번호를 입력하고 접속해 아래 명령어를 실행해서 접속가능한 ip를 열어준다.

아이디@'%'에서 %가 모든 ip에 접속이 가능하도록 허용한다는 뜻이다. 

여기서 사용되는 아이디는 사전에 만든것이어도 괜찮고 root여도 괜찮다. (다만 실무에서 root를 외부에 열어주는건 보안상 자제하는게 좋다)

grant all privileges on *.* to '아이디 혹은 root'@'%' identified by '비밀번호';

여기까지 하면 mysql 워크벤치 같은 외부접속 프로그램으로도 접속 가능할것이다.


혹시나 AWS를 사용한다면 해당 인스턴스의 보안그룹에서 인바운드 규칙을 추가해줘야한다.

규칙은 사용자 지정 TCP 선택하고 포트번호 3306 위치무관 혹은 그냥 0.0.0.0 입력 후 저장하면 된다.

AWS를 잘 모르는 분들은 이 블로그를 참고하자.  이 글을 작성하면서 참고한 블로그이다.


여기까지 끝! 

Comments