У меня есть веб-сайт / приложение на основе LAMP, и я готовлюсь начать обслуживать клиентов. В моей нынешней системе каждому клиенту потребуется полный экземпляр веб-сайта (полная структура папок от корневого веб-сайта). Я хотел бы выделить основное приложение, создав только необходимые индивидуальные файлы для каждого клиента.
Вот что я ищу: способ сказать: «Если файл существует в папке клиента, используйте его. В противном случае используйте файл из папки основного приложения». Что-то вроде условной или приоритетной символической ссылки, но работает для всего дерева папок. Таким образом, мне не придется менять код во фреймворке, и разделение может происходить прозрачно для приложения.
Существует ли эта функция в Linux или мне нужно реализовать ее на веб-сервере?
Спасибо!
Вы можете использовать файловую систему объединения, например aufs или UnionFS для наложения каталогов друг на друга. Доступ к файлу включает проверку наложений в определенном порядке, пока файл не будет найден.
Распространенным методом для этого является использование структуры папок для вашего приложения, которая поддерживает это, например /app
для общего кода и /config
для локального конфига. Затем вы символизируете ссылку /app
в общий каталог исходного кода и иметь фактический каталог для /config
. Это легко воспроизвести и эффективно. Среди прочего, это позволяет очень легко обновить, поскольку вам просто нужно заменить один общий каталог.
Я бы рассмотрел это как очень простой критерий качества и предложил исправить ваше приложение, чтобы это позволяло.
Кроме того, функциональность, о которой вы изначально просили, не существует.
То, что вы описываете, обычно достигается посредством версий. Наиболее часто используемыми системами управления версиями в последнее время являются Subversion и Git.
Если вы настроили базовый репозиторий, вы можете филиал это для каждой установки клиента и предоставить исправления и различия, необходимые для изменения исходных текстов. Поскольку у вас будут разные ветки основного приложения, вам придется протестировать исправления, примененные к базовому приложению для каждой ветки, но на самом деле другого пути нет.
Поскольку вы используете Linux, и оба SCM поставляются со всеми основными дистрибутивами, у вас не будет особых проблем с настройкой любого из них.