Дано.
Много организаций (клиентов) с небольшим кол-вом сотрудников (пользователей). Клиентов например 50-100, пользователей 1-3 штуки на клиента. Конфигурация основанная на БП 3.0, платформа 8.3. Один клиент - одна отдельная база.
Нужно.
Максимально дёшево разместить их на одной виртуальной машине.
Что я пытаюсь сделать.
По причине экономии отметается клиент-серверный вариант и 1cfresh. Используем файловый вариант, для каждого клиента создаём по базе и публикуем их через веб-сервер. 1С работает только с веб-сервером Apache 2.0, 2.2 (2.4 не поддерживается). Используем 2.2.
К сожалению такой сетап очень несекьюрен. Если клиент каким-то образом получит возможность выполнять произвольный код в рамках конфигурации, то он спокойно сможет гулять по файловой системе и смотреть/портить чужие базы. В принципе, если не давать административные права в базе, то загрузка всяких внешних обработок ДОЛЖНА быть ограничена. Но зная какое решето БП3.0 и сама платформа, у меня на это надежды нет.
Работа 1С:Предприятия через веб-сервер выглядит вкратце так. В конфиг апача добавляется:
LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so"
Alias "/demo" "/var/www/html/demo/"
<Directory "/var/www/html/demo/">
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/html/demo/default.vrd"
</Directory>
В default.vrd прописываются настройки для 1с, в частности расположение каталога с базой, например /srv/1c/demo/
В итоге 1С:Предприятие работает внутри одного процесса httpd, который читает/пишет в каталог с базой /srv/1c/demo/ .
Разделение через apache2-mpm-itk
Пробовал использовать apache2-mpm-itk. Для каждого клиента создал отдельного unix-пользователя и виртуальный хост. Далее с помощью параметра AssignUserID в апаче, назначил каждому виртуальном хосту своего пользователя. Каждому пользователю дал права 700 на директорию со своей базой. В итоге разделение прав получилось сделать, но к великому сожалению платформа стала работать крайне нестабильно. Процессы httpd начали падать с ошибкой «child died with signal 11». От этого варианта пришлось отказаться.
Другие варианты с апачем - mpm-peruser мёртв, остальные mpm не позволяют запускать процессы httpd от разных пользователей, suexec не подходит, т.к. он работает только с cgi.
LXC или OpenVZ
Другой вариант, посадить каждого клиента в свой контейнер, со своей базой и своим апачем.
Пока опыта работы с этими технологиями у меня нет, буду курить.
Какой тип контейнеров выбрать?
Какой дистрибутив выбрать в качестве хоста?
В качестве «гостя» нужен дистрибутив с apache 2.2 и с пакетным менеджером умеющим rpm/deb, сейчас использую Ubuntu 12.04 LTS.
Может есть другие варианты решения?