Настроить виртуальный сервер ноде js что это
Перейти к содержимому

Настроить виртуальный сервер ноде js что это

  • автор:

Установка и настройка Node.js

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

Для начала вам необходимо установить Node.js на свой аккаунт. Скачать любую версию Node.js можно с официального репозитория https://nodejs.org/dist/. На момент написания данного руководства, последним релизом являлась версия v10.6.0, скачать её можно здесь.

Выбирать нужно версию для Linux, битность x64, архиватор GZIP. Скачиваем файл https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.gz

Для нужной версии вы сможете также установить и необходимые модули (см. ниже).

На хостинге функционирование Node.js реализовано через специальную библиотеку Passenger, которая осуществляет взаимодействие Вашего сайта с обработчиком Node.js

Рассмотрим структуру папок и файлов. Мы предлагаем реализовать ее примерно следующим образом:

  • site-name.com (корневая папка вашего сайта)
  • htdocs
  • www
  • nodejs_app
  • www
  • nodejs_tmp
  • www

Ваша цель — создать идентичную структуру и разместить файлы в соответствующих схеме директориях. Далее мы наполним их содержимым.

Установка Node.js

Чтобы сразу начать пользоваться необходимой вам версией Node (при условии, что Вы уже получили доступ по SSH), можете ввести следующие команды в терминале для загрузки и распаковки архива с файлами:

Работа с .htaccess файлом

Чтобы Passenger мог взаимодействовать с Node.js, в файле .htaccess (мы рекомендуем располагать его здесь ./site-name.com/htdocs/www/.htaccess) необходимо прописать следующее:

PassengerAppRoot /home/hostXXXXXXX/site-name.com/nodejs_app/www PassengerAppType node PassengerStartupFile app.js PassengerNodejs /home/hostXXXXXXX/node/bin/node PassengerRestartDir /home/hostXXXXXXX/site-name.com/nodejs_tmp/www PassengerFriendlyErrorPages on
  • Вместо hostXXXXXXX вы прописываете номер своего аккаунта
  • site-name.com — это имя папки с вашим проектом
  • app.js — название файла, который запускает работу серверной части (вы можете назвать его как захотите, главное, пропишите соответствующее имя в .htaccess)
  • PassengerNodejs — путь до исполняемого файла Node.js
  • PassengerFriendlyErrorPages — опция для отображения ошибок, в случае, когда приложение работает не корректно, или не запускается (по умолчанию — PassengerFriendlyErrorPages off). Данная опция выводит сообщения об ошибке, некоторые предложения по решению проблемы, трассировку и дамп переменных среды выполнения. Рекомендуется включать эту опцию только на этапе разработки. После её окончания удалите или закомментируйте в .htaccess эту опцию.

Включение лога ошибок

При разработке любого сайта или приложения разработчики допускают ошибки. По умолчанию, они записываются в папку logs, которая находится в корне сайта. Также, убедитесь, что у вас включена данная опция в панели управления. Во вкладке «Домены»→«Прикрепление домена», рядом с надписью «Лог-файлы веб сервера» есть переключатель, который включает/выключает данную опцию. После включения, логи начнут писаться в течение 5 минут (при обычной загруженности сервера).

Перезапуск приложения

Файлы restart.txt и always_restart.txt необходимы для того, чтобы при внесении вами каких-либо изменений в рабочие файлы (к примеру, app.js) Passenger, применяя правила записанные в .htaccess, мог перехватывать их и применять в работе сайта. Отличие заключается в том, что restart.txt сработает только один раз, а always_restart.txt перезапускает процесы веб-сервера при каждом поступившем запросе. Рекомендуется использовать always_restart.txt только при разработке. После того, как разработка проекта будет завершена, не забудьте удалить этот файл, чтобы избежать задержек при отображении страницы посетителям.

Если Вы уверены в том, что ваш код работает без багов, но всё-равно видите ошибки на странице, можно принудительно завершить все процессы с помощью следующей команды через SSH-соединение:

killall -2 "Passenger NodeApp"

После чего перезагрузить страницу.

Код для app.js

