DevGang
Авторизоваться

Как развернуть приложение Adonis.js в DigitalOcean 

Фреймворк Adonis.js, ориентированный на скорость и стабильность, был создан как альтернатива другим фреймворкам в экосистеме Node.js.

DigitalOcean - поставщик облачной инфраструктуры, предлагающий облачную платформу по запросу, на которой ваши приложения могут размещаться и управляться. В этом руководстве мы рассмотрим шаги по настройке вашего сервера и конфигурации вашей базы данных в DigitalOcean. Я также создал демонстрационное приложение в Adonis.js, которое мы развернем в DigitalOcean.

Для DigitalOcean доступны и другие варианты. Не стесняйтесь проверять или использовать любой из них. Ради будущих разработчиков мы будем использовать этот технический стек.

Предпосылки

Прежде чем мы продолжим это руководство, вы должны иметь следующее:

  1. Базовое понимание Node.js (в частности, Adonis.js)
  2. Базовые знания Git
  3. npm или Yarn установлены.
  4. Учетная запись DigitalOcean

Создайте droplet

Droplet - это сервер. Когда вы входите в свою учетную запись DigitalOcean, вам сначала нужно будет создать сервер. Нажмите кнопку «Create» в верхней части экрана, и мы создадим droplet.

Выберите образ операционной системы. В списках есть несколько вариантов. Мы выберем Ubuntu 20.04 (LTS), потому что она распространенная.

Затем мы выбираем план. Я советую выбрать самый маленький план, поскольку мы будем развертывать довольно простое приложение. При необходимости вы всегда можете увеличить масштаб позже. Имейте в виду, что уменьшение объема памяти в будущем невозможно.

Выберите регион расположения датацентра. Выберите тот, который вам ближе или где, по вашему мнению, в основном будут жить пользователи (для России это скорее Амстердам).

Затем нам нужно будет добавить наш SSH-ключ в droplet. Это очень важная часть, и здесь есть место для путаницы. SSH позволяет нам напрямую подключаться к удаленному серверу (DigitalOcean) с нашего компьютера.

Если у вас уже есть SSH-ключ, добавленный в DigitalOcean, вы можете выбрать это:

Если вы его не добавили, вам придется его сгенерировать. Скопируйте и вставьте свой SSH-ключ и дайте ему имя. Вы можете использовать руководство Github, чтобы создать его и скопировать в наш droplet.

В завершение, измените имя хоста, чтобы оно не генерировало случайный набор букв, и кликните Create Droplet.

Настроить сервер

Затем мы добавим SSH на наш сервер, чтобы продолжить. Но нам потребуются права администратора, поэтому давайте создадим нового пользователя и предоставим привилегии.

Войдите в систему как root с IP-адресом нашего сервера:

ssh root@105.112.72.138

Добавьте пользователя и запишите пароль, который вы использовали:

adduser dominic

Теперь давайте добавим этого пользователя в группу sudo, чтобы он мог запускать команды от root с ключевым словом sudo.

Итак, запустите это:

usermod -aG sudo dominic

Теперь, когда мы добавили dominic в группу sudo с админ привилегиями, мы также захотим добавить SSH-ключ для пользователя, чтобы мы могли войти на сервер.

su - dominic

Затем создайте каталог с именем .ssh, создайте файл authorized_keys, в котором будет храниться наш SSH-ключ, и измените разрешение каталога, чтобы его доступ был скрыт.

mkdir ~/.ssh
touch .ssh/authorized_keys
chmod 700 .ssh

Нам также нужно будет изменить разрешение файла, чтобы его могли читать все и изменять только пользователь domininc.

Теперь самый важный шаг - вставить в этот файл скопированный ключ SSH. Если вы его не скопировали, вернитесь к своему компьютеру и скопируйте его.

Откройте файл и вставьте содержимое в файл. Сохраните файл, нажмите esc, чтобы остановить редактирование, введите :wq чтобы записать (сохранить) и нажмите ENTER.

Добавьте огранияения на файл и выйдите:

chmod 600 ~/.ssh/authorized_keys
exit

Давайте вернемся к нашему серверу по SSH, но с нашим вновь созданным пользователем. Если это сработает, то мы готовы к следующему шагу.

