2017년 3월 23일 목요일

[Web/Server] Ubuntu(우분투)에서 Nginx(엔진엑스) 설치하기

Ubuntu(우분투)에서 Nginx(엔진엑스) 설치하기


이번 포스팅에서는 Apache의 대항마라고 불리는 차세대 웹서버인 Nginx의 설치방법을 정리해보겠습니다.
Nginx는 Apache에 비해서 가볍고 설정이 간편하면서, 성능이 좋고 속도가 빠른 장점이 있다고 합니다.

설치 방법은 nginx의 wiki를 참고하였습니다.
https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#official-debian-ubuntu-packages

저는 Ubuntu 16.04 LTS에서 설치하려고 합니다.

nginx를 설치하는 방법은 3가지 정도가 있는 것 같습니다.
- 첫번째, PPA를 이용해서 설치하는 방법
- 두번째, apt repository를 추가해서 설치하는 방법
- 세번째, 소스코드를 컴파일해서 설치하는 방법

저는 두번째 : apt repository를 추가해서 설치하는 방법을 해보려고 합니다.
PPA의 경우 비공식 소프트웨어인데 nginx가 아닌 자원자들이 개발하는 버전이라고 합니다. 저는 공식적인 버전을 사용하기 위해서 PPA는 사용하지 않으려고 합니다.
소스코드를 컴파일 하는 방법은 nginx의 설정을 좀 더 커스텀해서 사용할 수 있다고 하는데, 저는 nginx의 입문자라서 그냥 기본 설정으로 충분할 것 같아서 소스코드를 컴파일 하지는 않을 것입니다.

본격 설치 방법

(1) apt-get repository 추가
apt repository에 nginx 패키지의 출처를 추가합니다. 추가할 위치는 아래와 같습니다.
/etc/apt/sources.list

sources.list 파일을 사용하시는 에디터로 열어서 맨 밑에 아래의 두줄을 추가합니다.
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx
참고로 위의 두줄은 ubuntu 16.04 버전을 위한 것입니다.
ubuntu 14.04는 아래 두줄이 맞습니다.
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
버전이 다르면 단지 버전에 따른 코드네임만 변경하면 됩니다.

(2) apt-get으로 nginx 설치
apt repository를 수정했으니 적용시키기 위해서 update를 해줍니다.
sudo apt-get update

그런데!!! update를 수행하고 나면 nginx와 관련해서 아래와 같은 주의가 나타났을 겁니다.
W: GPG error: http://nginx.org/packages/ubuntu xenial InRelease:
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY {key}
이 주의문구는 nginx의 repository에 있는 nginx 패키지가 검증되지 않아서 나타나는 것입니다.
nginx 공식 wiki에서는 위의 문제가 발생하면 아래처럼 key를 등록하라고 합니다. {key}자리에는 주의 문구에 {key} 자리에 있는 키를 넣어주면 됩니다.
key를 등록하고 다시 update까지 해줍니다.
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys {key}
sudo apt-get update
이번 update에서는 주의문구가 나타나지 않을 것입니다.

update가 완료되면 설치를 합니다.
sudo apt-get install nginx

설치 끝 입니다!


이번 포스팅에서는 설치만 정리하고 다음 포스팅에서 설정파일에 대한 정리와 함께 node.js와의 연동에 대해 정리해보도록 하고 링크 걸겠습니다.



2017년 3월 16일 목요일

[Web/Node.js] Express 설치 및 웹페이지 연결시키기

Express 설치 및 웹페이지 연결시키기


1. Express 설치

express를 사용할 node.js 프로젝트 폴더로 이동합니다.
해당 폴더에서 아래 명령어를 수행합니다.
npm install express --save

설치를 하고 나면 package.json에 아래와 같은 dependency가 추가됩니다.
"dependencies": {
    "express": "^4.15.2"
  }


2. 웹페이지 연결

express를 이용해서 웹서버를 열고, 브라우저에서 접속했을 때 index.html을 나타내도록 해보겠습니다.

우선 index.html을 만듭니다. 위치는 프로젝트 루트에서 views라는 폴더를 만들고 그 안에 만들어 줍니다.
mkdir views
nano index.html

index.html의 내용을 적당히 채워줍니다. 되는지 먼저 봐야하니깐 화려할 필요는 없습니다.

그리고 npm 패키지 하나가 더 필요합니다. ejs 패키지 인데, 프로젝트 루트 위치에서 아래 명령어로 설치합니다. express 설치하는 것과 같습니다.
npm install ejs --save

