Рубрики
Uncategorized

Создайте свой собственный Heroku с Dokku на Digitalocean ⚡

Вступление Итак, вы хотите иметь свою собственную инфраструктуру, имея лучшие товары … Помечено с Heroku, Docker, DevOps, Tuperial.

Итак, вы хотите иметь свою собственную инфраструктуру, имея лучшие товары, чтобы подтолкнуть ваш код к производству, верно?

Тогда вы нашли свой гид. Мы пройдем каждую вещь, которая вам понадобится.

Мы настроем сервер на DigitaloCean, настроим ваше приложение для использования с Dokku, научимся напрямую подтолкнуть код в производство и завершить руководство, добавив TLS/SSL в ваше приложение.

Лучшая вещь? Это все бесплатно. (*)

(*) Если вы новый пользователь на DigitaloCean и зарегистрируйтесь через ссылка на реферал Анкет

0. Прежде чем мы начнем

Что такое Докку

Вам может быть интересно, что такое Докку.

Докку это Docker-мощный Платформа как услуга (PAAS) Это помогает вам создать и управлять жизненным циклом приложений.

Это означает, что он разделяет много сходства с Heroku, поэтому, если вы использовали Heroku раньше, это станет вам знакомым. Например, вы можете push -код для развертывания Используйте сборки, масштабные процессы, и т.д

Предисловие

Для этого руководства я буду использовать Windows 10 с Git bash Терминал, но все должно быть одинаковым в любой системе GNU/Linux.

Сервер будет изображением DigitaloCean Ubuntu 20.04 с уже настроенным Dokku.

В качестве примера приложения мы будем использовать это Nodejs начинается проект Хероку.

Требования

  • Учетная запись DigitaloCean
  • Домен
  • Терминал
  • Пара ключей SSH

Требования информация

Если у вас нет учетной записи DigitaloCean, вы должны создать ее, это бесплатно! И если вы используете мой ссылка на реферал Вы получите \ $ 100 в качестве кредита бесплатно!

Если у вас нет пары клавиш SSH, то Следуйте этому уроку Чтобы узнать, как генерировать и добавить их в свою учетную запись DigitaloCean.

1. Создание капель

Это может быть самым простым шагом, так как DigitaloCean предлагает Ubuntu 20.04 Изображение с Dokku уже настроено , просто перейдите по этой ссылке и создайте каплю.

Затем просто выберите любые варианты, отвечающие вашим потребностям.

⚠ Вы должны выбрать обратный центр, который находится рядом с вами или вашим клиентом. ⚠

После того, как он будет создан, перейдите на вкладку «Сеть» вашей новой капли и назначьте плавающий IP.

Посетите этот IP в своем браузере, и вы найдете настройку Dokku.

Просто заполните детали своим общедоступным ключом SSH и доменом, который вы будете использовать. Я рекомендую включить Виртуальное именование , как это проще и чаще, чем использование портов.

Совет: Если вы добавили общественный SSH -ключ к вашему DigitaloCean раньше, Public SSH -ключ Форма должна была быть заполнена автоматически!

Ради этого руководства я буду использовать поддомен Докку На моем собственном домене, akbal.dev Анкет

2. Управление доменом

Мой текущий менеджер домена — CloudFlare, но вы можете использовать любой другой регистратор или менеджер домена, инструкции должны быть одинаковыми. 😊

DNS Records

Мы должны настроить настройки DNS, чтобы указать на наши новые капельки с плавающей IP.

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

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

Если вы используете CloudFlare и у вас возникли проблемы с подключением на следующих шагах, попробуйте установить прокси DNS Record к Только DNS вместо Прокси , как это, кажется, вызывает неприятности.

3. Локальная конфигурация

Прежде чем начать, мы должны настроить некоторые вещи на нашей конце.

💻 Эти шаги сделаны на нашем локальная машина Анкет

Добавить ключ SSH

Мы должны добавить наш личный ключ SSH к нашему локальному терминалу, чтобы мы могли аутентифицировать и подключиться к капельке.

eval `ssh-agent -s` # Start the agent that holds on to our keys
ssh-add '~/path/to/ssh/private.key' # Add our private SSH key

⚠ Это важный шаг, если вы не добавите частный ключ SSH в терминал, вы не сможете выдвинуть код в Докку позже!

Мы должны проверить, что ключ был успешно добавлен. Если выход пуст, ключ был не добавлен.

ssh-add -l

Затем давайте попробуем подключиться к нашей капельке через SSH в качестве пользователя root.

ssh root@

# E.g.
ssh root@dokku.akbal.dev

Вуаля, Мы в !

4. Приложение настроена

Нам понадобится приложение для запуска на Докку, не так ли?

💻 Эти шаги сделаны на нашем локальная машина Анкет

Репозиторий клона

Давайте клонируем пример приложения.

git clone https://github.com/heroku/node-js-getting-started.git

cd node-js-getting-started

Обратите внимание, что есть файл, с которым вы должны быть знакомы, если вы использовали Heroku раньше, Procfile Анкет Мы будем говорить об этом на следующем шаге.

Познакомиться