ssh dominic@105.112.72.138

Установить и настроить MYSQL

Глядя на наше демонстрационное приложение, мы использовали MYSQL для его базы данных, поэтому нам нужно будет установить и настроить его на нашем сервере.

sudo apt install mysql-server
sudo mysql_server_installation

Затем нам нужно будет войти на сервер MYSQL и создать нового пользователя и базу данных.

mysql -u root -p

Замените USERNAMElocalhost и PASSWORD.

CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD';

Выполните следующие команды, чтобы мы могли использовать пароль при подключении MySQL.

ALTER USER 'USERNAME'@'LOCALHOST'IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

Затем мы создаем базу данных с пользователями:

CREATE DATABASE adonis_userAuth;

Затем мы предоставляем все привилегии, отправляем команду, чтобы он работал, и выходим:

GRANT ALL ON adonis_userAuth.* TO 'USERNAME'@'localhost';
FLUSH PRIVILEGES;
exit

Клонируем наше приложение на нашем сервере

Наша последняя задача - клонировать наше приложение Adonis.js из Github на наш сервер с помощью git. Итак, давайте снова подключимся к нашему серверу по SSH и клонируем наш репозиторий. Вы всегда можете использовать SSL для его клонирования.

git clone https://github.com/Vectormike/adonis_blogApi.git

Переходим в клонированный каталог и устанавливаем зависимости:

cd adonis_blogApi
npm install

У нас все еще есть переменные среды, которые нужно исправить в файле .env. Adonis.js считывает все переменные через файл. Эти переменные являются нашими настройками конфигурации.

Мы создаем этот файл .env, чтобы он мог содержать наши переменные для приложения Adonis.js.

touch .env

После создания мы генерируем ключ нашего приложения APP_KEY. Без этого наше приложение не запустится.

adonis key:generate

Это генерирует некоторые случайные числа. Скопируйте ключ и откройте файл .env, чтобы мы могли вставить все наши переменные, включая ключ приложения.

vim .env

Затем вставьте следующие переменные:

HOST=127.0.0.1
PORT=3333
NODE_ENV=production
APP_NAME=AdonisJs
APP_URL=http://${HOST}:${PORT}
CACHE_VIEWS=false
APP_KEY=mAqOZJTaXhbcvxPGVckSyUI1UeCeYIUM
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_DATABASE=adonis_userAuth
HASH_DRIVER=bcrypt

Нам нужно запустить миграцию, чтобы наши таблицы были созданы. Если ваша среда находится в production среде, вам может потребоваться добавить флаг --force, иначе он не будет создавать таблицы.

node ace migration:run --force

Наконец, мы запускаем наше приложение. Но что, если оно выйдет из строя? Вот почему у нас есть PM2, чтобы он автоматически перезагружался при сбое.

Запустите эту команду:

pm2 start server.js

Настроить Nginx

Нам нужно будет использовать Nginx для настройки обратного прокси. Это позволит нам получить доступ к нашему приложению извне, а не через нашу локальную сеть серверов. Таким образом, мы можем получить к нему доступ через IP-адрес или доменное имя, а не только через PORT.

Итак, открываем файл конфигурации Nginx и редактируем:

sudo vim /etc/nginx/sites-available/default

Вставьте конфигурацию ниже. Это скажет Nginx прослушивать входящий домен, связанный с ним, и перенаправлять все запросы на PORT в локальной сети сервера.

server_name DOMAIN_NAME_OR_IP_ADDRESS;

location / {
    proxy_pass http://localhost:3333;
    proxy_http_version 1.1;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Замените server_name своим IP-адресом или доменным именем (если установлено). Чтобы наши изменения заработали, мы должны перезапустить Nginx.

sudo service nginx restart

Теперь наше приложение будет доступно по IP-адресу нашего сервера.

Вывод

В этом руководстве мы узнали, как развернуть приложение Adonis.js в DigitalOcean. Мы также узнали, как настроить Nginx, чтобы настроить обратный прокси, настроить наш дроплет и настроить нашу базу данных в DigitalOcean.

Эта статья должна была объяснить каждый шаг, необходимый для развертывания нашего приложения.

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить