웹사이트 검색

Ubuntu 22.04에서 Nginx로 Sails.js 프레임워크를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - NVM(노드 버전 관리자) 설치
  4. 3단계 - Node.js 설치
  5. 4단계 - Sails.js 설치
  6. 5단계 - 데모 애플리케이션 만들기\n
  7. 6단계 - systemd 서비스 파일 생성
  8. 7단계 - Nginx 설치
  9. 8단계 - SSL 설치
  10. 9단계 - Nginx 구성
  11. 10단계 - Sails.js 앱에 액세스
  12. 결론

Sails.js는 Node.js용 풀 스택 MVC JavaScript 프레임워크입니다. 실시간 웹 애플리케이션 개발에 사용됩니다. Ruby on Rails에서 영감을 받았지만 데이터 기반 API 및 확장 가능한 서비스 지향 아키텍처를 지원합니다. MySQL, PostgreSQL, MongoDB, Redis 등과 같은 데이터베이스와 함께 사용할 수 있는 Waterline이라는 강력한 ORM(Object-Relational Mapping)을 사용합니다.

이 자습서에서는 Sails.js 프레임워크를 설치하여 테스트 앱을 만들고 Ubuntu 22.04 서버에서 Lets Encrypt SSL과 함께 Nginx 서버를 사용하여 배포하는 방법을 배웁니다.

전제 조건

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • The Uncomplicated Firewall(UFW) is enabled and running.

  • A Fully Qualified domain name pointed to the server. For our tutorial, we will be using the domain sails.example.com.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    

1단계 - 방화벽 구성

패키지를 설치하기 전 첫 번째 단계는 HTTP 및 HTTPS 연결을 허용하도록 방화벽을 구성하는 것입니다.

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

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

HTTP 및 HTTP 포트를 허용합니다.

$ sudo ufw allow http
$ sudo ufw allow https

상태를 다시 확인하여 확인하십시오.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - 노드 버전 관리자(NVM) 설치

노드 버전 관리자(nvm) 애플리케이션을 사용하여 노드를 설치합니다. NVM을 사용하여 여러 버전의 Node를 설치하고 쉽게 전환할 수 있습니다. 다음 명령을 실행하여 NVM을 다운로드하고 설치합니다.

Github 릴리스 페이지에서 최신 버전의 NVM을 확인하세요. 이 튜토리얼을 작성하는 시점에 v0.39.1이 사용 가능한 최신 버전입니다.

$ NVMVERSION=0.39.1
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/$NVMVERSION/install.sh | bash

터미널을 새로 고칩니다.

$ source ~/.bashrc

NVM이 설치되어 있는지 확인합니다.

$ command -v nvm

성공적으로 설치되면 다음 출력이 표시되어야 합니다.

nvm

3단계 - Node.js 설치

최신 버전의 Node.js LTS(장기 지원) 릴리스를 설치합니다. 그렇게 하려면 다음 명령을 실행하십시오.

$ nvm install --lts

Node.js가 설치되어 있는지 확인합니다.

$ node --version
v16.17.0

4단계 - Sails.js 설치

이제 Node.js가 설치되었으므로 Sails.js 프레임워크를 설치할 차례입니다. 전역으로 설치하려면 다음 명령을 실행하십시오.

$ npm -g install sails

Sails.js 프레임워크가 설치되어 있는지 확인합니다.

$ sails --version
1.5.3

--help 플래그를 사용하여 sails 명령줄 응용 프로그램에서 사용할 수 있는 다른 명령을 확인할 수 있습니다.

$ sails --help

다음 출력을 받게 됩니다.

Usage: sails [command]

  Options:

    -v, --version  output the version number
    -h, --help     output usage information

  Commands:

    version
    lift|l [options]
    new [options] [path_to_new_app]
    generate
    upgrade
    migrate
    console|c [options]
    www
    debug                            (for Node v5 and below)
    inspect                          (for Node v6 and above)
    run
    test
    lint
    deploy
    debug-console|dc
    help [command]

