웹사이트 검색

Nginx로 NodeBB 포럼을 설치하고 Ubuntu 20.04 LTS에서 SSL을 암호화하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 18.04(Bionic Beaver)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Node.js 설치
  4. 3단계 - MongoDB 설치
  5. 4단계 - MongoDB 구성
  6. 5단계 - Git 설치
  7. 6단계 - NodeBB 설치
  8. 7단계 - Nginx 설치
  9. 8단계 - Nginx 구성
  10. 9단계 - NodeBB를 시스템 서비스로 실행\n
  11. 10단계 - Let’s Encrypt SSL 인증서 받기
  12. 11단계 - SSL 자동 갱신 확인\n
  13. 결론

NodeBB는 MongoDB/Redis를 데이터베이스 플랫폼으로 사용하는 Node.js로 구동되는 최신 포럼 소프트웨어입니다. 즉각적인 상호 작용 및 실시간 알림을 위해 웹 소켓을 사용합니다.

이 튜토리얼에서는 Ubuntu 20.04 기반 서버에 NodeBB 포럼을 설치하는 방법을 배웁니다.

전제 조건

  • An Ubuntu 20.04 based server with non-root user having sudo privileges.

  • Minimum 2GB RAM. If your server has only 1GB RAM, its best to enable a swap partition.

  • Make sure everything is updated.

    $ sudo apt update && sudo apt upgrade
    
  • Few essential packages. Some of these will already be on your server.

    $ sudo apt install curl wget nano ca-certificates gnupg2 lsb-release
    

1단계 - 방화벽 구성

첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(복잡하지 않은 방화벽)와 함께 제공됩니다.

방화벽이 실행 중인지 확인하십시오.

$ sudo ufw status

다음 출력을 얻어야 합니다.

Status: inactive

방화벽이 활성화 시 현재 연결을 끊지 않도록 SSH 포트를 허용합니다.

$ sudo ufw allow OpenSSH

MongoDB 서버용 27017 포트와 NodeBB 포럼 실행용 4567 포트를 허용합니다. HTTPHTTPS 포트도 허용합니다.

$ sudo ufw allow 27017
$ sudo ufw allow 4567
$ sudo ufw allow 80
$ sudo ufw allow 443

방화벽을 활성화합니다.

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

방화벽의 상태를 다시 확인하십시오.

$ sudo ufw status

비슷한 출력이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
27017                      ALLOW       Anywhere
4567                       ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
27017 (v6)                 ALLOW       Anywhere (v6)
4567 (v6)                  ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - Node.js 설치

여기에 Node.js의 LTS 버전을 설치합니다. 다음 명령을 실행하여 Node.js를 설치합니다.

$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt install nodejs

노드가 제대로 설치되었는지 확인합니다.

$ node --version

비슷한 출력이 표시되어야 합니다.

v12.18.3

npm도 확인하십시오.

$ npm --version
6.14.6

3단계 - MongoDB 설치

MongoDB는 NodeBB의 기본 데이터베이스입니다. MongoDB 대신 Redis를 사용할 수도 있습니다. 튜토리얼에서 두 데이터베이스를 모두 다룰 것입니다.

Ubuntu 20.04용 MongoDB 저장소는 아직 준비되지 않았으며 Ubuntu 자체에는 매우 오래된 버전이 있습니다. 우리의 목적을 위해 잘 작동하는 18.04용 MongoDB 리포지토리를 사용할 것입니다. 공식 지원이 제공되면 패키지 목록을 최신 리포지토리로 업데이트할 수 있습니다.

MongoDB의 공개 키를 가져옵니다.

$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

MongoDB 리포지토리를 추가합니다.

$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

로컬 패키지 데이터베이스를 업데이트합니다.

$ sudo apt update

몽고DB를 설치합니다.

$ sudo apt install mongodb-org

MongoDB 설치를 확인합니다.

$ mongod --version
db version v4.2.8
...

MongoDB 서비스를 시작합니다.

$ sudo systemctl start mongod

MongoDB 서비스를 활성화합니다.

$ sudo systemctl enable mongod

MongoDB 서비스의 상태를 확인합니다.

$ sudo systemctl status mongod

4단계 - MongoDB 구성

Mongo 관리는 MongoDB 셸을 통해 수행됩니다. MongoDB의 기본 설치는 포트 27017에서 수신 대기합니다.

MongoDB 셸에 액세스합니다.

$ mongo

기본 제공 admin 데이터베이스로 전환합니다.

> use admin

관리 사용자를 생성합니다. 이것은 NodeBB 관리 사용자와 동일하지 않습니다.