ejs 패키지는 html 템플릿 엔진입니다. ejs에 대한 자세한 사항은 다음에 다시 살펴보도록 하겠습니다.

이제 메인이 되는 자바스크립트 코드를 아래처럼 작성합니다.
1 |var express = require('express');
2 |var app = express();
3 |
4 |app.set('views', __dirname + '/views');
5 |app.set('view engine', 'ejs');
6 |app.engine('html', require('ejs').renderFile);
7 |
8 |app.get('/',function(req,res){
9 |        res.render('index.html');
10|});
11|
12|var server = app.listen(80, function(){
13|        console.log("The server has started on port 80");
14|});

1번 줄은 express 패키지를 본 코드에서 사용할 수 있게 가져오는 것입니다. java에서의 import, c에서의 include와 유사합니다.
2번 줄은 express의 기능을 사용할 수 있는 객체를 가져오는 것입니다. 가져온 객체를 app이라는 이름의 변수에 담아서 express의 기능을 사용하는데 쓸겁니다.
4번 줄은 html 파일들을 위치시킨 경로를 설정하는 것입니다.
5,6번 줄은 html을 나타내는 엔진으로 ejs 패키지를 사용하다는 것입니다.
8번 줄은 '/'로 get요청이 오면 index.html 파일을 반환한다는 것입니다.
12번 줄은 80번 포트로 웹서버를 연다는 것입니다.

이렇게 작성하고 node로 자바스크립트를 실행하면 웹서버가 시작됩니다.
그리고 웹브라우저에서 해당 서버로 http 접속을 하면 index.html에 작성한 내용이 표시되는 것을 확인할 수 있습니다.
(80번 포트는 root 권한으로 웹서버를 실행시켜줘야합니다. 그래서 우분투에서는 sudo를 붙이도록 합니다.)

[Node.js] npm 프로젝트 시작하기

npm 프로젝트 시작하기


node.js에서는 내가 직접 만든 .js 파일들 뿐만 아니라 이미 다른 사람들이 만들어 놓은 .js 파일들을 사용할 수 있습니다. 보통 이런 .js파일들을 패키지 라고 부르게 됩니다.

npm은 node.js에서 사용하는 패키지 관리도구입니다. 즉, 다른 사람들이 만들어 놓은 패키지를 사용할 수 있게 도와주는 도구인것이죠.
Maven이나 Gradle 같은 부류라고 생각할 수 있을 것 같습니다.

본 포스트에서는 프로젝트를 npm 패키지로 선언하는 방법을 정리해봅니다.

1. npm 설치

npm은 node.js를 설치하면 함께 설치됩니다.
우분투에서의 node.js의 설치 방법은 아래 링크에 정리되어 있습니다.
https://walkinpcm.blogspot.kr/2017/03/webnodejs-nodejs.html


2. npm 패키지 선언

프로젝트에서 npm을 사용하려면 해당 프로젝트를 npm 패키지로 만들겠다고 선언해줘야 합니다.

이 과정은 git의 선언과 유사하다고 생각합니다.
git도 프로젝트를 git과 연결시킬때, 해당 폴더에서 git init 을 수행하지요. 그러고 나면 git 관련 파일이 생성됩니다.
npm도 유사합니다. 프로젝트를 npm 패키지로 선언하고 나면 package.json이라는 파일이 생성됩니다.

npm 패키지 선언은 아래 명령어로 시작합니다.
npm init

init 명령을 수행하고 나면 몇가지 질문이 차례대로 나옵니다.
name            : 패키지의 이름. 
version         : 패키지의 버전.
description     : 패키지 설명.
entry point     : 패키지 실행시 이 패키지를 구동시키는 자바스크립트 파일
test command    : TDD를 할 때의 명령. 빈칸으로 넘어가도 됨.
git             : 연결되는 git 주소.
keyword         : 옵션. 빈칸으로 넘어가도 됨.
author          : 옵션. 빈칸으로 넘어가도 됨.
license         : 디폴트로 넘어가도 무방.


질문에 대한 답을 입력하고나면 package.json 파일이 생성됩니다.
이 파일이 만들 패키지에 대한 개요 정도라고 봐도 될 것 같습니다.

package.json에는 앞으로 프로젝트에 외부 패키지를 설치할 때마다 해당 dependency에 대한 내용이 자동으로 추가됩니다.




[Web/Node.js] Node.js 설치

우분투(Ubuntu)에서 Node.js 설치하기



