Как развернуть несколько веб-сайтов на один сервер в D2C.io

Это руководство поможет развернуть несколько веб-сайтов на один сервер используя платформу 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.