> db.createUser( { user: "admin", pwd: "yourpassword", roles: [ { role: "root", db: "admin" } ] } )

자리 표시자 "yourpassword”를 자신의 암호로 변경합니다.

NodeBB용 새 데이터베이스를 추가합니다.

> use nodebb

다음으로 nodebb 사용자를 생성하여 nodebb 데이터베이스를 관리합니다.

> db.createUser( { user: "nodebb", pwd: "yourpassword", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )

readwrite 권한을 통해 NodeBB는 nodebb 데이터베이스에서 데이터를 저장하고 검색할 수 있습니다. clustermonitor 권한은 NodeBB가 관리자 패널을 통해 볼 수 있는 데이터베이스 통계에 대한 읽기 전용 액세스를 허용합니다.

몽고 셸을 종료합니다.

> quit()

편집을 위해 MongoDB 구성 파일을 엽니다.

$ sudo nano /etc/mongod.conf

파일 끝에 다음 줄을 추가합니다.

security:
  authorization: enabled

MongoDB를 다시 시작하고 이전에 만든 관리 사용자를 확인합니다.

$ sudo systemctl restart mongod
$ mongo -u admin -p yourpassword --authenticationDatabase=admin

모든 것이 올바르게 구성되었으면 Mongo 프롬프트가 표시되어야 합니다.

5단계 - Git 설치

NodeBB 설치를 진행하기 전에 Git을 설치해야 합니다.

다음 명령을 실행하여 Git을 설치합니다.

$ sudo apt install git

다음 명령을 실행하여 Git의 초기 구성을 수행합니다.

$ git config --global user.name "Your Name"
$ git config --global user.email ""

6단계 - NodeBB 설치

루트 사용자로 NodeBB를 실행하는 것은 바람직하지 않습니다.

권한이 없는 사용자를 만듭니다.

$ sudo adduser nodebb

원하는 암호를 설정하고 다른 옵션은 건너뜁니다.

NodeBB 포럼이 있을 디렉터리를 만듭니다.

$ sudo mkdir /var/www/nodebb

폴더의 소유권을 새로 만든 사용자로 변경합니다.

$ sudo chown -R nodebb:nodebb /var/www/nodebb

새로 생성된 사용자로 로그인합니다.

$ su nodebb

NodeBB 설치 디렉터리로 전환합니다.

$ cd /var/www/nodebb

NodeBB를 설치하려면 먼저 Github 리포지토리를 복제해야 합니다.

NodeBB를 /var/www/nodebb 디렉터리에 복제합니다. 명령 끝에 있는 점은 현재 디렉토리를 나타냅니다.

$ git clone -b v1.14.2 https://github.com/NodeBB/NodeBB.git .

여기서 우리는 튜토리얼을 작성할 당시의 최신 안정 버전인 NodeBB의 v1.14.2를 복제했습니다. NodeBB의 최신 릴리스 페이지에서 최신 안정 브랜치를 찾을 수 있습니다.

NodeBB는 명령줄 유틸리티와 함께 제공됩니다. 다음 명령을 사용하여 NodeBB를 설치합니다.

$ ./nodebb setup

Enter 키를 눌러 기본값을 선택할 수 있습니다.

이 NodeBB에 액세스하는 데 사용되는 URL 값으로 포럼에 액세스하려는 최종 URL을 선택하십시오. 서버 IP를 통해 포럼에 액세스하려면 해당 IP를 입력하거나 포럼의 전체 도메인을 입력하십시오. 여기에 http://forum.example.com을 입력합니다.

nodebb를 입력할 때 MongoDB 사용자 이름과 MongoDB를 구성하는 동안 해당 사용자 이름에 대해 이전에 선택한 암호를 입력하라는 메시지가 표시될 때까지 기본값을 계속 선택합니다. 데이터베이스 nodebb를 선택해야 합니다. 또한 관리자 사용자 및 해당 세부 정보를 생성하라는 메시지가 표시됩니다.

설정이 완료되면 다음 명령을 실행하여 NodeBB를 시작합니다.

$ ./nodebb start

이제 귀하의 포럼이 실행 중입니다. http://:4567을 통해 액세스할 수 있어야 합니다.

NodeBB에 대한 연결이 끊어진 것 같습니다. 다시 연결하는 동안 기다려 주십시오라는 오류 메시지가 표시될 수 있습니다. http://가 아닌 NodeBB http://forum.example.com의 기본 URL을 선택했기 때문에 나타납니다. 그러나 설정 중에 IP 주소를 입력하면 더 이상 오류가 발생하지 않지만 나중에 포럼의 도메인을 선택한 후 다시 구성해야 합니다.

NodeBB 사용자를 종료하십시오.

$ exit

7단계 - Nginx 설치

Ubuntu 20.04는 기본적으로 Nginx의 안정적인 최신 버전을 제공합니다. 우리는 그것을 설치할 것입니다.

$ sudo apt install nginx

제대로 설치되었는지 확인합니다.

$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

Nginx를 시작하고 활성화합니다.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

웹 브라우저에서 서버 IP 주소를 엽니다. 서버가 실행 중임을 의미하는 다음 페이지가 표시되어야 합니다.

8단계 - Nginx 구성

다음 명령을 실행하여 사이트에 대한 구성 파일을 추가하십시오.

$ sudo nano /etc/nginx/sites-available/nodebb.conf

편집기에 다음 코드를 붙여넣습니다.

server {
    listen 80;

    server_name forum.example.com;
    
    access_log /var/log/nginx/forum.example.com.access.log;
    error_log /var/log/nginx/forum.example.com.error.log;

    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";
    }
}

