Статьи

Альтернатива Heroku: развертывание приложений с помощью Dokku на DigitalOcean

Докку на DigitalOcean

Когда Heroku объявил о своих (вполне разумных) новых лимитах на бесплатные приложения, я понял, что мне нужно будет найти другой источник хостинга для всех небольших проектов с низким трафиком, которые у меня в настоящее время запущены на Heroku. В свое время Heroku была полностью бесплатна для приложений, для которых требовался только один динамо, но после многих лет жестокого обращения со стороны таких придурков, как я, они отказались от этого, и в конечном итоге бесплатные приложения могли работать в течение 18 из 24 часов в день (что нормально для прототипов с низким трафиком) и с 1 июня предоставление общего пула бесплатных часов.

Поскольку у меня есть такое необоснованное количество приложений, работающих на Heroku, я подумал, что пора попробовать Dokku . Dokku — это Heroku-подобный инструмент, который позволяет вам развертывать сложные приложения, просто нажимая на Git. Он напрямую поддерживает пакеты сборки Heroku, так что вы можете без проблем переходить между существующими приложениями, а также имеет ряд плагинов для хранилищ данных и других компонентов. И, к счастью, Digital Ocean предоставляет предварительно установленный образ Dokku , который избавит вас от необходимости устанавливать Dokku самостоятельно; Вы можете просто раскрутить сервер и начать Dokku-ing прямо сейчас! В этой статье мы расскажем, как настроить сервер Dokku в DigitalOcean с собственным корневым доменом и развернуть на нем простой статический сайт.

Различия между Докку и Героку

  • Dokku требует хотя бы некоторого уровня комфорта при работе на собственных серверах; вам, возможно, придется изменить конфигурации nginx, вручную настроить некоторые плагины или обратиться к системным инструментам для отладки.
  • Dokku использует Docker , который является хорошей платформой, но может добавить дополнительный уровень сложности к установке сервера.
  • Dokku требует root-доступа к VPS для установки плагинов, запуска команд и т. Д.

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

Создание Dokku-сервера в DigitalOcean

Логотип DigitalOcean

Сначала войдите в DigitalOcean и перейдите по этой ссылке, чтобы создать новый сервер в DigitalOcean с помощью предварительно установленного приложения Dokku. Для Dokku требуется как минимум 1 ГБ ОЗУ, но 10 долл. США в месяц для размещения всех ваших вещей — довольно небольшая цена

В качестве имени хоста введите базовый домен, который вы хотите использовать для размещения своих приложений. Приложения <appname>.<hostname> умолчанию появятся в <appname>.<hostname> (например, myapp.example.com ). Убедитесь, что вы являетесь владельцем этого домена и зарегистрируйте его, если вам нужно!

Настройка домена

Вы захотите связать домен с вашим сервером Dokku. Просто установите запись A для вашего домена, указывающую на IP вашего сервера.

В оставшейся части этой статьи предполагается, что вы зарегистрировали example.com для этой цели.

Мы <appname>.example.com все так, чтобы ваши приложения появлялись на <appname>.example.com . Для этого вам нужно добавить несколько DNS-записей для вашего домена:

  • создайте пустую запись, указывающую на IP вашего сервера
  • создать подстановочный знак ( * ) Запись, указывающая на тот же IP-адрес.

После разрешения DNS вы можете продолжить чтение этого урока.

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

  • назовите приложение как otherdomain.com при его создании, что скажет Dokku использовать этот домен, или
  • настройте запись DNS CNAME на www.otherdomain.com указывая на myapp.example.com .

Создание вашего первого приложения

SSH на ваш сервер и запустите следующее:

 $ dokku apps:create example.com 

Это создаст приложение под названием «example.com» на вашем сервере. Это приложение, которое появится в корне вашего домена; так как у него есть . в нем Dokku интерпретирует его как доменное имя и настраивает себя соответствующим образом. Для будущих приложений вы можете просто dokku apps:create appname , и appname.example.com будет их хостом.

Что-то, что вы можете сделать, это разместить статический сайт на example.com . Это позволит вам легко обновлять его, особенно если вы используете статический конструктор сайтов, такой как middleman или jekyll .

Эта возможность встроена в Dokku через удобный buildpack-nginx . Чтобы установить его, в корне проекта создайте пустой файл с именем .static ( $ touch .static ). Вот как buildpack обнаруживает статический сайт. Когда вы нажимаете это на Dokku, он должен обнаружить, что вы создаете статический сайт, и действовать соответствующим образом.

Ваш проект может быть таким же простым, как файл index.html , содержащий все, что вы хотите. Создайте новый репозиторий git с помощью git init и добавьте в него index.html , .static и .env . Затем добавьте Dokku в качестве удаленного:

 git remote add dokku [email protected]:example.com 

Теперь вы сможете развернуть с помощью простого git push:

 git push dokku master 

Вы должны увидеть, как Dokku настраивает контейнер для вашего приложения (обнаруживает статический сборочный пакет), а когда вы переходите на example.com вы должны увидеть созданный там файл index.html .

Следующие шаги

Если у вас есть какие-либо существующие приложения Heroku, вы можете просто добавить пульт git push dokku master с помощью Git и запустить git push dokku master .

Вам может понадобиться настроить какую-либо базу данных. К счастью, проект Dokku в настоящее время поддерживает множество плагинов хранилищ данных , включая Postgres, Mongo и Mysql. Все они очень просты в установке и использовании.

Если у вас есть какие-либо проблемы, документы Dokku очень просты и понятны.