Это руководство поможет развернуть несколько веб-сайтов на один сервер используя платформу D2C и стэки из нашего Stackhub.
В первом примере я возьму WordPress light стэк и разверну его дважды. В результате должна получится следующая конфигурация:
Denis Zaripov
Product manager

Во втором я разверну ещё один веб-сайт используя имеющийся сервис базы данных. Пример конфигурации:

Пример 1. Подготовка
Я уже развернул WordPress light стэк и сделал форк репозитория со стэком.
Вы можете сделать свой форк или использовать мой. Всё что нужно сделать с форком — это выключить remoteAccess edge-сервиса (балансировщик HAProxy в данном примере) и Adminer.
- name: balancer type: haproxy version: latest ports: - 80 - 443 remoteAccess: false serviceFiles: - name: blog sticky: true deployTo: - mainwp - name: adminer type: docker image: adminer version: latest ports: - 8080 remoteAccess: false env: ADMINER_DEFAULT_SERVER: "{{=service('db').getMasterAlias()}}" deployTo: - mainwp

После этого необходимо выключить доступ из Интернета для этих сервисов в текущем проекте.
Откроем сервисы HAProxy и Admiber → Edit settings → Disable Internet Access

Создание второго стэка
Давайте создадим второй стэк.
Создадим новый проект → нажмем «Import stack» → вставим ссылку на форк (можете использовать ссылку на разворачивание моего форка) → нажмем «Import from link«

Выбираем вкладку «Select existing hosts» и имеющийся сервер

После этого, заполняем необходимые поля, такие как: root и user пароли к базе данных и environment variables для сервиса blog.


Теперь мы можем нажать «Create hosts and services«. Развернутся все сервисы

Создание серивса NGINX
Последнее, что необходимо сделать это создать сервис NGINX. В отличие от HAProxy, он может обслуживать любое количество сервисов в D2C. Также, для него требуются открытые 88 и 443 порты на сервере. Для этого мы закрыли их раннее.
Давайте откроем любой проект, нажмем +Create service» и найдем плитку NGINX.

После этого, нам нужно создать конфиги для наших сервисов. Находим блок Configure services, нажимаем «+Add service config» и выбираем balancer.

Нажимем «Generate config«.

Конфиг сгенерируется автоматически.

На этом шаге вы также можете настройть свои домены и получить бесплатный HTTPS сертификат от Let’s Encrypt. Убедитесь, что DNS-запись для дополнительных доменов с таким же адресом, как и у сервера NGINX должна быть доступна в этот момент.
Теперь, нам нужно сделать того же самое для сервиса Adminer.



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

Мы добавили все сервисы в NGINX и можем развернуть его.


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

Вы можете редактировать NGINX конфиги в будущем и добавлять домены после всех тестов. Больше информации о создании сервиса NGINX вы можете найти в отдельной статье.
Пример 2. Создание нового веб-сайта с одним сервисом базы данных
Иногда для несколькоих маленьких проектов вам требуется только один сервис базы данных. Давайте рассмотрим этот пример, в котором сервис базы данных(MariaDB) уже развернут.
Создание новой базы данных и пользователя
Для начала, нам нужно создать новую базу данных в существуещей MariaDB. Для этого, вы можете использовать то, что привыкли: Admiber (который уже в стэке), phpMyAdmin, терминал и так далее.
Я буду использовать Adminer и покажу пример с ним. После авторизации, нажмите «Create database«.

Придумайте название, выберите кодировку и нажмите «Save«.

Будет создана новая база данных. Вы можете использовать пользователя (username), который уже создан для этого сервиса базы данных. Я создам нового. Перехожу в Privileges.

Далее, указываю нового пользователя, пароль и нажимаю галочку в пункте прав «All privieleges«.

Новый пользователь создан.

Клонирование сервиса Redis
Далее, я собираюсь клонировать сервисы. В наших WordPress стэках мы используем Redis и ставим плагин для работы с ним. Поэтому, я склонирую его первым.
Откройте сервис Redis (название в стеке — cache) → нажмите «Clone» → Выберите новый проект

Придумайте имя и нажмите ok.

Будет открыта страница создания сервиса с настройками из оригинального. В данном случае с сервисом Redis нам ничего делать не нужно. Поэтому, мы просто выбираем сервер и нажимаем «Create service«.

Клонирование сервиса WordPress
Процесс практически такой, но нам необходимо изменить некоторые настройки.
Также, как и в случае с Redis, я я открываю сервис WordPress (Docker сервис с названием blog в стэке) и клонирую его в новый проект.

Задаю имя и нажимаю OK.

Далее нам нужно заменить путь в блоке Initial commands, подставив везде /var/www/newwp
(имя, которое вы использовали при создании сервиса)
cmd wp core install --url=newwp.iugu74tb2.at.d2c.io --title='"$WP_TITLE"' --admin_user=$WP_ADMIN_USERNAME --admin_password=$WP_ADMIN_PASSWORD --admin_email=$WP_ADMIN_EMAIL --path=/var/www/newwp cmd wp plugin install redis-cache --activate --path=/var/www/newwp cmd wp redis enable --path=/var/www/newwp cmd wp plugin install nginx-helper --activate --path=/var/www/newwp echo '{"enable_purge":"1","cache_method":"enable_fastcgi","purge_method":"unlink_files","enable_map":null,"enable_log":null,"log_level":"INFO","log_filesize":"5","enable_stamp":null,"purge_homepage_on_edit":"1","purge_homepage_on_del":"1","purge_archive_on_edit":"1","purge_archive_on_del":"1","purge_archive_on_new_comment":null,"purge_archive_on_deleted_comment":null,"purge_page_on_mod":"1","purge_page_on_new_comment":"1","purge_page_on_deleted_comment":"1","redis_hostname":"cache","redis_port":"6379","redis_prefix":"nginx-cache:","purge_url":"","redis_enabled_by_constant":0}' | cmd wp option add rt_wp_nginx_helper_options --format=json --path=/var/www/newwp

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

После этого, я указываю новую базу данных в wp-config.php
. Для этого, перехожу к блоку «Configs» и заменяю настройки для базы данных и Redis:
/** The name of the database for WordPress */ define('DB_NAME', 'newwpbase'); /** MySQL database username */ define('DB_USER', 'newwordpress'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** Define Redis host */ define('WP_REDIS_HOST', 'redis');
Redis host — это имя, которое вы назначили сервису. Вы можете его увидеть на карточке контейнера на странице сервиса.

Нажмите «Create service» и новый WordPress будет развернут на сервере.

Создание конфига NGINX
Последнее, что нужно сделать — это создать NGINX конфиг для нового сервиса WordPress. Процесс такой же, как и рассматривали раннее:
Открываем сервис NGINX → Edit settings → Блок Configure service → +Add service config → Generate config → Нажимаем «Update service«.

Новый веб-сайт WordPress теперь доступен по специальной ссылке.

В заключение
В этом руководстве мы рассмотрели:
- как развернуть один и тот же стэк на один сервер
- как создать сервис NGINX и добавить в него сервисные конфиги
- как создать новую базу данных используя Adminer
- как клонировать сервисы в D2C
- как создать новый веб-сайт используя имеющийся сервис базы данных
Надеюсь, руководство было для вас полезным. Напишите нам, если хотите узнать больше о том, что можно сделать с помощью D2C используя форму в контактах или напишите нам в Discord.