Ctrl + X를 눌러 편집기를 종료하고 프롬프트가 표시되면 Y를 입력합니다.

완료되면 Nginx 구성이 올바른지 확인하십시오.

$ sudo nginx -t

Nginx 서비스를 다시 로드하여 구성을 활성화합니다.

$ sudo systemctl reload nginx

NodeBB 포럼을 열려면 브라우저에서 http://forum.example.com을 방문하세요.

9단계 - NodeBB를 시스템 서비스로 실행

시스템 재부팅 후 NodeBB 서비스가 실행되지 않습니다. 매번 NodeBB를 시작하지 않으려면 시스템 서비스로 설치해야 합니다.

먼저 NodeBB 서비스를 중지하십시오.

$ ./nodebb stop

다음 명령을 실행하여 nodebb.service 시스템 단위 구성 파일을 만들고 편집합니다.

$ sudo nano /etc/systemd/system/nodebb.service

편집기에 다음 코드를 붙여넣습니다.

[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service

[Service]
Type=forking
User=nodebb

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always

[Install]
WantedBy=multi-user.target

여기에서 우리는 6단계에서 만든 nodebb라는 사용자 이름과 NodeBB를 설치하기 위해 선택한 경로를 선택했습니다.

NodeBB 서비스를 활성화합니다.

$ sudo systemctl enable nodebb

NodeBB 서비스를 시작합니다.

$ sudo systemctl start nodebb

서비스 상태를 확인합니다.

$ sudo systemctl status nodebb

10단계 - Let’s Encrypt SSL 인증서 받기

NodeBB 포럼을 HTTPS로 보호하는 것은 사이트 트래픽을 보호하는 데 필요한 단계입니다. 이 자습서에서는 Certbot 클라이언트를 사용하여 SSL을 설치합니다.

먼저 Certbot 도구를 설치합니다.

$ sudo apt install certbot python3-certbot-nginx

인증서를 생성합니다.

$ sudo certbot --nginx -d forum.example.com

시스템에서 Certbot을 처음 실행하는 경우 이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. 또한 거절할 수 있는 EFF 재단과의 데이터 공유에 동의하는지 여부를 묻는 메시지가 표시됩니다. 그런 다음 Certbot은 Lets Encrypt 서버와 통신하고 도메인을 확인하기 위해 챌린지를 실행합니다.

성공하면 HTTPS 리디렉션을 처리하는 방법을 묻는 메시지가 표시됩니다.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

보안 항목을 선택하고 Enter 키를 누릅니다. 이렇게 하면 http 도메인에 대한 모든 요청이 https 버전으로 올바르게 리디렉션됩니다. 그러면 인증서가 생성되고 Nginx 구성 파일이 SSL 설정으로 업데이트됩니다.

인증서가 준비되었으며 지금 https://forum.example.com으로 이동하여 사이트를 열 수 있습니다.

11단계 - SSL 자동 갱신 확인

이 튜토리얼을 마치기 전 마지막 단계입니다.

갱신 프로세스의 시험 실행을 수행하여 갱신 프로세스를 확인하십시오.

$ sudo certbot renew --dry-run

오류가 발생하지 않으면 설정이 완료된 것입니다. Certbot이 자동으로 인증서를 갱신합니다. 인증서 만료에 대한 경고 이메일이 전송됩니다.

결론

이것이 이 튜토리얼의 전부입니다. NodeBB 포럼 설정이 완료되었습니다. 질문이 있으시면 아래 의견에 게시하십시오.