Поиск по сайту:

Как установить Sails.js Framework с Nginx на Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите диспетчер версий узлов (NVM)
  4. Шаг 3. Установите Node.js
  5. Шаг 4. Установите Sails.js
  6. Шаг 5. Создайте демонстрационное приложение
  7. Шаг 6. Создайте файл службы systemd
  8. Шаг 7. Установите Nginx
  9. Шаг 8. Установите SSL
  10. Шаг 9. Настройка Nginx
  11. Шаг 10. Доступ к приложению Sails.js
  12. Заключение

Sails.js — это полнофункциональная среда JavaScript MVC для Node.js. Он используется для разработки веб-приложений в реальном времени. Он вдохновлен Ruby on Rails, но с поддержкой API, управляемых данными, и масштабируемой сервис-ориентированной архитектуры. Он использует мощное объектно-реляционное сопоставление (ORM) под названием Waterline, которое позволяет использовать его с такими базами данных, как MySQL, PostgreSQL, MongoDB, Redis и т. д.

В этом руководстве вы узнаете, как установить платформу Sails.js для создания тестового приложения и развернуть его с помощью сервера Nginx вместе с Lets Encrypt SSL на сервере Ubuntu 22.04.

Предпосылки

  • 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 и HTTPS.

$ 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)

Мы установим Node с помощью приложения Node Version Manager (nvm). Вы можете использовать NVM для установки нескольких версий Node и легко переключаться между ними. Выполните следующую команду, чтобы загрузить и установить NVM.

Проверьте последнюю версию NVM на странице выпусков Github. На момент написания этого руководства 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

Мы установим последнюю версию LTS (долгосрочная поддержка) выпуска Node.js. Для этого выполните следующую команду.

$ 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

Вы можете проверить другие команды, доступные в приложении командной строки sails, используя флаг --help.

$ 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.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 работает только при активном терминале. Чтобы он оставался постоянным при перезагрузках, нам нужно создать служебный файл systemd для Sails.

Создайте и откройте файл 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, WorkingDirectory и ExecStart на имя пользователя вашей системы, путь к приложению и путь к вашему приложению node. Чтобы найти путь к Node.js, вы можете использовать следующую команду.

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

Мы используем Node.js вместо приложения Sails CLI, потому что его проще настроить и запустить через системный скрипт. Сохраните файл, нажав 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

Добавьте репозиторий для стабильной версии Nginx.

$ 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

Установите Нгинкс.

$ sudo apt install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.0

Шаг 8 — Установите SSL

Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.

$ sudo snap install core
$ sudo snap refresh core

Установите Сертбот.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог /usr/bin.

$ 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 на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

$ 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 при появлении запроса.

Мы создали сертификат SSL, используя автономную опцию Certbot. Он запускает свой веб-сервер для создания сертификата, что означает, что 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 установлено на 10 МБ. Измените его в соответствии с вашими требованиями.

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 и создать демонстрационное приложение, завершено. Вы также узнали, как настроить для него службу systemd и использовать прокси-сервер Nginx с Lets Encrypt для запуска защищенного веб-приложения. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.