Запуск приложения linux server

Запуск Node.js приложения на Ubuntu 18.04

Node.js — это среда выполнения JavaScript с открытым исходным кодом для создания серверных и сетевых приложений. Node js сервер может работать на Linux, macOS, FreeBSD и Windows.

Вы можете запускать приложения Node.js из командной строки, однако подобный подход обычно используется для локального тестирования приложения. В этом руководстве основное внимание будет уделено запуску вашего приложения в “боевом” окружении.

В этой статье мы настроим хостинг Node js server на Ubuntu 18.04. Этот сервер будет запускать приложение Node.js, управляемое PM2 , и предоставлять пользователям безопасный доступ к приложению через прокси-сервер Nginx.

Что вам потребуется

В этом руководстве предполагается, что у вас:

  • Настроен сервер Ubuntu 18.04. У вас должен быть пользователь без полномочий root с правами sudo и активным брандмауэром.
  • Доменное имя указывает на IP вашего сервера. Для удобства в этой статье будет использоваться имя домена example.com.
  • Nginx на сервере установлен.
  • Nginx настроен с использованием сертификатов Let’s Encrypt.

Таким образом, на начальном этапе у вас есть сервер, обслуживающий страницу-“заглушку” вашего домена https://example.com/

Шаг 1 — Установка Node js

Давайте начнем с установки последней версии LTS Node.js с использованием архивов пакетов NodeSource .

Сначала установите NodeSource PPA, чтобы получить доступ к его содержимому. Убедитесь, что вы находитесь в своем домашнем каталоге, и используйте curl для получения сценария установки для архивов Node.js 8.x:

cd ~ curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh 

Вы можете проверить содержимое этого скрипта с помощью nano или предпочитаемого вами текстового редактора:

Когда вы закончите проверку скрипта, запустите его через sudo :

sudo bash nodesource_setup.sh 

PPA будет добавлен в вашу конфигурацию, и ваш локальный кэш пакетов будет обновлен автоматически. После запуска сценария установки из Nodesource вы можете установить Node js server side:

Чтобы проверить, какую версию Node.js вы установили после этих начальных шагов, введите:

Примечание. При установке из NodeSource PPA вызывается исполняемый файл Node.js nodejs , а не node .

nodejs Пакет содержит nodejs бинарный файл, а также менеджер пакетов npm , так что вам не нужно устанавливать npm отдельно.

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

Чтобы некоторые npm пакеты работали (например, требующие компиляции кода из исходного кода), вам необходимо установить build-essential пакет:

sudo apt install build-essential 

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

Установив среду выполнения Node.js, давайте перейдем к написанию приложения Node.js.

Шаг 2 — Создание приложения Node.js

Давайте напишем приложение Hello World, которое возвращает «Hello World» любым HTTP-запросам. Это приложение поможет вам настроить Node.js. Вы можете заменить его своим собственным приложением — просто убедитесь, что вы изменили свое приложение для прослушивания соответствующих IP-адресов и портов.

Читайте также:  Linux partition table repair

Сначала давайте создадим приложение под названием hello.js :

Вставьте следующий код в файл:

const http = require('http'); const hostname = 'localhost'; const port = 3000; const server = http.createServer((req, res) => < res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World!\n'); >); server.listen(port, hostname, () => < console.log(`Server running at http://$:$/`); >); 

Сохраните файл и выйдите из редактора.

Это приложение Node.js прослушивает указанные адреса ( localhost ) и порт ( 3000 ) и возвращает «Hello World!» с 200 кодом успеха HTTP. Поскольку мы слушаем localhost , клиенты не смогут подключиться к нашему приложению.

Чтобы протестировать ваше приложение, введите:

Вы увидите следующий вывод:

Server running at http://localhost:3000/ 

Примечание. Запуск приложения Node.js таким способом блокирует дополнительные команды до тех пор, пока приложение не будет завершено нажатием CTRL+C .

Чтобы протестировать приложение, откройте другую терминальную сессию на сервере, и подключитесь к localhost с curl :

Если вы видите следующий вывод, приложение работает правильно и прослушивает правильный адрес и порт:

Если вы не видите ожидаемого вывода, убедитесь что ваше Node js приложение запущено и настроено на прослушивание по правильному адресу и порту.

Если вы уверены, что это работает, завершите приложение (если вы еще этого не сделали), нажав CTRL+C .

Шаг 3 — Установка PM2

Далее давайте установим PM2, менеджер процессов для приложений Node.js. PM2 позволяет демонизировать приложения, чтобы они работали в фоновом режиме как службы.

Используйте npm для установки последней версии PM2 на ваш сервер:

sudo npm install pm2@latest -g 

-g опция указывает npm установить модуль на глобальном уровне , так что он доступен для всей системы.

Давайте сначала используем pm2 start команду для запуска вашего приложения hello.js , в фоновом режиме:

Это также добавляет ваше приложение в список процессов PM2, который выводится каждый раз, когда вы запускаете приложение:

Как видите, PM2 автоматически назначает App name (на основе имени файла, без .js расширения) и PM2 id . PM2 также поддерживает другую информацию, такую ​​как PID процесса, его текущем состоянии и использовании памяти.

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

Эта подкоманда генерирует и настраивает скрипт запуска для запуска PM2 и его управляемых процессов при загрузке сервера:

Последняя строка полученного результата будет включать команду для запуска с привилегиями суперпользователя, чтобы настроить PM2 для запуска при загрузке:

[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u alexey --hp /home/alexey 

Запустите команду из вывода с вашим именем пользователя вместо alexey :

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u alexey --hp /home/alexey 

В качестве дополнительного шага мы можем сохранить список процессов PM2 и соответствующие среды:

Теперь вы создали системный модуль, который запускает pm2 для вашего пользователя при загрузке. Он, в свою очередь, запускает hello.js .

Читайте также:  Linux команды по очереди

Запустите сервис с systemctl :

sudo systemctl start pm2-alexey 
systemctl status pm2-alexey 

Остановите приложение с помощью этой команды (укажите PM2 App name или id ):

pm2 restart app_name_or_id 

Перечислите приложения, в управляемые PM2:

Получить информацию о конкретном приложении, используя его App name :

Монитор процесса PM2 можно вызвать с помощью monit подкоманды. Это отобразит статус приложения, нагрузку на процессор и использование памяти:

При запуске pm2 без каких-либо аргументов будет отображена страница справки с примером использования.

Теперь, когда ваше приложение Node.js запущено и управляется PM2, давайте настроим прокси-сервер.

Шаг 4 — Настройка Nginx в качестве прокси-сервера

Ваше приложение работает и прослушивает localhost , но вам нужно настроить способ доступа к нему ваших пользователей. Для этой цели мы настроим веб-сервер Nginx в качестве прокси-сервера.

Откройте файл для редактирования: /etc/nginx/sites-available/example.com

sudo nano /etc/nginx/sites-available/example.com 

Внутри блока server у вас должен быть существующий location / блок. Замените содержимое этого блока конфигурацией ниже. Если ваше приложение настроено на прослушивание другого порта, укажите правильный номер порта:

Если это требуется, то вы можете добавить дополнительные location блоки, чтобы обеспечить доступ к другим приложениям на том же сервере. Например, если вы также запускаете другое приложение Node.js на порту 3001 , вы можете добавить следующий блок, чтобы разрешить доступ к нему через https://example.com/app2

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

Убедитесь, что вы не допустили никаких синтаксических ошибок, набрав:

sudo systemctl restart nginx 

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

Заключение

Поздравляем! Теперь у вас есть приложение Node.js, работающее за Nginx на сервере Ubuntu 18.04.

Источник

Запуск Flask приложения на Linux сервере

Изображение баннера

Эта статья для тех, кто хочет запустить сайт или API на Flask на своём сервере и сделать его доступным из интернета. Если Вы просто делаете заглушку для теста, или локальный веб сайт эти шаги, возможно, избыточны.

Введение

Первый деплой проекта на реальном сервере это всегда вызов.

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

Часто нужно навыки очень далёкие от того чему можно было научиться на уроках по синтаксису языка или какому-то фреймворку.

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

Мы будем запускать проект в следующем окружении:

Подготовка

Про установку и настройку Debian Linux читайте в статье Самоучитель Debian

Про установку Nginx в Debian и Ubuntu читайте статьи Nginx на Debian и Nginx на Ubuntu

Залогинимся на сервере и выполним

Pip

Проверим установлен ли pip3 командой

Если получили что-то вроде

pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

Тот Pip уже установлен, если нет — нужно выполнить

sudo apt install python3-pip

Подробности про pip можете прочитать здесь

Установка пакетов

Скопируем папку с нашим проектом на сервер, перейдём в директорию, в которой лежит файл requirements.txt и выполним

Читайте также:  Online linux ubuntu terminal

pip3 install -r requirements.txt

Если Вы получили предупреждение

The script flask is installed in ‘/home/andrei/.local/bin’ which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use —no-warn-script-location.

Значит нужно добавить ‘/home/andrei/.local/bin’ в PATH

Как это сделать можете прочитать в статье Linux PATH

Gunicorn

После успешной установки pip3 и пакетов-зависимостей нужно установить Gunicorn.

Есть и другие средства деплоить Flask, Вы можете изучить их здесь

sudo apt install gunicorn3

gunicorn можно установить через pip особенно полезным будет вариант установки gunicorn в виртуальном окружении.

В этом примере для простоты работы установка была сделана через apt

Допустим главный файл вашего приложения называется aredel_com.py и вы находитесь с ним в одной директории.

Команда для запуска приложения

[2020-06-19 12:49:13 +0300] [10692] [INFO] Starting gunicorn 19.9.0 [2020-06-19 12:49:13 +0300] [10692] [INFO] Listening at: http://127.0.0.1: 8000 (10692) [2020-06-19 12:49:13 +0300] [10692] [INFO] Using worker: sync [2020-06-19 12:49:13 +0300] [10695] [INFO] Booting worker with pid: 10695

Как Вы могли заметить Gunicorn слушает на порту 8000.

HTTP запросу нужно слушать на порту 80, но этим будет заниматься Nginx и потом перенаправлять на 8000.

Мы прячем Gunicorn за Nginx, так как у Nginx много возможностей по работе с нагрузкой и безопастностью, которых нет у Gunicorn.

Выключим Gunicorn нажав CTRL + C и запустим его как демон

gunicorn3 -D aredel_com:app

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

Чтобы убедиться в том, что gunicorn3 работает выполните

10704 ? 00:00:00 gunicorn3 10707 ? 00:00:00 gunicorn3

Чтобы проверить работает ли Nginx можно зайти на сервер с помощью браузера.

IP моего сервера 192.0.2.131

Про то как настраивать подключения по сети в Linux читайте статьи Debian Network и Ubuntu Network

Доступные сайты Nginx хранит в /etc/nginx/sites-available/

cd /etc/nginx/sites-available/
ls

drwxr-xr-x 2 root root 4096 syys 17 16:38 . drwxr-xr-x 8 root root 4096 syys 17 16:38 .. -rw-r—r— 1 root root 2416 maalis 26 2020 default

Дефолтный сайт, который вы можете увидеть введя в адресную строку браузера IP вашего сервера (у меня 192.0.2.131) выглядит примерно так:

Nginx default www.andreyolegovich.ru

Дефолтный сайт нам не нужен, поэтому можно его просто удалить

Настройка Nginx

Чтобы запустить свой сайт на Nginx будем следовать инструкции с gunicorn.org

Копируем кофигурацию для nginx. Советую делать это не отсюда а с сайта gunicorn

Если у Вас сложности с использованием vi прочитайте статью «Текстовый редактор vi»

Редактируем настройки, чтобы они больше соответствовали названию проекта

sudo service nginx restart

Более подробную информацию о настройке связки Nginx — Gunicorn Вы можете найти здесь

Про то как настроить запуск Gunicorn при перезагрузке системы читайте здесь

Итоги

Теперь если Вы зайдёте через браузер на Ваш сервер — там появится Ваше приложение.

Как это произошло: gunicorn3 запустил приложение Flask и слушал на порту 8000

Мы запустили Nginx, который слушает порт 80 и пробрасывает соединение на порт 8000 — обратите внимание на строку

Источник

Оцените статью
Adblock
detector