개인적인 프로젝트를 진행하는데 server-side를 새롭게 node.js로 해보고 싶은 욕심이 생겨서 설치부터 정리해봅니다.

1. Node.js 설치

node.js 홈페이지에 가면 다양한 플랫폼에 대한 node.js 설치파일이나 설치방법이 제공됩니다.
우분투에서 설치하는 방법은 아래 링크처럼 설명되고 있습니다.
https://nodejs.org/ko/download/package-manager/#debian-ubuntu-linux

지원가능한 우분투 버전도 나오는데 12.04, 14.04, 16.04가 지원되네요. 저는 14.04에 해볼 겁니다.

설치는 간단합니다. 아래 명령어 2줄만 차례대로 수행해주면 됩니다.
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
참고로 위의 방법으로는 node.js 6.x 버전을 설치합니다.
이 글을 쓰는 시점에서는 6.x 버전이 안정된 버전이고, 7.x는 최신이기는 하나 아직 안정되지 않은 버전이기 때문에 저는 6.x를 선택했습니다.

위 두줄로 간단히 설치를 마치고 나면 버전 확인으로 설치가 된것을 확인할 수 있습니다.
$node --version
v6.10.0

2. Node.js 실행

node.js는 확장자가 .js인 파일을 실행할 수 있습니다.
실행방법은 간단하게 node 명령어를 이용하면 됩니다.

예를 들어서 아래와 같이 콘솔로그를 출력하는 helloworld.js 파일을 만듭니다. 에디터는 무엇을 이용하든 무관합니다.
console.log('Hello World!');

이 helloworld.js 파일의 실행은 아래와 같이 하면됩니다.
$node helloworld.js
Hello World!
그러면 작성한 문구가 실행됩니다.


3. Express를 이용한 웹서버 실행

Express는 node.js에서 사용가능한 웹 프레임워크입니다. node.js에서 웹서버를 더욱 간편하게 구축할 수 있게 해주는 도구라고 보면 됩니다.

Express에 대한 내용은 다음 포스트에서 정리합니다. 링크를 걸어놓았습니다.
https://walkinpcm.blogspot.kr/2017/03/webnodejs-express.html

2017년 3월 8일 수요일

[Server] 가비아의 서버 모니터링 솔루션 적용해보기.

[Server] 가비아의 서버 모니터링 솔루션 적용해보기.


