Рубрики
Uncategorized

Разверните свой сайт Adonis

Люди часто предполагают, что любые разработчики должны знать, как развернуть приложение на удаленный сервер. … Помечено с сервером, узлом, DEVOPS, ADONISJS.

Люди часто предполагают, что любые разработчики должны знать, как развернуть приложение на удаленный сервер. Реальный случай состоит в том, что многие люди чувствуют себя комфортно, чтобы нажать на веб-сайт для производства.

В этой статье используются Framework Node.js Adonisjs В качестве примера, но концепция, которую вы узнаете, одинакова для любых узлов языков или структур.

Шаг 1: Создайте сервер

Первое, что нужно сделать, это создать сервер. Предположим, что у вас нет доступного VPS (виртуального частного сервера) и Я использую услугу Цифровой океан Для размещения моего сервера, но любой VPS может это сделать.

В цифровом океане « Создать капельку » страница, я выбираю последнюю версию Ubuntu и наименьшего сервера, который я могу иметь. Этот сервер будет достаточным для запуска нескольких приложений Adonis.

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

Шаг 2: Закрепите свой сервер

Когда ваш VPS создан и доступно использовать SSH подключиться к нему.

> ssh root@IP_OF_YOUR_DROPLET

После подключения, первое, что мы сделаем, это безопасно сервер.

Изменить пароль root

Введите команду Passwd и изменить пароль на что-то длинное и сложное. Вам не нужно помнить это, когда вы будете работать на вашем сервере. Храните его где-то в безопасности.

Обновите свой сервер

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

> apt update
> apt upgrade

Включить автоматические обновления безопасности

Обновления безопасности имеют решающее значение и могут быть автоматизированы. Там нет необходимости подключаться ко всем своим серверам каждый день, чтобы запустить простые APT обновление & APT обновление Команда для исправления дырок безопасности.

> apt install unattended-upgrades
> vim /etc/apt/apt.conf.d/10periodic

Обновите файл конфигурации, чтобы выглядеть следующее:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Установить Fail2ban

Fail4ban это услуга, которая сканирует журналы вашего сервера и BANS IP, который показывает вредоносное поведение (вроде слишком много сбоев паролей, сканирование портов и т. Д.).

> apt install fail2ban

Конфигурация по умолчанию отлично для большинства людей, но если вы хотите изменить его, не стесняйтесь следовать их документация Отказ

Создайте своего пользователя

Вы никогда не должны работать с root Пользователь; Он имеет полный контроль без каких-либо ограничений, которые могут подвергнуть вашу систему риску. Я использую имя пользователя Romain , не стесняйтесь менять это.

> useradd -m -s /bin/bash -G sudo romain
> passwd romain
> mkdir /home/romain/.ssh
> chmod 700 /home/romain/.ssh

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

> vim /home/romain/.ssh/authorized_keys
> chmod 400 /home/romain/.ssh/authorized_keys
> chown romain:romain /home/romain -R

Прежде чем продолжить, убедитесь, что вы можете подключиться к своему серверу с этим пользователем.

> exit  # Quit the SSH session
> ssh romain@IP_OF_YOUR_DROPLET

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

> sudo whoami # Should display root

Lockdown SSH.

По умолчанию SSH позволяет кому-либо подключиться через свой пароль и подключаться к корню. Это хорошая практика, чтобы отключить это и использовать только SSH-ключи.

> sudo vim /etc/ssh/sshd_config

Поиск и измените следующие строки для изменения конфигурации.

PermitRootLogin no
PasswordAuthentication no

Изменить порт SSH

Мне нравится менять порт по умолчанию SSH Service. У нас есть Fail4ban Чтобы защитить нас от входа в систему Brute-Force, но было бы даже лучше, если мы избегаем их.

Почти все боты, которые будут пытаться грубые силы, система входа в систему будет достигнут SSH с его портом по умолчанию, который является 22 Отказ Если они не обнаруживают, что этот порт открыт, они оставит ваш сервер.

Еще в /etc/ssh/sshd_config Изменить файл следующей строки:

Port XXXXX

Выберите порт от 49152 до 65535. Это динамический и личный ассортимент доступных портов.

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

> sudo service ssh restart
> exit # If you aren't disconnected
> ssh romain@IP_OF_YOUR_DROPLET -p XXXXX

Обновление: Похоже, что изменение по умолчанию SSH-порт может быть плохой идеей по некоторым причинам. Вы можете прочитать больше о тех в Эта статья Отказ

Установите брандмауэр

Ubuntu приходит в комплекте с отличным брандмауэром UFW. . Давайте настроим это.

> sudo ufw default allow outgoing
> sudo ufw default deny incoming
> sudo ufw allow XXXXX  # It's the port you used for your SSH configuration
> sudo ufw allow 80
> sudo ufw allow 443

