참고 링크: https://docs.nodebb.org/installing/os/windows/

 

NodeBB.... 농담입니다

오픈소스(GPLv3) node.js 게시판/포럼 NodeBB(Node.js Bulletin Board)를 설치해봅시다. (github: https://github.com/NodeBB/NodeBB)

NodeBB는 node.js 기반 오픈소스 게시판/포럼으로, 데이터베이스로 NoSQL DB중 MongoDB 또는 Redis를 사용합니다. 기본은 MongoDB입니다.

 

설치 환경은 다음과 같습니다

  • OS: Windows 10 (64bit)
  • Shell: PowerShell v5
  • Node.js: 14.5.0
  • MongoDB: 4.2.8
  • NodeBB: 1.14.2
  • nginx: 1.18.0

 


 

1) Node.js 설치

설치 방법 게시물: torbjorn.tistory.com/477

LTS 버전을 쓰라고 나와있는데 전 그냥 최신버전 깔았습니다. 잘 됩니다.

 

 

2) MongoDB 설치 & 설정

2-1) 몽고db 홈페이지에서 설치파일 받아서 설치

Download - On-Premises - MongoDB Community Server를 눌러서 .msi 파일을 받아줍니다

오늘자 최신(current) 버전은 4.2.8입니다.

 

여기서 빼고 싶은게 있으면 빼주세요

 

윈도우 Service 설치는 기본적으로 체크되어 있는데 굳이 수동으로 설정하고싶다 하면 체크를 해제해주세요.

웬만하면 그냥 여기서 설치해주세요. 수동으로 하면 은근 귀찮습니다..

저는 밑에서 수동으로 설정하는 법을 올리기 위해 체크 해제하고 설치하겠습니다.

 

2-2) mongoDB bin 경로 PATH에 추가

시작 - "계정의 환경 변수 편집" 검색 후 클릭해줍니다

 

// MongoDB 4.2.x 버전의 기본 설치 경로
C:\Program Files\MongoDB\Server\4.2\bin

{유저명}에 대한 사용자 변수 - Path 클릭 후 편집 클릭 - 맨 밑 빈칸 더블 클릭 - MongoDB의 bin 경로를 복사 붙여넣기 해줍니다. 버전마다 경로가 다를 수 있으니 확인해주세요.

추가한 다음 확인 버튼을 눌러 닫아줍니다.

 

PowerShell을 킨 뒤 echo $env:PATH를 입력해보면 PATH에 몽고db 경로가 추가된 것을 확인할 수 있습니다.

 

2-3) (선택) mongoDB 서비스 수동 설치

윈도우 서비스 설정을 할 때는 PowerShell을 관리자 권한으로 실행해야 합니다.

PS C:\Windows\System32> cd 'C:\Program Files\MongoDB\'
PS C:\Program Files\MongoDB> mkdir -p data/db
PS C:\Program Files\MongoDB> mkdir logs

파워쉘을 관리자 권한으로 킨 뒤 몽고db 설치 경로에 data\db, logs 폴더를 만들어줍니다.

 

그 다음 C:\Program Files\MongoDB\mongod.cfg 경로에 config 파일을 아래처럼 만들어줍니다

systemLog:
  destination: file
  path: 'C:\Program Files\MongoDB\logs\mongod.log'
storage:
  dbPath: 'C:\Program Files\MongoDB\data\db'

YAML 포맷을 쓰기 때문에 들여쓰기에 탭 대신 공백을 써야하고, 콜론(:) 뒤에 한 칸을 띄우는 등 문법을 정확히 맞춰서 써줘야 합니다.

 

PS C:\Windows\System32> mongod.exe --config "C:\Program Files\MongoDB\mongod.cfg" --install

다음으로 위 명령어를 입력해 윈도우 서비스에 mongod(데몬)를 등록합니다.

 

PS C:\Windows\System32> net start MongoDB
PS C:\Windows\System32> sc.exe query "MongoDB"

net start로 서비스를 시작하고, sc.exe를 사용해 서비스의 상태를 확인할 수 있습니다.

 

이런식으로 상태(STATE)에 RUNNING이라고 나오면 잘 켜진 겁니다.

참고로 mongod.exe --install을 했을 때 기본적으로 서비스 시작 유형(startup type)이 자동으로 설정돼 컴퓨터를 키면 무조건 실행되니 수동으로 키도록 설정하려면 이 게시물을 참고해주세요.

 

PS C:\Windows\system32> mongo

MongoDB shell version v4.2.8
...
...

> db._adminCommand({getCmdLineOpts:1})
{
        "argv" : [
                "C:\\Program Files\\MongoDB\\Server\\4.2\\bin\\mongod.exe",
                "--config",
                "C:\\Program Files\\MongoDB\\mongod.cfg",
                "--service"
        ],
        "parsed" : {
                "config" : "C:\\Program Files\\MongoDB\\mongod.cfg",
                "service" : true,
                "storage" : {
                        "dbPath" : "C:\\Program Files\\MongoDB\\data\\db"
                },
                "systemLog" : {
                        "destination" : "file",
                        "path" : "C:\\Program Files\\MongoDB\\logs\\mongod.log"
                }
        },
        "ok" : 1
}

mongoDB에 config 값이 잘 로드됐는지 확인하려면 mongo 쉘을 킨 다음 db._adminCommand({getCmdLineOpts:1})을 입력해주세요. 위와 같이 나오면 됩니다. 

 

2-4) MongoDB 설정

mongoDB 설정은 mongoDB 쉘인 mongo로 진행됩니다. mongoDB의 기본 포트는 27017이고, 로컬에서 접속 가능합니다.

PS C:\Windows\system32> mongo

PowerShell에서 mongo를 입력해 쉘에 접속합니다.

> use admin
switchted to db admin

> db.createUser(
  {
    user: "admin",
    pwd: "<Enter a secure password>",
    roles: [ { role: "root", db: "admin" } ]
  }
)
Successfully added user: {...}

> use nodebb
switched to db nodebb

> db.createUser(
  {
    user: "nodebb",
    pwd: "<Enter a secure password>",
    roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ]
  }
)
Successfully added user: {...}

위 명령어들을 한줄씩 차례로 입력합니다

먼저 admin 데이터베이스에 root 계정인 admin 유저를 만듭니다. 보안을 위해 안전한 비밀번호를 입력해주세요. 옆에 꺾쇠도 꼭 지워줍시다. 예를 들어 비밀번호를 abcd로 하려고 한다면 pwd 항목을 "abcd"로 입력합니다.

그 다음 use nodebb를 입력해 nodebb 데이터베이스를 만들고, nodebb 유저를 만듭니다. 이 유저는 nodebb 데이터베이스에 Read, Write 권한을 갖고 있고, admin db의 statistics의 read-only access를 갖고 있는 clusterMonitor role을 갖고 있습니다.

(참고: MongoDB Built-in Roles - https://docs.mongodb.com/manual/reference/built-in-roles/)

 

> quit()

mongo 쉘을 나갑니다.

security:
  authorization: enabled

그 다음, mongodb config 파일(C:\Program Files\MongoDB\mongod.cfg)에 위 내용을 추가해줍니다. YAML 포맷이니까 탭 대신 공백 사용, 콜론(:) 뒤 한 칸 띄어 쓰는 것 잊지 말아주세요.

> net stop MongoDB
> net start MongoDB
> mongo -u admin -p your_password --authenticationDatabase=admin

마지막으로 mongodb 서비스를 재시작하면 인증을 사용할 수 있습니다.

admin 계정으로 로그인할 경우 마지막 줄처럼 입력하면 됩니다. -p 옵션을 빼면 프롬프트에서 패스워드를 입력할 수 있습니다.

(참고: MongoDB enable authentication - https://docs.mongodb.com/manual/tutorial/enable-authentication/)

 

 

3) NodeBB 설치

일단 윈도우용 git을 설치해줍니다. (링크: https://git-scm.com/)

설치할 때 'Use Git from the Windows Command Prompt' 옵션이 있는데, PATH에 git 주소를 추가해주는거니 체크해주세요. 실수로 안했다면 2-2) 과정을 반복하시면 됩니다.

※ git과 ./nodebb를 사용할 때는 쉘을 루트(or 관리자) 권한으로 사용하지 말아달라고 합니다. 파일마다 권한이 달라져 NodeBB가 액세스할 때 문제가 생길 수 있다고 합니다.

 

PS > git clone -b v1.14.x https://github.com/NodeBB/NodeBB.git nodebb
PS > cd nodebb

다음으로 적당한 위치에 nodebb를 클론합니다. NodeBB에서 stable 브랜치중에 하나를 선택하면 되는데, 저는 v.1.14로 하겠습니다.

PS > .\nodebb setup

각종 모듈을 설치하기 위해 위 명령어를 입력해줍니다.

중간중간에 입력하는 프롬프트가 나오는데, 기본값을 사용할 예정이니 그냥 전부 엔터 쳐서 넘어갑니다. 로컬 서버의 기본 포트는 4567입니다.

그 중 mongodb username, password를 입력하는 부분이 나오는데 이 때 아까 만들었던 nodebb 계정과 비밀번호를 입력합니다.

그 다음, administrator 계정, 이메일, 비밀번호를 입력하라고 나오는데, forum의 관리자 계정으로 db 계정과는 다릅니다. 이것도 적당히 잘 입력해줍니다.

NodeBB Setup Completed. Run "./nodebb start" to manually start your NodeBB server. 메시지가 나오면 설치 완료입니다.

 

PS > .\nodebb start

이제 위 명령어를 입력해 nodebb 서버를 실행시킬 수 있습니다. 위 명령어를 입력하면 node.js 창이 하나 뜹니다.

웹 브라우저에서 localhost:4567 (or 127.0.0.1:4567)에 접속해보면 게시판이 나옵니다.

 

 

4) nginx 설치 & 설정

