До того, как я нашел dokku, мое типичное развертывание веб-приложения на javascript-интерфейсе было бы
Запуск сервера ›установка node.js› установка git ›настройка nginx для доменных имен› перезапуск nginx ›git клонирование вашего проекта› запуск npm install ›npm run build› установка и настройка pm2 для мониторинга ›live
Что, если я внес какие-то изменения? Я буду…
SSH на сервер ›cd в каталог проекта› run git pull ›npm install› npm run build ›restart pm2› live
Я не хочу делать это снова и снова.
Я знаю, что существует множество инструментов CI / CD, таких как jenkin, bamboo, codehip и т. Д., Но эти инструменты излишни для моих домашних проектов или внештатных работ.
Я пробовал сервис вроде героку, но он такой дорогой. Я предпочитаю автономное решение в моей капле DigitalOcean, всего 5 долларов в месяц, и оно может поддерживать работу многих веб-приложений.
Недавно нашла что-то еще дешевле - vultr. По сравнению с DigitalOcean, их самый дешевый экземпляр имеет 1 ГБ памяти и стоит всего 5 долларов, так что он примерно вдвое дешевле, чем DigitalOcean. Иногда я хочу попытаться установить что-то, для чего требуется как минимум 1 ГБ памяти (например, discord), тогда vultr - хороший выбор, вместо того, чтобы платить 10 долларов за сервер на 1 ГБ в DigitalOcean.
Автоматизация развертывания одностраничных приложений с помощью Dokku
Короче говоря, Dokku позволяет автоматизировать развертывание, как и собственное heroku. Вы можете развернуть его со своего клиента и пойти выпить кофе. Dokku привлекает меня тем, что он бесплатный, потому что он размещается самостоятельно, а также очень легко настраивать и управлять своими веб-приложениями.
Пошаговое руководство по настройке Dokku
SSH на ваш сервер (минимальное требование - 1 ГБ памяти, в этом руководстве я использую ubuntu 16)
Выполните следующие команды от имени пользователя, имеющего доступ к sudo
:
wget https://raw.githubusercontent.com/dokku/dokku/v0.11.6/bootstrap.sh sudo DOKKU_TAG=v0.11.6 bash bootstrap.sh
После этого посетите IP-адрес вашего сервера в браузере.
На панели настройки измените имя хоста на свое доменное имя. Вы можете оставить его на свой IP-адрес и просто перейти к «Завершить настройку», если вы просто хотите посмотреть, как это работает, вы можете изменить это позже. Я использую доменное имя, чтобы продемонстрировать, насколько легко настроить SSL с помощью dokku.
Для демонстрации давайте создадим репозиторий под названием `express-demo` на нашей локальной машине. В папке express-app просто добавьте dokku remote
git remote add dokku [email protected]:express-demo
^ express-demo в последней части команды - это значение свойства name в package.json проекта express-demo.
Затем мы развертываем в ветке master dokku
git push dokku master
Если ваше развертывание прошло успешно, вы увидите сообщение в терминале
====> application is deployed: http://[domain_or_ip]:port
Скопируйте URL-адрес в свой браузер. Вы можете видеть, что ваше приложение работает! Вот и все, идея у вас есть. Каждый раз, когда вы вносите какие-либо изменения в git, просто отправляйте копию в dokku, чтобы изменения вступили в силу.
Запустить сценарий развертывания
Для SPA у нас, скорее всего, будут инструменты сборки, такие как gulp или webpack, для производственного развертывания. Чтобы запустить сценарий перед развертыванием, создайте файл с вызовом app.json в своем проекте.
{ "scripts": { "dokku": { "predeploy": “npm run build” } } }
npm run build
будет запускаться каждый раз, когда вы нажимаете на dokku.
Настройте SSL для доменного имени
Посетите https://www.sslforfree.com для своего домена и следуйте инструкциям. У вас должно быть 3 файла для вашего домена: ca_bundle.crt
, certificate.crt
и private.key
Переименуйте certificate.crt
в server.crt
и переименуйте private.key
в server.key
В вашем локальном терминале сжимайте server.key и server.crt
tar cvf server.tar server.key server.crt
Вы увидите, что был сгенерирован сжатый файл tar с именем server.tar
. Теперь нам нужно отправить server.tar
на путь корня нашего сервера. Мы делаем
scp server.tar root@server_ip:~/
за это.
Потом добавляем ключи в докку
dokku certs:add lakefront < server.tar
Теперь откройте свой домен или IP-адрес с помощью https, и вы увидите, что ваш сайт теперь поддерживает https.
Мысль о Докку
Процесс компиляции зависит от buildpack. Например, для приложения create-react-app есть даже buildpack. Я не думаю, что смогу (или у меня есть мотивация для этого) написать сценарий bash самостоятельно, если пакет сборки недоступен, потому что моя цель иметь такой инструмент - помочь мне быстрее развернуть.