И напоследок, осталось добавить скрипт для запуска Node в app.js. Ниже представлен код с официального сайта Node.js (в дальнейшем вы можете изменять его по своему усмотрению, сейчас мы лишь хотим убедиться, что всё работает):

const http = require('http'); const hostname = '127.0.0.1'; 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://$:$/`); >);

Итак, все настройки произведены. Откройте сайт в новой вкладке. Если выводится Hello world, то всё работает, как и ожидалось. В противном случае, ещё раз пройдите по вышеприведённому алгоритму действий. Возможно, вы что то упустили.

Пример подключения модуля

Чтобы установить какой-либо модуль в директорию с файлами приложения, при этом используя установленную версию Node.js, необходимо для начала прописать путь до исполняемого файла node в .bash_profile (он лежит в корне вашего аккаунта). После этого вы сможете обращаться к нему из любой директории вашего проекта.

Итак, откройте .bash_profile и допишите следующую строку:

PATH=$HOME/.local/bin:$HOME/bin:$HOME/site-name.com/node/bin:$PATH

Для примера, рассмотрим подключение модуля mysql для работы с базой данных (предварительно, создайте таблицу под любым названием и поместите туда несколько записей). Чтобы установить даный модуль, зайдите через SSH-соединение в директорию «nodejs_app/www» и введите в терминале команду:

npm init --force

Таким обазом создастся файл package.json с данными о вашем приложении. После этого наберите команду:

npm install mysql --save-dev

Вы увидите, что автоматически создастся новая директория «node_modules» и подгрузятся необходимые нам для работы файлы.

Также, рекомендуем загрузить 2 часто используемых модуля — fs (для работы с файлами) и util (для красивого вывода объектов в консоль)

npm install fs util --save-dev

Далее, открываем файл нашего приложения app.js и добавляем следующий код:

const fs = require('fs'); const util = require('util'); var log_file = fs.createWriteStream(__dirname + '/debug.log', ); var log_stdout = process.stdout; console.log = function(d) < log_file.write(util.format(d) + '\n'); log_stdout.write(util.format(d) + '\n'); >; const mysql = require('mysql'); const connection = mysql.createConnection(< host : 'localhost', user : 'hostXXXXXXX', password : 'your_password', database : 'your_database_name' >); connection.connect(); connection.query('SELECT * FROM my_table', function (error, results, fields) < if (error) throw error; results.forEach(function(obj) < console.log( util.inspect(obj) ); >); >); connection.end();

В коде выше мы, с помощью модуля fs, создаём новый файл debug.log, в который будем помещать вывод функции console.log

Далее, переопределяем саму функцию console.log, задействуя поток на запись.

Теперь, при помощи модуля mysql, подключаемся к своей БД и выбираем все записи из нужной нам таблицы, прописывая их в созданный нами файл.

Проверим, всё ли сработало: перезагрузите страницу своего сайта и откройте файл debug.log — вы должны увидеть вывод всех записей из таблицы.

Запуск приложений через crontab

Для запуска приложений Node.js через crontab создайте shell скрипт и определите в нём переменную окружения PATH исходя из ваших требований, или можно указать полный путь к бинарному файлу nodejs и скрипту. Простейший Shell скрипт для запуска nodejs приложения:

#!/usr/bin/env sh env PATH=/home/hostXXXXXXX/node-vXX.ZZ.YY/bin:/home/hostXXXXXXX/node-vXX.ZZ.YY/bin:$PATH node example.js

Или команда для запуска целиком:

/home/hostXXXXXX/nodejs/bin/node /home/hostXXXXXX/nodeproject/example.js

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из панели управления хостингом, раздел «Помощь и поддержка».

Как установить Node.js на Ubuntu

В статье мы расскажем, как проходит установка node js на Ubuntu и что это такое. Настройка VPS Node js Ubuntu по инструкции не займет у вас много времени.

Что такое Node.js

Node.js — это среда выполнения JavaScript. Платформа позволяет работать с JavaScript на стороне сервера. Раньше JavaScript мог выполнять только браузер, но благодаря Node.js код можно выполнять и вне браузера. Node.js построен на движке Chrome V8.

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

Как установить Node js на Ubuntu