가비아에서 무료로 사용할 수 있는 서버 모니터링 상품을 내놓았습니다.
가비아에서 자체 개발한 SaaS형 서버모니터링시스템(SMS)라고 합니다.
(링크 : https://event.gabia.com/s_event_170221?utm_source=facebook&utm_medium=banner&utm_term=20170221_idc_%EC%84%9C%EB%B2%84%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81&utm_campaign=%EC%84%9C%EB%B2%84%ED%98%B8%EC%8A%A4%ED%8C%85 )


서버를 운영하면 현재 상태가 어떤지 확인하는 것은 필수적이죠.
본 포스팅에서는 가비아의 서버모니터링시스템을 적용하는 과정을 정리해보고 어떤 서비스를 어떻게 제공하고 있는지 확인해 보겠습니다.

우선, 링크에서 설명되는 가비아 SMS의 특징은,
 1. 간편한 에이전트 설치(가이드 제공)
 2. 저장 장치 사용량, I/O Read/Write 모니터링
 3. 네트워크 사용량(In/Out bps, In/Out pps) 모니터링
 4. CPU, 메모리, Swap 등의 성능 모니터링
 5. 항목별 임계치 설정, 이벤트 스탭샷 등 이력관리
 6. 사용자 인터페이스 극대화 최적의 UI 제공

기본적인 사항들에 대한 모니터링은 지원하는 것 같습니다.

또한, 에이전트만 설치하면 무료로 계속 사용할 수 있고, 가비아가 아닌 외부 서버에도 설치할 수 있고(단, 가비아 회원 가입이 필요합니다.), 서버 대수의 제한도 없고, 정식 오픈 이후에도(지금은 베타에요) 현재 제공하는 기능은 계속 무료로 제공한다고 합니다.

참고로, 데이터 수집 주기는 1분이며 이 데이터는 최대 60일간 보관 및 조회할 수 있다고 합니다.

그럼 이제 에이전트를 설치해보겠습니다.

> 가비아 서버 모니터링 시스템(SMS) 이용 방법

크게 순서를 보면
 1. 가비아 회원 가입 & 로그인
 2. 관리툴 페이지 접속
 3. 에이전트 설치 후 서비스 이용

간단합니다.

1. 가비아 회원 가입 & 로그인

가비아 홈페이지에서 회원가입을 합니다.
네이버와 페이스북 로그인을 지원하는데, 저는 그냥 가입해서 해보겠습니다.

가입 절차는..뭐 굳이 정리할 것도 없이 간단합니다.
아이디, 비밀번호, 이름, 이메일, 핸드폰 번호 적고 인증하고 하면 끝나네요.


2. 관리툴 페이지 접속

로그인 후에 관리툴 페이지로 접속합니다.
가비아 홈페이지에서 메뉴를 찾으려 했는데 못 찾겠어서 그냥 링크를 타고 들어갔습니다.
링크 : http://xms.gabia.com

3. 에이전트 설치 후 서비스 이용

관리툴 페이지에 들어가니깐 바로 에이전트 설치 방법이 친절하게 설명됩니다.

지원 OS는 Ubuntu, CentOS/Fedora, Windows입니다.
각 운영체제별로 지원 버전도 바로 나타납니다. 저는 우분투를 쓰는데 제가 사용하는 14.04 LTS도 지원하고 있습니다.

(1) apt repository 추가.
설치도 매우 간단하네요.
apt를 이용해서 설치하게 되는데, 기본적인 apt repository에 포함되어 있는 패키지가 아니기 때문에 먼저 repository를 추가합니다.

wget http://monrepo.gabia.com/repo/debian/gabiarepo.gpg -O - |sudo apt-key add -
wget http://monrepo.gabia.com/repo/debian/gabiamon-repo_1.0.0-1_all.deb
sudo dpkg -i gabiamon-repo_1.0.0-1_all.deb
sudo apt-get update

(2) apt-get으로 에이전트 설치
apt-get install 명령으로 가비아 SMS 에이전트를 설치합니다.

sudo apt-get install gabia-mond

설치 과정에서 2가지 질문이 나옵니다.
- User? : 기본적으로 root가 선택되어 있는데, 저는 따로 만들어 놓은 계정을 적었습니다.
- Use "sudo"? : root계정이 아닌 계정을 선택해서 그런지 sudo를 쓸거냐고 묻네요. y를 선택합니다.

설치를 하고 났는데 아래처럼 intall 완료라고 뜨면서 그 다음줄에는 찜찜하게 오류가 있는듯한 메세지가 뜨네요..

Install completed...
/etc/init.d/gabia_mond: 6: [: sudo: unexpected operator

베타버전의 버그인건지.. 문의메일이나 넣어봐야겠습니다.

(3) 키 발급 & 스크립트로 에이전트 실행
관리툴 페이지에서 설치 가이드를 따라가다보면 [Key 발급] 버튼이 있습니다. 이 버튼을 눌러서 Key를 발급받습니다.
긴 문자열도 아니고 다소 짧은 문자열로 키가 바로 옆에 표시됩니다. 이것을 복사해 둡니다.
(참고로 Agent Key는 모니터링 페이지에서 확인할 수 있으니 별도로 저장해둘 필요는 없습니다.)

서버에서 아래 명령어로 위에서 설치한 에이전트를 실행시킵니다.

sudo env PATH=$PATH:/usr/local/gabia_mond/bin gabia_mond --start --key

그러면 Agent Key를 묻는데 방금 복사한 키를 입력합니다.
아래와 같은 시작 메세지가 뜨면서 모니터링이 시작됩니다.

gabia_mond[1599] has started
Gabia Server Monitoring Agent Start

시작되고 나면 터미널 창에서 커맨드 입력 라인이 안 뜨는데 엔터한번 치면 나타납니다.

(4) 모니터링 확인
관리툴 페이지의 좌측 사이드 메뉴에서 '모니터링' 메뉴를 선택하면 현황을 볼 수 있습니다.
처음 에이전트를 설치하고 난 뒤에는 데이터를 수집하는데 몇분이 소요되는 듯 합니다.

기본적인 CPU상태나 메모리 사용량을 확인하는데는 충분하지 싶습니다.
개인적으로 모니터링 부분을 깊게 알지 못하여서 이 정도도 만족스럽네요.

아! IP 주소가 표시되는데 저는 AWS의 EC2에 설치한 우분투에서 진행해서 그런지 IP가 Public IP가 아니라 Private IP가 표시됩니다. EC2 우분투에서 ip를 확인하면 Private IP만 나타나는데 그래서 그런가봅니다.

상단의 탭들을 선택하면 각각에 대한 좀 더 자세한 현황을 볼 수 있습니다.