Несколько веб-сайтов, работающих на одной кодовой базе?
Вопрос
Мы разрабатываем приложение, которое будет предлагаться в качестве размещенного решения.Я поражен пониманием того, как я могу использовать несколько сайтов с одним и тем же кодом без дублирования базового кода.
например:веб-сайт 1:www.example.com и веб-сайт 2:www.sample.com будет работать с тем же кодом, но будет иметь другие параметры конфигурации и другую тему...например, мы запускаем наши собственные доменные имена в WordPress.
я хотел бы знать, как я могу это сделать.
также в случае базы данных..было бы лучше, если бы я создавал отдельные базы данных для каждого веб-сайта или использовал одну и ту же базу данных с идентификатором веб-сайта в качестве столбца в каждой таблице.
пожалуйста, помогите мне.
[уточнение] это не псевдоним домена.Нравится...это была бы услуга.где разным клиентам будет предложено одно и то же приложение на их собственном доменном имени с разной тематикой.что-то вроде того, что делает blogger..с собственными доменными именами, но с тем же приложением для блога
[технология] в частности, я рассматриваю, как использовать имя хоста, чтобы определить, какую конфигурацию использовать мы используем PHP и MySQL
Решение
Повторное использование кода определенно желательно.Из ваших постов трудно представить, насколько сайты будут отличаться друг от друга.Мы говорим о логотипах и цветовых схемах или о другой функциональности?
Я начну с другого внешнего вида.Я также предположу, что это единственное приложение на сервере.
Я рекомендую тщательно спланировать вашу структуру каталогов.Что -то вроде:
www-root/
/ lib
/ themes
/ domain1
/ domain2
index.php:
<?php
$host = $_SERVER['HTTP_HOST'];
$include_theme = "themes/" . $host . "/configuration.php";
//make sure the file exists
require_once($include_theme);
Это упрощенный подход, но в нем есть кое-что, о чем стоит задуматься.
Другие советы
На самом деле все очень просто.
Ваша кодовая база может и должна быть единой.Вы загружаете его в hosting1 и hosting2.При обслуживании, как только вы обновите код, загрузите его в оба пространства хостинга.
Я полагаю, что именно так работает и этот сайт.Посмотрите на нижний колонтитул страницы.У вас есть stackoverflow, meta, superuser и serverfault.Если вы посмотрите, что сейчас написано в комментарии внизу справа, это будет "редакция svn:5404".То же самое.Одна база кода опубликована на четырех сайтах.Базы данных, конечно, разные и содержат совершенно разный контент.
Таким образом, переменными частями являются:
Конфигурация
Настройки
Данные
Те, которые вам нужно скопировать.
Вам нужно закодировать это таким образом, чтобы конфигурация и настройки не были жестко запрограммированы, а либо сохранялись в некоторой таблице базы данных, либо, по крайней мере, в некоторых внешних файлах конфигурации.Они не являются частью кода (или реализации, если хотите), поэтому им не обязательно быть в коде.Если они у вас есть, выньте их.
Я полагаю , вы мог бы создайте два разных домена, указывающих на один и тот же сервер, и установите разные конфигурации в зависимости от имени хоста.Хотя я бы не рекомендовал этого делать.Вы можете столкнуться с проблемами стабильности и производительности, особенно если у вас большая база пользователей или большое количество доменов, указывающих на базу кода.
Как правило, если вы используете несколько сайтов, у вас должен быть свой сервер для каждого.
Редактировать:
Прочитав комментарии к другому ответу, я немного лучше понимаю ваш вариант использования.
Если у вас есть большое количество сайтов, для которых вы хотите использовать эту настройку, если вы правильно спроектируете архитектуру и реализуете какую-либо схему балансировки нагрузки для обработки больших пользовательских нагрузок, вы могли бы заставить это работать.
Подводя итог:
- получите несколько серверов и распределите нагрузку между ними.
- разработайте приложение таким образом, чтобы оно справлялось с большой нагрузкой пользователя.
- используйте имя хоста, чтобы определить, какую конфигурацию использовать.
Прямо сейчас мы делаем это примерно с 15 000 уникальными доменами.Это несложно, но для правильной реализации требуются некоторые конструктивные соображения.
Вы можете сделать это с помощью одной кодовой базы и сервера и, по сути, просто создать свой код, полностью зависящий от входящего запроса HTTP_HOST ценность.Затем все в вашей базе данных отключается от этого значения, чтобы правильно разделить данные и ответить на запрос соответствующими данными / html.
По соображениям безопасности вы могли бы рассмотреть:
A) установите отдельное ограничение open_basedir для каждого хоста, чтобы загруженные пользователем файлы не могли быть доступны другим веб-сайтам, например:/общая библиотека /host1/пользовательские изображения /host2/ пользовательские изображения
Вы можете включить общие каталоги и каталоги, зависящие от домена, в разрешенные пути.
Б) подключайтесь к разной базе данных для каждого хоста, чтобы предотвратить случайное получение данных другого веб-сайта любыми ошибками в ваших запросах к базе данных и упростить масштабирование серверов баз данных (напримерПереместить занятые домены на другой сервер базы данных)
Если у вас чрезвычайно простое приложение, вам может сойти с рук одна база данных.
В любом случае у вас должна быть стратегия развертывания, чтобы ни один из сайтов не ломался при внесении изменений.