11 августа 2009

Создание demo-сайта на Joomla 1.5, который обновляется каждый час

Предположим у вас есть продукт, который нужно показать другим да не просто показать, а дать именно пощупать. Щупать будут люди разные: нормальные, любопытные и уебаны плохие. Конечно можно просто поместить demo-пользователя в группы «Manager», тем самым запретив ему доступ к глобальной конфигурации и установке/удаления расширений, однако это не решит проблему контента содержащегося в вашем продукте, который следопыты будут щупать с распростёртыми руками: редактировать, удалять, создавать свой. Конечно все эти действия испортят внешний вид продукта. Закрыть доступ к контенту — закрыть доступ к продукту! Выход есть: периодическое обновление БД через определённые промежутки времени.

И так приступим:
1) Создадим субдомен, например demo.domain.ru;
2) Установим Joomla на субдомен;
3) Настроим наше demo-расширение, которые будим показывать всему миру;
4) Создадим нового пользователя и присвоим ему группу «Manager»;
5) Для безопасности в глобальный конфигурации отключим ftp-режим.

Теперь на помощь приходить великий и могучий cron, который и будет выполнять всю грязную работёнку: каждый час удалять все таблицы БД на demo-сайте и создавать новые из бэкапа, а также чистить каталог с demo-сайтом и потом занова копировать оригинальные файлы, чтобы привести весь тот хаос на demo-сайте, оставленный после следопытов в начальное состояние.

Предположим что наш demo-сайт физически расположен в каталоге "/home/{user}/public_html/demo":
1) Создадим новый каталог "/home/{user}/demo.restorefrom". Не стоит создавать каталог «demo.restorefrom» в каталоге «public_html» тем самым открывая ему публичный доступ!

2) С помощью панели управлениях хостингом или SSH скопируем содержимое каталога "/home/{user}/public_html/demo" в "/home/{user}/demo.restorefrom/demo".

3) Через phpmyadmin сделаем полным дамп базы demo-сайта, назовём полученный файл «dump.sql» и положим в каталог "/home/{user}/demo.restorefrom".

4) Создадим shell скрипт restore.sh со следующим содержимым:
#!/bin/sh
mysql -u{mysql username} -p{mysql password} {database name} < dump.sql
rm -rf /home/{user}/public_html/demo
mkdir /home/{user}/public_html/demo
cp demo/* /home/{user}/public_html/demo

и загрузим его в "/home/{user}/demo.restorefrom"

5) Перейдём в панель управления хостингом и добавим задачу для cron:
/bin/sh /home/{user}/demo.restorefrom/restore.sh

а также выставим время выполнения каждый час: (0 * * * *)

Вот и всё! Не забудьте заменить пути на свои, также в файле restore.sh указать своё название БД, имя пользователя и пароль!
0

Комментарии:10

avatar
Подскажите пожалуйста почему на joomla 2.5 не получается крон ругается и пишет:
No such file or directory
Хотя проделал всё по вашей статье.
avatar
  • alex
  • 09 мая 2012, 12:46
  • +1
дело не в Жумле, пропишите правильные пути в restore.sh
avatar
Приписываю вроде как в написанной статье, может как то не так я вот:
/home/{логин}/demo.restorefrom/restore.sh


А в самом скрипте прописываю так:
#!/bin/sh
mysql -u{mysql юзер_БД} -p{mysql пароль} {database база_данных} < dump.sql
rm -rf /home/{логин}/public_html/demo
mkdir /home/{логин}/public_html/demo
cp demo/* /home/{логин}/public_html/demo

Что не так?
avatar
  • alex
  • 09 мая 2012, 13:11
  • +1
файлы restore.sh и dump.sql точно рядом лежат?
точно к каталогу с установленной жумлой такой пусть: /home/{логин}/public_html/demo

посмотрите в configuration.php переменную $log_path
больше у меня идей нет. вроде должно работать
avatar
Все точно так.
Мне не понятно фигурные скобки {} обязательно прописывать как в скрипте, так и в задачи для крон?
avatar
  • alex
  • 09 мая 2012, 13:23
  • +1
не конечно. и в скрипте они не нужны!
везде вместо /home/{логин}/public_html/demo напишите то, что у вас в configuration.php переменной $log_path только удалите /logs

например у меня в configuration.php:
/home/p7837/www/http://d97805h8.beget.tech/logs

я удаляю /logs и получаю:
/home/p7837/www/http://d97805h8.beget.tech

и вот этот пусть пишу и в крон и в restore.sh
avatar
Теперь понятно, домой приеду попробую, спасибо огромное за помощьalex !
avatar
Блин ни чего не получается, прописал без скобок, за то вместо No such file or directory пишет Permission denied Типа доступ запрещен, но к чему доступ то???, и ещё стало хуже папка с демо сайтом, то есть её садержимое исчезает и остается пустая всё удаляется хорошо что есть резервная копия в:
/home/user/demo.restorefrom/demo
если бы не она пришлось jooml(у) устанавливать по новой.
Побовал ставить на все каталоги в том числе и на сам скрипт с бекапом сайта права 777, но та же история! Уже мозг сломал, что за фигня...?
avatar
  • Genetics
  • 09 октября 2012, 16:37
  • +1
Спасибо, очень помогло (делал для Joomla 2.5), с некоторыми доработками.

1. При создании копии дампа базы данных нужно отметить флажок «Добавить выражение DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT», чтобы перед созданием таблиц, старые удалялись.

И в скрипте к копиям базы и файлам указывать полные пути:

#!/bin/sh
mysql -u{mysql username} -p{mysql password} {database name} < /home/{user}/demo.restorefrom/dump.sql
rm -rf /home/{user}/public_html/demo
mkdir /home/{user}/public_html/demo
cp -r /home/{user}/demo.restorefrom/demo/* /home/{user}/public_html/demo
avatar
Спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.