Если ранее у вас уже была установлена какая-либо из версий Node, вы можете как переустановить Node js, так и полностью удалить старую версию, а после поставить новую. Мы расскажем, как поставить на VPS Node js с нуля.

Node.js можно установить на Linux Ubuntu несколькими способами:

  • с помощью пакетного менеджера Ubuntu,
  • через PPA (Personal Package Archive) — архив персональных пакетов,
  • через NVM (Node Version Manager) — bash-скрипт,
  • через бинарные файлы.

Рассмотрим самые простые и надежные способы — с помощью пакетного менеджера и через архив персональных пакетов PPA.

Установка Node.js через пакетный менеджер

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

  1. Откройте терминал.
  2. Обновите локальный индекс пакетов:
sudo apt update

3. Установите Node js репозиторий:

sudo apt install nodejs

4. Установите менеджер пакетов npm Ubuntu:

sudo apt install npm

5. Проверьте работоспособность программ командами:

nodejs -v
npm -v

Node js Ubuntu install

Готово, вы установили Node.js на виртуальный выделенный сервер (VPS) c Ubuntu.

Установка Node.js через архив персональных пакетов PPA

  1. Откройте терминал.
  2. Перейдите в домашнюю директорию:

3. Для установки версии PPA введите команду:

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

где вместо 8.x вы можете добавить нужную вам версию.
4. Проверьте содержимое скрипта с помощью nano или любого другого текстового редактора:

nano nodesource_setup.sh

5. Запустите скрипт с правами sudo. После этого PPA будет включен в конфигурацию. Ваш локальный кэш пакетов автоматически обновится.

sudo bash nodesource_setup.sh

6. Установите репозиторий Node.js:

sudo apt install nodejs

7. Установленный пакет Node.js содержит в себе менеджер пакетов npm. Для отслеживания обновлений npm обращается к конфигурационному файлу вашей домашней директории. Файл будет создан при первом запуске npm.

Проверьте работоспособность программы с помощью команд:

node -v
npm -v

Linux install Nodejs

Готово, вы установили Node.js на виртуальный сервер (VDS) c Ubuntu.

Популярные статьи

  • Как указать (изменить) DNS-серверы для домена
  • Я зарегистрировал домен, что дальше
  • Как добавить запись типа A, AAAA, CNAME, MX, TXT, SRV для своего домена
  • Что такое редирект: виды и возможности настройки
  • Как создать почту со своим доменом

Настройка Node.js

В статье будет рассмотрена настройка Node.JS.

Обратите внимание!

Если вы хотите запустить веб-приложение, но еще не создали сайт — сначала необходимо создать сайт и прикрепить к нему домен в разделе Сайты. Лучше всего имя сайта указывать аналогично желаемому доменному имени — в противном случае в будущем могут возникнуть трудности с пониманием файловой структуры.
Если у вас еще нет доменного имени, его можно добавить или зарегистрировать в разделе Домены.
После того, как сайт создан и к нему прикреплён домен, направленный на наши NS сервера, можно приступать к настройке.

Сначала необходимо подключится к аккаунту по протоколу SSH.

Подключение к аккаунту

Если Вы пользуетесь OS Windows, то, скорее всего, Вам подойдет SSH-клиент PuTTy (статью по настройке можно прочитать здесь). Когда настроите, можно переходить на шаг 2.

Если Вы пользуетесь OS Linux или OS X, подойдет обычный терминал, который присутствует во всех Unix-подобных операционных системах. Подключиться можно следующей командой:

$ ssh username@username.beget.tech

Где username — логин, username.beget.tech — адрес сервера (посмотреть его можно в блоке Техническая информация на главной странице панели управления).

Переход в Docker

Далее нужно перейти в виртуальное окружении Docker. Запуск Node.js осуществляется только внутри Docker контейнера. Для этого, после подключения по SSH необходимо ввести команду:

ssh localhost -p 222

А также ввести свой пароль для подключения к SSH. В строке терминала будет отображено, что теперь мы находимся в Docker окружении:

(docker) valkeru@oscar2: [0]~

На хостинге уже установлены Node.js и npm.

(docker) valkeru@oscar2:~ [0] $ node -v v8.12.0 (docker) valkeru@oscar2:~ [0] $ npm -v 6.4.1

Установка Node.js другой версии

Обратите внимание!

На данный момент, на виртуальном хостинге, максимальная поддерживаемая версия — 17.9.1. NodeJS версии 18.0 и выше работать не будет.

Учитывайте эту информацию при выборе версии.

Установка Node.js производится в каталог .local Вашей учётной записи:

valkeru@oscar2:~ [0] $ mkdir -p .local valkeru@oscar2:~ [0] $ cd .local

Обратите внимание!

Загружать нужно 64-разрядную версию, запуск исполняемых файлов для 32-битной архитектуры на наших серверах запрещён!

Загрузим дистрибутив и распакуем его:

valkeru@oscar2:~/.local [0] $ wget https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz --2019-06-26 02:46:01-- https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz Resolving nodejs.org. 104.20.23.46, 104.20.22.46, 2400:cb00:2048:1::6814:172e, . Connecting to nodejs.org|104.20.23.46|:443. connected. HTTP request sent, awaiting response. 200 OK Length: 11314172 (11M) [application/x-xz] Saving to: ‘node-v8.1.2-linux-x64.tar.xz’ ​ node-v12.16.2-linux-x64.tar.xz 100%[==========================>] 10,79M 7,18MB/s in 1,5s ​ 2019-06-26 02:46:04 (7,18 MB/s) - ‘node-v12.16.2-linux-x64.tar.xz’ saved [11314172/11314172] ​ valkeru@oscar2:~/.local [0] $ tar xJf node-v12.16.2-linux-x64.tar.xz --strip 1 valkeru@oscar2:~/.local [0] $ 

Удалите загруженный дистрибутив:

valkeru@oscar2:~/.local [0] $ rm node-v12.16.2-linux-x64.tar.xz valkeru@oscar2:~/.local [0] $

Обратите внимание!

Поскольку сайты на учётных записях изолированы, для запуска Node.js из окружения веб-сервера потребуется открыть общий доступ к каталогу ~/.local.
Инструкция по предоставлению общего доступа приведена в этой статье.

Создание каталога проекта

Теперь нужно перейти в каталог сайта, в рассматриваемом примере имя каталога — node:

valkeru@oscar2:~ [0] $ cd ~/node

Необходимо создать каталог для проекта и вложенный в него каталог tmp, в рассматриваемом примере имя каталога — HelloWorld:

valkeru@oscar2:~/node [0] $ mkdir -p HelloWorld/tmp valkeru@oscar2:~/node [0] $

Для корректной отдачи статического контента средствами Nginx создается ссылка public, указывающая на public_html:

valkeru@oscar2:~/node [0] $ ln -s public_html public

С помощью любого текстового редактора (например, nano или vim) необходимо создать файл app.js в каталоге проекта HelloWorld со следующим содержимым:

var http = require('http'); var server = http.createServer(function(req, res) < res.writeHead(200, < 'Content-Type': 'text/plain' >); res.end('Hello World!'); >); server.listen(3000);

Далее, если вы находитесь в каталоге проекта HelloWorld, необходимо вернутся в каталог node

valkeru@oscar2:~/node/HelloWorld [0] $ cd ..

Создание .htaccess

Затем нужно создать файл .htaccess. В общем виде его содержимое выглядит следующим образом:

PassengerNodejs /home/первая буква логина/логин/.local/bin/node PassengerAppRoot /home/первая буква логина/логин/папка сайта/название_проекта PassengerAppType node PassengerStartupFile app.js

Если вы установили новую версию NodeJS, то .htaccess будет следующим:

PassengerNodejs /home/v/valkeru/.local/bin/node PassengerAppRoot /home/v/valkeru/node/HelloWorld PassengerAppType node PassengerStartupFile app.js

Если вы решили воспользоваться предустановленным NodeJS, то .htaccess будет следующим:

PassengerNodejs /usr/local/bin/node PassengerAppRoot /home/v/valkeru/node/HelloWorld PassengerAppType node PassengerStartupFile app.js