5단계 - 데모 애플리케이션 만들기

다음 명령을 실행하여 데모 애플리케이션을 생성하십시오.

$ sails new howtoforge-app

다음 두 가지 옵션이 제공됩니다.

Choose a template for your new Sails app:
 1. Web App  ·  Extensible project with auth, login, & password recovery
 2. Empty    ·  An empty Sails app, yours to configure
 (type "?" for help, or <CTRL+C> to cancel)

1을 입력하면 인증, 로그인 페이지 및 비밀번호 복구 기능이 있는 본격적인 애플리케이션을 위한 사전 정의된 템플릿을 사용할 수 있습니다. 빈 슬레이트로 시작하려면 옵션 2로 이동하십시오.

옵션 1을 사용하겠습니다. 프로세스가 완료될 때까지 몇 분 정도 기다려야 합니다.

? 1
 info: Installing dependencies...
Press CTRL+C to cancel.
(to skip this step in the future, use --fast)
 info: Created a new Sails app `howtoforge-app`!

새로 생성된 애플리케이션의 작업 디렉토리로 전환합니다. 디렉토리 이름은 애플리케이션과 동일합니다.

$ cd howtoforge-app

폴더 목록을 확인하십시오. 이 폴더에는 응용 프로그램을 시작하는 데 필요한 모든 필수 파일과 패키지가 설치되어 있습니다.

$ ls
total 944
drwxrwxr-x   9 navjot navjot   4096 Aug 23 07:14 .
drwxr-x---   8 navjot navjot   4096 Aug 23 07:13 ..
drwxrwxr-x   8 navjot navjot   4096 Aug 23 07:13 api
-rw-rw-r--   1 navjot navjot   1841 Aug 23 07:13 app.js
drwxrwxr-x   8 navjot navjot   4096 Aug 23 07:13 assets
drwxrwxr-x   4 navjot navjot   4096 Aug 23 07:13 config
-rw-rw-r--   1 navjot navjot   1046 Aug 23 07:13 .editorconfig
-rw-rw-r--   1 navjot navjot     44 Aug 23 07:13 .eslintignore
-rw-rw-r--   1 navjot navjot   4228 Aug 23 07:13 .eslintrc
-rw-rw-r--   1 navjot navjot   3531 Aug 23 07:13 .gitignore
-rw-rw-r--   1 navjot navjot    669 Aug 23 07:13 Gruntfile.js
-rw-rw-r--   1 navjot navjot    709 Aug 23 07:13 .htmlhintrc
-rw-rw-r--   1 navjot navjot   2162 Aug 23 07:13 .lesshintrc
drwxrwxr-x 510 navjot navjot  20480 Aug 23 07:14 node_modules
-rw-rw-r--   1 navjot navjot    369 Aug 23 07:13 .npmrc
-rw-rw-r--   1 navjot navjot   6151 Aug 23 07:13 package.json
-rw-rw-r--   1 navjot navjot 854958 Aug 23 07:14 package-lock.json
-rw-rw-r--   1 navjot navjot   1732 Aug 23 07:13 README.md
-rw-rw-r--   1 navjot navjot    123 Aug 23 07:13 .sailsrc
drwxrwxr-x   2 navjot navjot   4096 Aug 23 07:13 scripts
drwxrwxr-x   4 navjot navjot   4096 Aug 23 07:13 tasks
drwxrwxr-x   5 navjot navjot   4096 Aug 23 07:13 views

Sails 애플리케이션을 실행합니다. 다음 명령은 개발 모드에서 애플리케이션을 시작합니다. Sails.js는 Grunt 도구를 사용하여 /assets 폴더를 모니터링합니다. 해당 폴더에서 무엇이든 변경하면 브라우저에 자동으로 반영됩니다. 템플릿이 메모리에 캐시되지 않기 때문에 Sails를 다시 시작하지 않고도 보기 파일을 변경할 수 있습니다.

