Чтобы задеплоить приложение на Node.js понадобится сервер. Для этого можно арендовать простенький VPS (например, самый недорогой у СИДАТА — 350 грн в месяц) и задеплоить приложение. В этой статье подробно рассмаотрим, как это сделать.
Шаг 1. Покупаем VPS
Итак, первым делом нужно зайти на сайт SIDATA и арендовать VPS. После этого у тебя будет чистый сервер для работы.
Шаг 2. Устанавливаем Dokku
Теперь нам нужно установить Dokku — это готовая система для хостинга Node.js-проектов, аналог Heroku. Использование образа с предустановленным Dokku избавит от необходимости устанавливать и настраивать систему вручную.
# Установка Dokku для Debian
sudo DOKKU_TAG=v0.34.8 bash bootstrap.sh
Установка займёт около 5-10 минут в зависимости от скорости соединения.
Шаг 3. Настройка SSH и домена
После установки Dokku нужно настроить SSH-ключ и глобальные доменные настройки. Вот как это сделать:
cat ~/.ssh/authorized_keys | dokku ssh-keys:add admin
Если у тебя есть домен, можно его привязать:
dokku domains:set-global yourdomain.com
Если домен отсутствует, можно использовать IP-адрес сервера или sslip.io
для автоматической генерации поддомена:
dokku domains:set-global 10.0.0.2.sslip.io
Шаг 4. Настройка сервера
Теперь можно завершить настройку сервера. Зайди в браузере по IP-адресу сервера, чтобы увидеть страницу настройки. Если страница недоступна, решение проблемы смотри в конце статьи.
Если у тебя есть домен, в панели управления доменом добавь такие записи:
apps.yourdomain.com. IN A [IP-адрес сервера]
*.apps.yourdomain.com. IN A [IP-адрес сервера]
После этого вернись к настройке и нажми "Finish Setup".
Шаг 5. Настройка SSH для доступа
Для подключения к серверу через SSH необходимо создать файл конфигурации:
cd ~/.ssh/
touch config
open config
Добавляем в файл следующее:
Host YOUR.DROPLET.IP.ADDRESS
IdentityFile ~/.ssh/id_rsa_yourkey
Теперь можно подключаться:
ssh [email protected]
Если всё настроено правильно, ты увидишь приветственное сообщение.
Шаг 6. Деплоим приложение
1. Подготавливаем проект
Возьми простой проект, например, "Hello, world". Проверь, что в проекте есть файлы 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"
}
}
Procfile
должен выглядеть так:
web: node app.js
Теперь инициализируем git-репозиторий, если его ещё нет, и коммитим файлы:
git init
git add -A
git commit -m "Initial commit"
2. Заливаем проект
Добавляем удалённый репозиторий для деплоя на сервере Dokku:
git remote add dokku [email protected]:your-app
И пушим проект:
git push dokku master
После этого Dokku начнёт установку всех зависимостей, и в конце покажет URL, по которому можно проверить работу приложения.
Шаг 7. Решение возможных проблем
1. Мою банковскую карточку не приняли для оплаты
Если Visa или MasterCard не проходят, можно оплатить через PayPal.
2. Страница настройки Dokku не отображается
Перейди в панель управления сервером и выполни реконструкцию дроплета через образ с предустановленным Dokku. Это должно решить проблему.
3. Проблемы с SSH-доступом
Проверь правильность SSH-ключа, либо зайди по паролю, который был отправлен на email при создании сервера.
4. Проект не запускается
Если проект не запускается, зайди на сервер и проверь логи:
dokku logs your-app
Или попробуй вручную запустить проект:
cd /home/dokku/your-app
dokku run your-app node app.js
5. Пропустил создание SSH-ключа
Если забыл создать SSH-ключ на этапе создания сервера, можно создать новый дроплет и повторить процесс заново, корректно указав ключи на этапе создания.
6. Как добавить домен к существующему серверу
Добавить домен можно через DNS-записи в панели управления доменом. Укажи такие настройки:
apps.yourdomain.com. IN A [IP-адрес сервера]
*.apps.yourdomain.com. IN A [IP-адрес сервера]
На сервере открой файл HOSTNAME
:
cd /home/dokku/
vim HOSTNAME
Замените IP-адрес на доменное имя, затем создай файл VHOST
:
touch VHOST
И добавь в него домен. Удаляем старый remote и добавляем новый:
git remote remove dokku
git remote add dokku [email protected]:your-app
Теперь можно пушить проект с новым доменом!