Как установить Sails.js Framework с Nginx на Ubuntu 22.04
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите диспетчер версий узлов (NVM)
- Шаг 3. Установите Node.js
- Шаг 4. Установите Sails.js
- Шаг 5. Создайте демонстрационное приложение
- Шаг 6. Создайте файл службы systemd
- Шаг 7. Установите Nginx
- Шаг 8. Установите SSL
- Шаг 9. Настройка Nginx
- Шаг 10. Доступ к приложению Sails.js
- Заключение
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://
в своем браузере. Вы получите следующую страницу.
Нажмите 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://
в своем браузере.
Шаг 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 для запуска защищенного веб-приложения. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.