Люди часто предполагают, что любые разработчики должны знать, как развернуть приложение на удаленный сервер. Реальный случай состоит в том, что многие люди чувствуют себя комфортно, чтобы нажать на веб-сайт для производства.
В этой статье используются 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
Этот скрипт просто сделает то, что мы сделали раньше:
- Вытащить новые изменения с вашего хранилища;
- Установите новые зависимости;
- Запускать миграции;
- Перезапустите приложение.
# 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»