Теперь, когда мы клонировали репозиторий, мы можем установить зависимости и поиграть с приложением, если хотим.

npm install # Install dependencies

npm run start # Start the application

Теперь, если мы посетим http://localhost: 5000 В нашем браузере мы должны увидеть запуск приложения.

5. Конфигурация приложения

Мы должны настроить наше приложение, чтобы Dokku мог запустить его.

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

💻 Эти шаги сделаны на нашем локальная машина Анкет

Buildpacks Trivia

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

В этом руководстве мы используем приложение Nodejs, поэтому Dokku обнаружит и использует heroku’s nodejs buildpack.

Узнайте больше о Nodejs BuildPack.

Прозвать

Докку нужен Procfile Чтобы определить, что Типы процессов и команды используют наше приложение, например , чтобы запустить веб -сервер.

Вы должны создать этот файл, если у вас нет. Общий Nodejs Procfile Похоже:

web: node index.js

# Or like this
web: npm run start

Узнайте больше о Прозвать и Типы процессов.

Узел версия

Dokku загрузит и использует версию Nodejs, указанную в двигатели Раздел нашего Package.json Анкет

// ...
"engines": {
    "node": "12.x"
  },

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

Дальнейшая конфигурация

Вы должны проверить Документация BuildPack из языка, который вы используете для дальнейшей настройки вещей!

6. Конфигурация сервера

Теперь, когда мы можем подключиться к капельнице и настроить наше приложение, давайте немного настроим сервер.

🖥 Эти шаги сделаны на Dokku Droplet Анкет

ОЗУ обмен

Скорее всего, вы будете использовать Dokku на капельте с низкой памятью (<2 ГБ).

Чтобы исправить возможные сбои из -за низкой памяти, мы должны создать больший Смена файла Анкет Читать этот учебник Чтобы узнать, как это сделать.

7. Безопасность сервера

Хотя защита сервера не является легкой задачей, следующие инструкции позаботятся о самых распространенных проблемах.

🖥 Эти шаги сделаны на Dokku Droplet Анкет

Root user

Мы использовали корень Пользователь, но это риск безопасности . Мы не должны использовать его для всего, мы должны использовать нашего собственного пользователя с корень Привилегии Анкет

Следуйте это руководство Чтобы узнать, как создать нового пользователя с привилегиями SUDO.

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

USER= # Set the user variable
mkdir -p /home/$USER/.ssh # Create ssh directory
chmod 700 /home/$USER/.ssh # Apply directory permissions
cp /root/.ssh/authorized_keys /home/$USER/.ssh/authorized_keys # Copy the ssh authorized key
chown -R $USER:$USER /home/$USER/.ssh # Apply user and group permissions
sudo chmod 600 /home/$USER/.ssh/authorized_keys # Apply file permissions


# As a one-liner
USER=; mkdir -p /home/$USER/.ssh && chmod 700 /home/$USER/.ssh && cp /root/.ssh/authorized_keys /home/$USER/.ssh/authorized_keys && chown -R $USER:$USER /home/$USER/.ssh && sudo chmod 600 /home/$USER/.ssh/authorized_keys

# E.g.
USER=alejandro; mkdir -p /home/$USER/.ssh && chmod 700 /home/$USER/.ssh && cp /root/.ssh/authorized_keys /home/$USER/.ssh/authorized_keys && chown -R $USER:$USER /home/$USER/.ssh && sudo chmod 600 /home/$USER/.ssh/authorized_keys

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

ssh @

# E.g.
ssh alejandro@dokku.akbal.dev

Идеальный. Это сработало как очарование.

SSHD

Конфигурация капли по умолчанию позволяет любому войти в систему как корень Пользователь, это должно быть отключено, так как это риск безопасности.

Посмотрите на первый шаг из это руководство Чтобы узнать, как настроить SSHD и отключить корень Логин пользователя.

Порты докеров

Порты Docker открыты по умолчанию на брандмауэре, мы должны закрыть их, поскольку это может быть проблемой безопасности.

sudo ufw status # Optional, check the current rules on the firewall

# Delete Docker rules
sudo ufw delete allow 2375/tcp
sudo ufw delete allow 2376/tcp

sudo ufw status # Optional, check that Docker's ports are deleted

UFW — менеджер брандмауэра Ubuntu, Узнайте больше Анкет

Fail2ban

Fail2ban — это утилита, чтобы Защитите свой сервер от грубой силы и автоматических атак Анкет Он блокирует повторные попытки подключения и временно запрещает их.

Вот Легкий гид о том, как установить, настроить и использовать его.

8. Докку

Теперь, когда каждый шаг конфигурации завершен, мы можем перейти к действительно интересному шагу: На самом деле использование Dokku !

🖥 Эти шаги сделаны на Dokku Droplet Анкет

Докку Кли

Докку используется с терминала, У него нет интерфейса или веб -представления , и это его сильный момент, так как он потребляет меньше ресурсов вашей системы, которые понадобятся вашим приложениям.

Чтобы начать использовать Dokku просто введите Докку на терминале.

dokku

Общие команды Докку

Это некоторые команды, которые вам определенно придется использовать, поэтому посетите ссылки на документацию и ознакомьтесь с ними.

