Pull to refresh

Окружение для 1С-Битрикс на базе Docker

Reading time 2 min
Views 17K

Зачем это нужно?


Долгое время все проекты нашей компании работали на PHP5, и вот возникло желание их ускорить путём перехода на PHP7, попутно обновиви всё окружение, необходимое для работы. Сразу возник вопрос: «Как заставить разные проекты работать на разных версиях PHP?»

Что пришло в голову:

  1. Содержать 2 разных сервера
  2. Использовать виртуальную машину
  3. Применить Docker

Вариант 1, очевидно экономически не выгоден. Вариант 2 мы посчитали сложным в настройке и слишком ресурсоёмким. С этим многие, наверное, не согласятся, однако, мы приняли решение использовать технологию Docker, ввиду её легковесности и простоты переноса приложений. Главным критерием выбора стало то, что Docker решает проблему «works on my machine».

Подбор окружения


Из СУБД выбрали Maria DB, так как во всех наших проектах важно быстрое чтение данных, необходимости одновременной записи данных нет.

Решили использовать связку Apache2 + Nginx, где Nginx обслуживает статические файлы а Apache2 берёт ответственность за динамику.

В будущем, в систему легко добавить, при необходимости, такие вещи как Redis, Memcached и т.п.

Структура окружения


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

Каждая из частей иммеют собственный контейнер с б/д. Т.е. базы данных demo и prod разделены. Так же demo и prod и включают в себя котейнер с PHP5 и контейнер с PHP7.

Во главе всего стоит Nginx proxy, направляя запросы именнно в тот контейнер который указан в конфигурационном файле. Это даёт возможность легко переключать версии PHP, просто перенаправив запрос в требуемый контейнер, так как файлы проектов доступны в каждом из них. Разница лишь в том, в какой среде они исполняются.

Пример конфигурации сайта для Nginx proxy:

server {
	listen 80;
	server_name example.ru www.example.ru;

	location / {
		proxy_pass http://demo_php7_web;
	}
}

Наглядно рассмотреть структуру системы можно на схеме:

image

Оптимизация системы


Большинство наших проектов работают на платформе 1С-Битрикс, поэтому мы настроили Apache2 и Nginx с учётом требований скипта bitrix_server_test, предоставляемого компанией 1С-Битрикс.

В контейнеры с веб-серверами установлены все необходимые расширения PHP, а также curl, rsyslog, htop, xvfb, libfontconfig, wkhtmltopdf, jpegoptim, optipng. Кроме того, настроено серверное сжатие файлов.

Особенности


  • На кроне стоит проверка конфигурационных файлов Apache2 и Nginx на изменение, с периодичностью 1 минута. Нет необходимости заходить в контейнер чтобы сделать reload после изменения настроек.
  • Контейнеры в веб-сервером имееют пользователя developer, от имени которого выполняются Apache2, Cron и Nginx
  • Поддерживается SSL, описание по настройке дано в примерах конфигурационных файлов

Использование


В настоящее время данная система, в которой запущено более 30 проектов, исправно работает на нашем сервере.

Проект доступен на GitHub. Там же приведено более подробное описание файловой структуры проекта и описано как начать работу.
Tags:
Hubs:
+6
Comments 11
Comments Comments 11

Articles