Как правильно создать конструктор сайтов?

Стоит задача подготовить проект такой можно сказать конструктор сайтов. То есть если партнер готов участвовать в проекте то при заполнении определенной формы ему разворачивался сайт на основе заданного шаблона. Я не то что с таким не сталкивался я даже не представляю с чего начать. Даже если честно не знаю как правильно оформить запрос в поисковике. Может кто то сталкивался с подобным и может посоветовать статьи?
  • Вопрос задан
  • 1683 просмотра
Пригласить эксперта
Ответы на вопрос 2
Lumore
@Lumore
Front-end developer
Создаешь круд компонента и его типов (карусель, контакты и на что фантазии хватит), делаешь выборку с базы данных. У компонента обязательно добавить type_id. Для каждого компонента создаешь виджет, с соотвествующей вью. Затем можно либо условями выводить , либо свитчем в index.php.

Я делаю так:
foreach ($components as $component) {
        switch ($component->type) {
            case Component::TYPE_CAROUSEL:
                echo Carousel::widget(['id' => $component->id]);
                break;
            case Component::TYPE_BLOCKS:
                echo Blocks::widget(['id' => $component->id]);
                break;
            case Component::TYPE_MAP:
                echo Map::widget(['id' => $component->id]);
                break;
            case Component::TYPE_CONTACT:
                echo Contact::widget(['id' => $component->id]);
                break;
        }
    }


А при создании компонента можно использовать scenarios() для разных типов полей.
Ответ написан
Комментировать
dubr
@dubr
пыхарь
В этом сезоне модно создавать конструкторы вот так!

Если серьезно - вы объясните, в чем проблема - в части devops, в смысле как БД создать / nginx перегрузить и т.д., или в части того, что на сайте будет и как юзер будет этим управлять? Если первое - надо понимать ваши масштабы, сколько сайтов, сколько серверов, размер бд, нагрузки. Если второе - то начать надо явно с тз и дизайна, а то ишь приноровились все на кодера сваливать )))

UPD. Раз интересует именно процесс разворачивания, давайте поделюсь мыслями, благо у меня есть небольшой опыт.

Вообще алгоритм довольно тупой - сначала сделать все руками, а потом написать скрипт, который делает то же самое =)

Для начала определитесь, будут ли все ваши сайтики работать на одной кодовой базе (скорее всего да, если нет - это уже ближе к шаред-хостингу). Дальше решите, нужен ли каждому свой персональный docroot - это зависит от того, как вы храните / раздаете статику. Если статика складывается куда-то далеко (типа на s3) - можно обойтись одним на всех, но ИМХО все-таки проще, когда он у каждого свой.

Получится какая-то такая структура:

app
public
    1
        static
        index.php
        config.php
    2
    ...


index.php подключает конфиг и запускает приложение.

Дальше вам надо сделать, чтобы public/1 открывался по хосту типа 1.hosting.com - это nginx с регулярками.

server {
    server_name   ~^(?<site_id>.+)\.hosting\.com$;
    root    /var/www/public/$site_id;
    ...
}


Кстати, если пыхе понадобится идентификатор сайта, его туда легко забросить:
fastcgi_param SITE_ID $site_id;

Есть нюанс с запуском PHP. По уму надо, чтобы на каждого был свой юзер, свой fpm-пул и т.д. Но у php-fpm в свое время не работал graceful reload, после добавления пула и перезапуска все клиенты получали 502. Я в итоге плюнул и стал всех обслуживать одним пулом, ограничившись open_basedir, но если у юзера есть хотя бы гипотетическая возможность добраться до кода (например какой-нибудь редактор шаблонов) - так делать не надо =) open_basedir передаем в конфиге нгинкса как-то так:

fastcgi_param  PHP_ADMIN_VALUE "open_basedir = $document_root"


Для подключения собственного домена юзайте map, он в нгинксе хороший =)
map $http_host $site_id {
    site.com    1;
    site2.com  2;
}

Эту конструкцию можно вытащить в отдельный файл и генерить автоматом.

С БД все просто: если можете сделать, чтобы все сидели в одной БД - так и делайте =) Если нет - делайте эталонный дамп и скрипт, который из него создает новую БД. И потом ломаем голову, как раскатывать миграции по куче баз и машин =)

С управляющим скриптом поступаем так: фигачим сами скрипты (на чем удобно, пхп вполне справится) и http api к ним, когда юзер что-то делает на "главном" сайте, дергается этот api, это облегчит жизнь, когда перестанете влезать на один сервер.

Для перезагрузки нгинкса и прочих стремных операций я завел отдельные sh-скрипты и засунул их в sudoers для того юзера, от которого работает api.

Между "главным" сайтом и api полезно поставить очередь, но для начала можно и синхронно работать.

В принципе все просто, но это конечно самодеятельность на коленке =) Мануала "пишем конструктор сайтов для чайников" я не нашел, да и вообще их живых не так много, опытом никто особо не делится. Мне больше всего помогло изучение работы шаред-хостингов, хотя и про инфы маловато.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы