Разворачивание сервиса NGINX в D2C.io

Это руководство поможет вам развернуть сервис NGINX в Docker контейнере. Это edge сервис, который обслуживает HTTP и HTTPS. В D2C реализована поддержка бесплатных TLS сертификатов от Let’s Encrypt и в этой статье мы разберем насколько легко их можно использовать. Данное руководство может быть полезно как начинающим, так и продвинутым разработчикам. 

Denis Zaripov

Product manager

Почему Docker?

Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.

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

Ознакомиться с технологией и преимуществами можно в оригинальной статье Docker, либо с переводом на русский язык вступительной статьи документации.

Подготовка

Будет проще начать, если у вас уже есть подключенный сервер. 

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

Создание сервиса NGINX

Для начала, потребуется открыть или создать любой проект и нажать «+Создать сервис». Вы увидите список нативно поддерживаемых сервисов, которые можно развернуть с помощью D2C. Нажимаем на плитку NGINX

Также вы можете здесь увидеть NGINX+Cluster и NGINX+Static. По ним у нас есть отдельные руководства.

Создание сервиса NGINX. Настройки сервиса

Name

Имя должно начинаться с буквы и содержать не более 16 символов (допускаются латинские символы и цифры).

У каждого сервиса есть своё уникальное имя. Сервисы могут обращаться друг к другу по имени контейнера или по alias-именам (например, finn).

Version

Вы можете выбрать версию для вашего приложения из списка:

Создание сервиса NGINX. Обслуживание сервисов

Это самый важный блок в сервисе. Он создан для обслуживания сервисов из любых проектов в вашем аккаунте. Иногда удобно иметь всего один NGINX сервис (на сервере с зарезервированным IP :)), который обслуживает приложения из различных проектов.

Вы можете выбрать сервис, который требуется обслуживать, нажав на кнопку «+Add service config«.

Давайте начнем с Python приложением под названием Shadow. После выбора сервиса вы увидите настройки:

Protocol and Mode

Вы можете выбрать тип протокола: HTTP или HTTPS. Тип может быть изменен после разворачивания. Возможно для начала будет достаточно попробовать HTTP и после этого изменить на HTTPS.

Mode

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

  • uWSGI. Может быть использован для приложений на Ruby или Python 
  • FastCGI. Используется для обслуживания PHP-FPM приложений.
Config. HTTP

Нажав на кнопку «Generate config» вы можете увидеть автоматически сгенерированный конфиг для выбранного сервиса:

Конфиг можно редактировать. Для этого нажмите на кнопку «Edit«. Для того, чтобы вернутся к исходному содержимому конфига нажмите на кнопку»Generate new config«. 

Domains

По умолчанию, D2C генерирует публичный домен вида [servicename-www].[accountID].[at].d2c.io.

Вы можете добавить свои домены, выбрав «Own domains«.

Static

Вы можете включить режим обслуживания статических файлов. Этот режим является обязательным для PHP-FPM сервисов. NGINX может обслуживать статические файлы только на одном сервере с PHP-FPM.

Config. HTTPS

Давайте сгенерируем новый конфиг с HTTPS. 

Let’s Encrypt

После нажатия на «Generate config» вы можете увидеть новый сгенерированный конфиг с использованием:

Вы также можете изменить домены на свои как описано выше.

Security Level

Можно выбрать уровни защиты:

  • Medium (TLS 1, 1.1, 1.2)
  • High (TLS 1.2)
Renewal

Все Let’s Encrypt сертификаты выданные с использованием D2C обновляются автоматически. Запрос на обновление отправляется каждый день.

Own certificates

Вы можете загрузить свои сертификаты. Используйте левое поле для загрузки HTTPS сертификата (.crt) и правое для загрузки HTTPS ключа (.key).

Создание сервиса NGINX. Выбор серверов

В большинстве случаев достаточно выбрать имя сервиса, версию и выбрать какой сервис NGINX будет обслуживать. Теперь вы можете выбрать сервер и нажать «Create service». 

У сервиса NGINX также есть дополнительные настройкиalso has advanced settings. Мы покажем их ниже.

Есть одна особенность, которую необходимо понимать на этом шаге. В NGINX по умолчанию включен доступ из интернета (access from the Internet). 80 и 443 порты должны быть свободны на сервере, который вы планируете использовать для разворачивания NGINX. Если вы используете облачные сервера от поддерживаемых облачных провайдеров — занятые порты показываются на карточке сервера:

После успешного разворачивания проект должен выглядеть следующим образом:

На карточке сервиса теперь отображается ссылка на приложение. 

Создание сервиса NGINX. Дополнительные настройки.

Нажмите на кнопку «Show advanced settings«.

Ports

Первый блок в этой секции — Порты.

Доступ из Интернета (Access from the Internet) в NGINX включен по умолчанию. Вы можете отлючить доступ во время создания или последующего редактирования сервиса.

Persistent data volumes

D2C разделяет приложение от данных приложения. Docker volumes используются для хранения постоянных данных. 

Configs

В D2C для NGINX создается стандартный конфиг nginx.conf. Вы можете его изменить используя кнопку «Edit«.

Нажмите на кнопку “Generate new config” если требуется восстановить конфиг до стандартного.

Global dependencies 

В этом поле вы можете указать комманды для установки глобальных зависимостей и модификации Docker образа вашего сервиса.

Initial commands

Команды, которые выполняются только один раз после первого разворачивания сервиса.

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

Что дальше?

В следующей статье мы поговорим о:

  • обслуживании edge сервисов: проверка логов и метрик, обновление версии