nginx(엔진엑스)는 오픈소스 웹서버입니다.

nginx를 리버스 프록시 서버로 사용할건데요, Node.js에 nginx같은 웹서버를 연동해서 사용하면 여러 이점이 있습니다.

  • 보안: node.js 서버의 IP, 포트 등을 숨길 수 있음
  • 성능: nginx의 캐싱, 로드밸런싱 등을 사용 가능
  • 등등

 

4-1) nginx 설치

nginx 홈페이지에서 stable 버전 Windows binary를 받아줍니다

 

압축 해제해서 C:\nginx 폴더로 전부 옮겨줍니다.

PS C:\nginx> .\nginx -v
nginx version: nginx/1.18.0

위 명령어를 입력해서 nginx 버전이 잘 출력되는지 확인합니다.

PS C:\nginx> start nginx

그 다음 nginx를 실행시켜줍니다. 윈도우에서 nginx는 서비스가 아니라 standard console application으로 동작한다고 합니다. (참고: http://nginx.org/en/docs/windows.html)

PS C:\nginx> tasklist | findstr nginx.exe
nginx.exe                     7420 Console                    1      7,288 K
nginx.exe                    18380 Console                    1      7,504 K

PS C:\nginx> tasklist /fi "imagename eq nginx.exe"

이미지 이름                    PID 세션 이름              세션#  메모리 사용
========================= ======== ================ =========== ============
nginx.exe                     7420 Console                    1      7,260 K
nginx.exe                    18380 Console                    1      7,468 K

tasklist 명령어를 사용해 nginx가 잘 실행되고 있음을 알 수 있습니다.

 

localhost에 접속하면 위 사진과 같은 페이지가 나옵니다. 웹서버 좀 써보신 분들은 익숙하시죠?

 

4-2) nginx 설정

(참고 링크: https://docs.nodebb.org/configuring/proxies/nginx/)

C:\nginx\conf\nginx.conf 파일을 수정합시다. server 블록만 아래처럼 수정해줍니다.

server {
    listen 80;

    server_name forum.example.org;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:4567;
        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

그 다음 설정파일을 적용시키기 위해 nginx reload를 해줍니다

PS C:\nginx> .\nginx -s reload

이제 localhost(:80)에 접속하면 아까처럼 게시판이 나옵니다. server_name에 적어 놓은 forum.example.org에 접속하려면 도메인이 있어야 하지만 없으니까 hosts 파일을 수정해 임시로 리다이렉트를 시켜봅시다

윈도우에서 hosts 수정 방법은 이 게시물을 참고해주세요.

 

# hosts
127.0.0.1	forum.example.org

이렇게 임시로 돌려놓으면 forum.example.org에 접속해도 게시판이 나옵니다. 도메인이 있는 분들은 한번 실험해보시고요 전 아직 없기 때문에; 도메인 사면 설정 방법 올려보겠습니다.

 

PS C:\nginx> .\nginx -s quit

m마지막으로 위 명령어를 사용해 nginx를 종료할 수 있습니다. 종료 커맨드가 quit, stop 두 가지가 있는데 quit은 graceful shutdown (모든 커넥션에 대한 작업 완료 후 종료), stop은 quick shutdown (그냥 바로 끔)이라고 합니다. 

 

 

소감

솔직히 ... 윈도우에 서버를 돌려야 할까요?

전 지금 쓸만한 컴퓨터가 윈도우 깔려있는 PC밖에 없어서 울며 겨자먹기로 윈도우에 세팅을 하고 있지만.. 굳이 그래야 할까요? 리눅스 머신 있으면 그냥 리눅스에 까는게 정신건강에 좋을 듯 하네요

반응형

'프로그래밍 > Node.js' 카테고리의 다른 글

Ubuntu 18.04 Node.js 설치 방법  (2) 2020.08.02
Windows Node.js 설치 방법  (0) 2020.07.19