Создание приложений

Первым шагом будет создание приложения.

dokku apps:create 

# E.g.
dokku apps:create my-app

Приложение оболочка теперь создан, но пуст. Пока мы не нажимаем код, он ничего не сделает.

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

Узнайте больше об управлении приложениями в Докку.

Конфигурация домена

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

dokku domains:add  

# E.g.
dokku domains:add my-app my-app.dokku.akbal.dev

Узнайте больше об управлении доменами в Докку.

Конфигурация среды

Если наше приложение использует какие -либо переменные среды, Например, .env файл , вы должны добавить их через Докку.

dokku config:set  

# E.g.
dokku config:set my-app NODE_ENV=production

# You can add multiple environment variables.
dokku config:set my-app NODE_ENV=production SECURITY_KEY=XXX

Имейте в виду, что выполнение этой команды перезагружает приложение.

Узнайте больше об управлении переменными среды в Докку.

Развертывание кода

Теперь пришло время для реальной сделки, мы настроили все на нашей локальной машине и на сервере, так что Давайте разместим !

💻 Эти шаги сделаны на нашем локальная машина Анкет

Давайте добавим Dokku в качестве пульта GIT, чтобы мы могли нажать на него код.

git remote add  dokku@:

# E.g.
git remote add dokku dokku@dokku.akbal.dev:my-app

Единственное, что осталось, это толкать код, давайте попробуем!

git push  :master

# E.g.
git push dokku main

# Or if your branch is already master
git push dokku master

И это все! После того, как код будет выдвинут, вы должны увидеть, как Dokku обнаруживает и строит ваше приложение! 🥰

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

После того, как Докку будет сделан, он выведет ссылку для посещения вашего приложения в вашем браузере, сделайте это!

Веб -сайт может не сработать, потому что силы Докку HSTS , и мы еще не настроили TLS/SSL. Узнайте, как отключить HSTS.

Конфигурация TLS/SSL

Мы добавим Давайте зашифруем плагин Докку, чтобы заявление было подано с Https .

Сначала добавьте LetsEncrypt плагин в Докку.

sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

Затем добавьте Требуется LetsEncrypt Свяжитесь с электронной почтой через переменные среды.

dokku config:set  DOKKU_LETSENCRYPT_EMAIL=

# E.g.
dokku config:set my-app DOKKU_LETSENCRYPT_EMAIL=contact@akbal.dev

# We can set the contact email globally too, so it works for any application.
dokku config:set --global DOKKU_LETSENCRYPT_EMAIL=

Теперь пришло время генерировать сертификат для вашей заявки.

dokku letsencrypt 

# E.g.
dokku letsencrypt my-app

Это было так легко добавить Https .

Проверьте наш Super Secure Sate!

Узнайте больше о настройке плагина LetsEncrypt.

Масштабные процессы

Масштабирование процессов действительно легко, вам просто нужно сказать Dokku, и это справится со всем.

🖥 Эти шаги сделаны на Dokku Droplet Анкет

dokku ps:scale  =

# E.g.
dokku ps:scale my-app web=1

# Even multiple types
dokku ps:scale my-app web=1 worker=2

Узнайте больше о процессах масштабирования в Докку.

9. Разное

Дальнейшие знания

Я призываю вас пойти в Докку документация И игрушка со своим Теперь завершен Докку настроил. Вы узнаете много замечательных вещей, таких как Как прочитать журналы вашего приложения.

Поиск проблемы

Мне нужно определить, что идет не так Включить || Следующий режим || Анкет В этом режиме вывод будет более многословным, что поможет вам найти любую ошибку!

Не могу подтолкнуть код в Dokku Remote Это может быть связано с тем, что вы не добавили частный ключ SSH в свой терминал, попробуйте добавить его!

Dokku Remote Git Branch заранее Я был в ситуации, когда я пошел в Докку и вернулся на местном уровне к более раннему коммитию, это создало много проблем, пытаясь снова подтолкнуть, потому что собственный репозиторий Dokku GIT был || В будущем || Анкет К счастью, есть очень простое решение: Force Push! 💪 Введите полноэкранный режим Выйдите из полноэкранного режима

Агент вернул различные типа подписи SSH-RSA (ожидаемый RSA-SHA2-512) ( Windows 10 ) Похоже, что двоичные файлы SSH в Windows 10 устарели, а сервер отказывается от соединения, решение — использовать || Git bash || или любой другой терминал с обновленными двоичными файлами, Подробнее об этом || выпуск здесь

10. Конец

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

Полезные ссылки

Это некоторые ресурсы, которые могут быть очень полезны в вашем путешествии в Докку.

Самореализация

Если вы нашли этот учебник полезным, то вы должны следовать за мной, я буду публиковать более интересный контент! 🥰

Или поддержать меня в финансовом отношении. 💸

Если вы хотите продолжить обучение, ознакомьтесь с этой статьей « Как полностью защитить статью Ubuntu ».

Кредит

Это руководство стало возможным благодаря многим замечательным людям.

Оригинал: «https://dev.to/alejandroakbal/create-your-own-heroku-with-dokku-on-digitalocean-14ef»