Для того, чтобы Passenger перечитал конфиг, необходимо создать файл tmp/restart.txt. Cделать это нужно в директории, указанной в качестве PassengerAppRoot в файле .htaccess ранее.

valkeru@oscar2:~/node/HelloWorld [0] $ touch tmp/restart.txt valkeru@oscar2:~/node/HelloWorld [0] $

Обратите внимание!

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

Для проверки работоспособности откройте сайт в браузере:

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

valkeru@oscar2:~/node [0] $ ps aux | grep Passenger 659085 4148 0.1 0.0 878828 29796 ? Sl 02:55 0:00 Passenger NodeApp: /home/v/valkeru/node/HelloWorld valkeru 7365 0.0 0.0 7496 2144 pts/19 SN+ 02:56 0:00 grep Passenger

В листинге процессов присутствует модуль Apache Passenger.

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка».

Свой Node.js хостинг на VPS

По ходу изучения Node.js я создал много маленьких проектов. В дальнейшем мне понадобилось развернуть некоторые из них на сервере, чтобы иметь возможность развивать их в дальнейшем. Существующие хостинги Appfog и Heroku имеют ряд серьезных ограничений на бесплатных аккаунтах. На Appfog’е можно запускать одновременно не больше 2-х приложений, и бесплатная регистрация у них уже отключена. На Heroku можно создать только 5 приложений (без базы данных) без подтверждения аккаунта привязкой банковской карты. Платные аккаунты стоят очень дорого для меня (я ведь не зарабатываю на этих маленьких проектах): $20 долларов на Appfog, а heroku еще дороже. Коллеги порекомендовали попробовать хостинг на Digital Ocean — виртуальный сервер за $5 доларов в месяц, на котором можно легко настроить собственный хостинг node.js-проектов.

О том, как организовать такой хостинг, и будет идти речь в этой статье. Если по ходу руководства у вас возникнут проблемы, поищите их решение в конце статьи.

Создаем VPS

1. Регистрация на DigitalOcean

Первым делом регистрируемся на сайте DigitalOcean. Здесь мы купим VPS — виртуальный сервер. После удачной регистрации и входа в свою админку жмем на большую зеленую кнопку «Create» и нам предложат активировать свой аккаунт, внеся $5 долларов. Ниже на странице есть место для указания счастливого купона на $10, вводите OMGSSD10 или поищите свежий купон. Так как моя банковская карточка не подошла хостеру, я оплатил пейпалом и у меня на счету оказалось $15. Этого должно хватить на 3 месяца.

2. Создаем SSH-ключ

Доступ к удаленным серверам обычно делается по ssh. Это такая технология защищенных соединений. Зайти в нашу будущую VPS можно по паролю или по SSH-ключу. Я настоятельно рекомендую второй вариант, не придется все время вводить пароль. Также, SSH-ключ все равно нужно будет указать при создании нашего нового «дроплета» (словом «droplet» DigitalOcean называет виртуальный сервер).

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

$ cd ~/.ssh $ ssh-keygen -t rsa -C "email@example.com" 

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

После этого будет создано два файла: ssh-ключ и public-ключ. Скопируем публичный ключ в буфер обмена модным способом:

$ cat ~/.ssh/id_rsa_digitalocean_dropletname.pub | pbcopy 

Теперь зайдем в админку в digitaloceans в раздел SSH-keys и создадим там новый ключ, вставив его из буфера обмена.

3. Создаем дроплет
  • В качестве hostname укажите доменное имя или что-нибудь осмысленное, это название роли не играет
  • Размер выбирайте самый маленький, его потом можно будет увеличить из терминала
  • Регион любой, я выбрал Амстердам
  • Образ выберите на вкладке Applications, c названием «Dokku v0.2.3 on Ubuntu. » или похожим
  • Укажите SSH-ключ, который мы создали на предыдущем шаге

Выбранный образ помимо операционной системы Ubuntu 14.04 содержит самое главное: Dokku. Это готовая система для хостинга node.js-проектов, очень похожая на Heroku. Использование образа с предустановленным Dokku избавит нас от необходимости устанавливать и настраивать систему для хостинга Node.js.

4. Настройка Дроплета и DNS

Droplet setup page

