До того, как я нашел 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 самостоятельно, если пакет сборки недоступен, потому что моя цель иметь такой инструмент - помочь мне быстрее развернуть.