$ sails lift

응용 프로그램이 성공적으로 시작되면 다음과 같은 출력이 표시됩니다.

 info: Starting app...

 info: Initializing project hook... (`api/hooks/custom/`)
 info: Initializing `apianalytics` hook...  (requests to monitored routes will be logged!)
 info: ·• Auto-migrating...  (alter)
 info:    Hold tight, this could take a moment.
 info:  ? Auto-migration complete.

debug: Running v0 bootstrap script...  (looks like this is the first time the bootstrap has run on this computer)
 info:
 info:                .-..-.
 info:
 info:    Sails              <|    .-..-.
 info:    v1.5.3              |\
 info:                       /|.\
 info:                      / || \
 info:                    ,'  |'  \
 info:                 .-'.-==|/_--'
 info:                 `--'-------'
 info:    __---___--___---___--___---___--___
 info:  ____---___--___---___--___---___--___-__
 info:
 info: Server lifted in `/home/navjot/howtoforge-app`
 info: To shut down Sails, press <CTRL> + C at any time.
 info: Read more at https://sailsjs.com/support.

debug: -------------------------------------------------------
debug: :: Tue Aug 23 2022 09:01:32 GMT+0000 (Coordinated Universal Time)

debug: Environment : development
debug: Port        : 1337
debug: -------------------------------------------------------

Sails.js는 앱을 포트 1337에 노출합니다. 애플리케이션에 액세스하려면 포트를 열어야 합니다. 서버에 다른 터미널을 실행하고 다음 명령을 실행하여 포트를 엽니다.

$ sudo ufw allow 1337

브라우저에서 URL http://:1337을 실행합니다. 다음 페이지가 나타납니다.

터미널에서 Ctrl + C를 눌러 Sails 애플리케이션을 종료합니다.

6단계 - systemd 서비스 파일 생성

현재 Sails 앱은 터미널이 활성화된 경우에만 작동합니다. 재부팅 후에도 지속성을 유지하려면 Sails에 대한 systemd 서비스 파일을 생성해야 합니다.

편집을 위해 howtoforge-app.service 파일을 만들고 엽니다.

$ sudo nano /etc/systemd/system/howtoforge-app.service

다음 코드를 붙여넣습니다.

[Unit]
After=network.target

[Service]
Type=simple
User=navjot
WorkingDirectory=/home/navjot/howtoforge-app
ExecStart=/home/navjot/.nvm/versions/node/v16.17.0/bin/node app.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

User, WorkingDirectoryExecStart 변수의 값을 시스템 사용자 이름, 애플리케이션 경로 및 노드 애플리케이션의 경로입니다. Node.js의 경로를 찾으려면 다음 명령을 사용할 수 있습니다.

$ which node
/home/navjot/.nvm/versions/node/v16.17.0/bin/node

시스템 스크립트를 통해 구성하고 실행하는 것이 더 쉽기 때문에 Sails CLI 애플리케이션 대신 Node.js를 사용하고 있습니다. Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

변경 사항을 적용하려면 시스템 데몬을 다시 로드하십시오.

$ sudo systemctl daemon-reload

Sails.js 서비스를 시작하고 시스템 부팅 시 시작되도록 활성화합니다.

$ sudo systemctl enable howtoforge-app --now

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

$ sudo systemctl status howtoforge-app
? howtoforge-app.service - Sails.js Howtoforge App
     Loaded: loaded (/etc/systemd/system/howtoforge-app.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-08-23 11:52:58 UTC; 5s ago
   Main PID: 15385 (node)
      Tasks: 22 (limit: 2237)
     Memory: 123.8M
        CPU: 3.894s
     CGroup: /system.slice/howtoforge-app.service
             ??15385 /home/navjot/.nvm/versions/node/v16.17.0/bin/node app.js
             ??15392 grunt "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">

Aug 23 11:53:01 sails node[15385]:  info:  ____---___--___---___--___---___--___-__
Aug 23 11:53:01 sails node[15385]:  info:
Aug 23 11:53:01 sails node[15385]:  info: Server lifted in `/home/navjot/howtoforge-app`
Aug 23 11:53:01 sails node[15385]:  info: To shut down Sails, press <CTRL> + C at any time.
Aug 23 11:53:01 sails node[15385]:  info: Read more at https://sailsjs.com/support.
Aug 23 11:53:01 sails node[15385]: debug: -------------------------------------------------------
Aug 23 11:53:01 sails node[15385]: debug: :: Tue Aug 23 2022 11:53:01 GMT+0000 (Coordinated Universal Time)
Aug 23 11:53:01 sails node[15385]: debug: Environment : development
Aug 23 11:53:01 sails node[15385]: debug: Port        : 1337
Aug 23 11:53:01 sails node[15385]: debug: -------------------------------------------------------

브라우저에서 URL http://:1337을 열어 서비스를 확인할 수 있습니다.

7단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginxs 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxs 안정 버전용 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

시스템 리포지토리를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.0

8단계 - SSL 설치

SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core
$ sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령을 실행하여 SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d sails.example.com

위의 명령은 서버의 /etc/letsencrypt/live/sails.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

편집을 위해 /etc/letsencrypt/renewal/sails.example.com.conf 파일을 엽니다.

$ sudo nano /etc/letsencrypt/renewal/sails.example.com.conf

하단에 다음 코드를 붙여넣습니다.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Certbot의 독립 실행형 옵션을 사용하여 SSL 인증서를 생성했습니다. 갱신 중에 Nginx를 종료해야 함을 의미하는 인증서를 생성하기 위해 웹 서버를 실행합니다. pre_hook 및 post_hook 명령은 갱신 전후에 실행되어 Nginx 서버를 자동으로 종료하고 다시 시작하므로 수동 개입이 필요하지 않습니다.

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 시험 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

9단계 - Nginx 구성

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

편집을 위해 /etc/nginx/conf.d/sails.conf 파일을 만들고 엽니다.

$ sudo nano /etc/nginx/conf.d/sails.conf

다음 코드를 붙여넣습니다. sails.example.com을 도메인 이름으로 바꿉니다. client_max_body_size의 값이 10MB로 설정되어 있는지 확인하십시오. 요구 사항에 따라 변경하십시오.

upstream backend {
   server 127.0.0.1:1337;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name sails.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name sails.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/sails.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/sails.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/sails.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;
   
   access_log /var/log/nginx/sails.access.log main;
   error_log  /var/log/nginx/sails.error.log;

   location / {
       client_max_body_size 10M;
       proxy_set_header Host $http_host;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       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 X-Frame-Options SAMEORIGIN;
       proxy_buffering off;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t

Nginx 서버를 다시 시작합니다.

$ sudo systemctl restart nginx

10단계 - Sails.js 앱에 액세스

브라우저에서 URL https://sails.example.com을 실행하면 Sails 홈페이지가 표시됩니다.

오른쪽 상단의 회원가입 버튼을 클릭하여 새 계정을 만드세요.

계정 세부 정보를 입력하고 계정 만들기 버튼을 클릭하여 완료합니다.

환영 화면으로 즉시 이동됩니다.

이제 애플리케이션을 사용하여 사용자 인증, 데이터베이스 지원 및 Stripe에서 제공하는 내장 결제 게이트웨이를 통해 동적 애플리케이션을 구축할 수 있습니다.

결론

이것으로 Sails.js 프레임워크를 설치하고 데모 애플리케이션을 생성하는 방법을 학습한 자습서가 완료되었습니다. 또한 시스템 서비스를 설정하고 Lets Encrypt와 함께 Nginx 프록시 서버를 사용하여 보안 웹 애플리케이션을 시작하는 방법도 배웠습니다. 질문이 있으시면 아래 의견에 게시하십시오.