Обязательно позволите правильно разрешить порт SSH. В противном случае он заблокирует вас из вашего сервера!

Наконец, включите брандмауэр, используя следующую команду:

sudo ufw enable

Шаг 3: Создайте развертывание пользователя

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

> sudo useradd -m -s /bin/bash deploy

Нам не нужно настроить ключ SSH для этого пользователя, поскольку никто не подключатся к нему напрямую. Вы сможете получить доступ к этому пользователю, используя следующую команду:

> sudo -i -u deploy

Шаг 4: Установка требуемых зависимостей

Nginx.

Nginx Будет наш веб-сервер. Мы используем его, чтобы закрепить любые входящие запросы HTTP (S) в локальный порт.

> sudo apt install nginx

Система управления базами данных

Приложение часто использует СУБД для хранения данных. Мы будем использовать Мариадб в этой статье. Запустите следующую команду, чтобы установить его, а затем следите за мастером конфигурации.

> sudo apt install mariadb-server

NVM.

В это время вы должны быть подключены как ваш развертывать Пользователь.

NVM Диспетчер версий узла. Это поможет нам установить и поддерживать обновление версии Node.js.

> curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

Затем добавляет следующие строки в свой профиль ( ~/bash_profile , ~/.zshrc , ~/profile или ~/.bashrc ):

export NVM_DIR="${XDG_CONFIG_HOME/:-$HOME/.}nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

После этого вам нужно перезапустить оболочку, чтобы иметь доступ к NVM команда. Когда это сделано, вы можете установить последнюю версию Node.js, используя следующую команду:

> nvm install node

PM2.

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

> npm install pm2 -g

Шаг 5: Разверните свое приложение

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

После того, как вы настроите ключ развертывания SSH, следуя документации вашего поставщика GIT, клонировать хранилище внутри /Главная/Развертывание/www Отказ

> cd ~  # This takes us the the home folder of the current user
> mkdir www
> cd www
> git clone https://github.com/adonisjs/adonis-fullstack-app.git example.com
> cd example.com
> npm i --production

Клонировать вашу .env.example Значения файла и изменения в соответствии с вашей настройкой.

> cp .env.example .env
> vim .env

Пришло время управлять своими миграциями и семенами.

> node ace migration:run --force
> node ace seed --force

Проверьте, что ваше приложение работает без каких-либо проблем, используя следующую команду:

> node server.js  # Followed by Ctrl+C to kill it

Шаг 6: Настройте nginx

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

Это нужно сделать с вашим пользователем, роман в моем случае.

Сначала удалите настройку по умолчанию и создайте файл конфигурации для вашего сайта. Мне нравится называть их с их URL, example.com здесь.

> sudo rm /etc/nginx/sites-available/default
> sudo rm /etc/nginx/sites-enabled/default
> sudo vim /etc/nginx/sites-available/example.com

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

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  server_name example.com;

  # Our Node.js application
  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;
  }
}

Последнее, что нужно сделать, это включить эту конфигурацию и запустить ваше приложение.

> sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
> sudo service nginx restart
> sudo -i -u deploy
> pm2 start /home/deploy/www/example.com/server.js --name app

Если вы правильно настроили DNS, вы должны иметь доступ к вашему приложению. В противном случае, так как мы использовали default_server Директива в нашем Слушать Команда, ваше приложение будет отображено по умолчанию при ударе на IP вашего сервера.

Шаг 7: Автоматизация через скрипт развертывания

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

> vim /home/deploy/www/deploy-example.sh

Этот скрипт просто сделает то, что мы сделали раньше:

  1. Вытащить новые изменения с вашего хранилища;
  2. Установите новые зависимости;
  3. Запускать миграции;
  4. Перезапустите приложение.
# Content of your script
cd ~/www/example.com
git pull
npm i --production
node ace migration:run --force
pm2 restart app

Добавьте х Флаг, чтобы иметь возможность запустить его.

> chmod +x /home/deploy/www/deploy-example.sh

Теперь, когда вы хотите опубликовать новый релиз, запустите скрипт Deploy-example.sh с Развертывание . Пользователь.

Шаг 8: Добавить SSL-сертификат

Последнее, что нужно сделать, это добавить сертификат SSL для защиты соединения между клиентами и нашим сервером. Мы будем использовать Certbot который автоматически включает HTTPS на вашем веб-сайте развертываю Давайте шифровать Сертификаты.

> sudo add-apt-repository universe
> sudo add-apt-repository ppa:certbot/certbot
> sudo apt update
> sudo apt install python-certbot-nginx

Тогда запустите Certbot И следуйте за мастером, чтобы создать и настроить свой сертификат.

> sudo certbot --nginx

Благодаря Ethienne Napoleone для его доказательства.

Оригинал: «https://dev.to/romainlanz/deploy-your-adonis-website-17ec»