Итак, вы хотите иметь свою собственную инфраструктуру, имея лучшие товары, чтобы подтолкнуть ваш код к производству, верно?
Тогда вы нашли свой гид. Мы пройдем каждую вещь, которая вам понадобится.
Мы настроем сервер на 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 adddokku@ : # 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:setDOKKU_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 ».
Кредит
Это руководство стало возможным благодаря многим замечательным людям.
- Linuxize
- Digitalocean и их сообщество
- Askubuntu для Устранение неполадок
Оригинал: «https://dev.to/alejandroakbal/create-your-own-heroku-with-dokku-on-digitalocean-14ef»