Теперь нужно настроить новосозданный сервер. Зайдите в браузере по IP-адресу дроплета и вы увидете экран настройки. Если такой страницы нет, смотрите что делать в конце статьи.

Здесь вы должны убедится, что поле «Public Key» заполнено. Если нет — укажите свой public key из недавно сгенерированного ключа. Однако практика показала, что лучше вообще удалить такой дроплет и создать новый, правильно указав SSH-ключ.

Если у вас нет доменного имени, то оставьте все, как есть, жмите «Finish setup» и переходите к следующему пункту. Ваше приложение будет доступно примерно так: «19.19.197.19:46667», по IP адресу и номеру порта. Если вас это не устраивает — срочно купите доменное имя. В любом случае, настроить доменное имя можно будет позже, о чем я расскажу в конце.

Если вы укажете доменное имя, у вас будет возможность настроить доступ к приложениям через поддомены. Например, если ваше доменное имя mydomain.com , тогда ваше приложение будет доступно по адресу app.mydomain.com . Также есть возможность привязать приложение на главный домен, но об это я в данной статье не расскажу.

Укажите в поле Hostname ваше доменное имя и поставьте галочку «Use virtualhost naming for apps». Теперь идите в панель управления вашим доменным именем и впишите две новые настройки примерно так:

apps.mydomain.com. IN A [Droplet IP address]
*.apps.mydomain.com. IN A [Droplet IP address]

mydomain.com. IN A [Droplet IP address]
*.mydomain.com. IN A [Droplet IP address]

Точный синтаксис уточните у себя в админке доменного имени или у домен-провайдера.

Теперь возвращайтесь на страницу настройки дроплета и жмите «Finish setup».

5. Настраиваем использование SSH

Давайте попробуем соединиться с нашим новым сервером. Чтобы получить доступ дроплету через SSH-ключ, нужно еще одно маленькое действие. Откройте терминал и передите в папку с ssh-ключами:

$ cd ~/.ssh/ 

Если у вас еще нет файла «config» в этой папке (проверка — $ ls ), то его необходимо создать:

$ touch config 

Теперь открываем config( $ open config ) и записываем в него следующие данные:

Host YOUR.DROPLET.IP.ADDRESS IdentityFile ~/.ssh/id_rsa_digitalocean_dropletname

Где в первой строчке IP адрес или доменное имя, на второй строчке — имя созданного ssh-ключа для этого дроплета.

$ ssh root@YOUR.DROPLET.IP.ADDRESS 

Где после «@» надо указать или доменное имя, или IP.

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

$ ssh root@YOUR.DROPLET.IP.ADDRESS 

и на вопрос о продолжении соединения напишите «yes». После этого введите пароль.

Если вы увидели приветственный экран, значит все хорошо. Закроем соединение командой exit и перейдем к следующему пункту.

Деплоим приложение

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

1. Подготавливаем проект

Возьмите простой проект, типа Hello, world, без mongodb и прочего. Проверьте, что в проекте есть самое главное: «package.json», «Procfile» и какой-нибудь «app.js». «Package.json» должен выглядеть примерно так:

< "name": "dokku-demo-application", "version": "1.0.0", "engines": < "node": ">=0.10.*", "npm": ">=1.3" >, "dependencies": < "express": "~3.0" >> 

Содержание файла package.json важно, так как по нему dokku будет устанавливать модули для приложения. А Procfile должен выглядеть так:

web: node server.js

Инициализируем в папке проекта репозиторий (если его не было), добавляем все файлы и коммитим:

$ git init && git add -A && git commit -m "Initial commit" 

Теперь наш проект готов к разворачиванию на сервере.

2. Заливаем и запускаем проект

Деплоить приложение будем с помощью команды git push . И для этого добавим ссылку на удаленный репозиторий нашего дроплета:

$ git remote add dokku dokku@mydomain.com:application_name 

Если у нас было доменное имя для дроплета, то пишем его после «dokku@», иначе — указываем IP. После двоеточия мы указываем имя приложения. Этот индификатор будет использоваться внутри dokku.

Теперь вызываем команду push :

$ git push dokku master 

И начинается загрузка приложения, установка модулей. В конце на экране покажется url, по которому можно запустить проект. Это будет ссылка вида 192.88.67.168:46567 или app1.mydomain.com, в зависимости от настроек dokku.

По идее проект должен быть запущен после этого. Но если нет, то заходим в по ssh в наш дроплет и выполняем две команды

$ cd /home/dokku/YOUR-APP-NAME $ dokku run YOUR-APP-NAME node app.js 

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

Проблемы и их устранение

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

1. Мою банковскую карточку не приняли для оплаты

Они такие, да. Даже Visa Classic им не нравится. Оплатите через PayPal, это не трудно.

2. Создал дроплет, но по IP адресу нет страницы настройки dokku
  • указать образ с Dokku
  • нажмите кнопку «Rebuild from Image».
3. Не могу получить доступ к дроплету ни по паролю, ни по SSH
  1. Наверное, вы как-то пропустили шаг настройки dokku, или dokky создался не правильно.
  2. Проверьте, если доступна страница настройки dokku по IP адресу дроплета, то вернитесь к шагу 4 создания VPS.
  3. Если страницы настроек нет, тогда попробуйте сбросить пароль и повторить попытку доступа через терминал. Если даже в этом случае доступ по паролю будет неудачным, тогда переустановите дроплет, как описано в предыдущем пункте.
4. Я не знаю пароля от дроплета

Если у вас нет пароля, зайдите на страницу управления дроплетом, вкладка «Access» и сделайте reset пароля. Тогда на почту придет новый пароль.

5. Проект не запускается по указанной ссылке

Если настройки dokku верны, такая ситуация возможна, если приложение запустилось с ошибкой и было закрыто. Зайтиде по ssh в дроплет и проверьте логи:

$ dokku logs

Возможно, ошибка будет понятна. Или же вы забыли запустить ваш проект после push’а:

$ cd /home/dokku/YOUR-APP-NAME $ dokku run YOUR-APP-NAME node app.js 
6. Я пропустил создание SSH, и теперь хочу сделать авторизацию по SSH-ключу

Я пытался создать новый дроплет без указания ssh-ключа на странице создания дроплета, но на странице настроек dokku все равно просят ввести паблик-ключ. После этого я принял некоторые действия, но все равно зайти по ssh-ключу у меня не вышло, только пароль. Так что я не знаю, как лучше действовать в данной ситуации. Возможно, ошибка происходила при команде копирования ssh ключа в дроплет. Гуглите. В крайнем случае создайте новый дроплет с самого начала, по уму, как в этом руководстве. Пример поиска.

7. Как добавить доменное имя к уже существующему дроплету

Это делается совсем не трудно, всего в несколько шагов. В настройках DNS вашего доменного имени указать настройки:

apps.mydomain.com. IN A [Droplet IP address]
*.apps.mydomain.com. IN A [Droplet IP address]

В дроплете зайти в папку dokku и открыть для редактирования HOSTNAME:

$ cd /home/dokku/ $ vim HOSTNAME 

Нажать клавишу «i» и записать в файле «HOSTNAME» доменное имя вместо IP адреса; затем нажать Esc , кнопки :wq и Enter . Ура! Мы только что успешно использовали легендарный Vim!
Чтобы проекты запускались на поддоменах, нужно создать файл VHOST :

$ touch VHOST 

И записать в файле доменное имя таким же способом, как это было в предыдущем пункте. В противном случае проекты будут доступны через порт. Теперь надо перезалить проект, а перед этим удалить его из dokku:

$ dokku delete app_name 

Удалить в репозитории предыдущий remote с IP-адресом в названии:

$ git remote remove dokku 

И добавить новый remote под старым именем:

$ git remote add dokku dokku@apps.mydomain.com:app_name 

Настраиваем SSH-ключ на новый хостинг, дописывая в ~/.ssh/config новые строчки:

Host YOUR.DROPLET.IP.ADDRESS IdentityFile ~/.ssh/id_rsa_digitalocean_dropletname

Смело пушаем проект:

$ git push dokku master 

Теперь проекты будут доступны на поддоменах.

Всем спасибо за внимание, хороших выходных!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *