Как я переносил сайт с html на Joomla Печать
Добавил(а) microsin   

Предварительно сайт на Joomla был подготовлен и тщательно протестирован на системе Denwer, туда перенесены руками все статьи старого html-сайта. Далее необходимо установить на сервер хостера новый протестированный сайт на Joomla, и так, чтобы в случае неудачи можно было быстро и безболезненно вернуть старую html-версию обратно. Рассмотрим процесс по шагам.

1. Сливаем все содержимое корня приватного ftp и архивируем. Для этого удобно использовать ftp-клиент Total Commander.

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

- подключился по ftp Total Commander-ом, в корневой папке моей домашней директории создал папку scripts (она не видна пользователям, заходящим на сайт). В корневой папке, кроме только что созданной папки scripts, находится также и папка public_html, в которой на Agava полагается хранить файлы сайта. Другими словами, папка public_html является корневой для сайта (там находится стартовый файл index.html и все файлы и папки сайта).

- подготовил поле для тестов - создал папку sour1 в папке public_html (тем же Total Commander-ом). В эту папку sour положил несколько файлов и создал несколько вложенных папок с файлами - это содержимое должно корректно переноситься в новое место и возвращаться обратно при работе скриптов. Создал также в корневом каталоге, где и папка sour, папку для месторасположения старых данных удаляемого сайта - oldsite. Записал в папку public_html тестовый файл dummy1.txt (он тоже должен переноситься скриптом). Итого, у меня получилась такая структура корневого каталога (некоторый вывод команды ls я опустил):

$ ls -Fa
log/
 ..
public_ftp/     тут находится корень анонимного ftp
public_html/    тут находится корень публикуемого сайта (там я создал oldsite)
scriptsfold/    место для скриптов переноса данных сайта
tmp/
 ..
dummy.txt
 ..

- создал два файла для скриптов remove_old_site.sh и restore_old_site.sh.

- в файлы скриптов записал тест, проверяющий перемещение нужных мне данных:

[Содержимое remove_old_site.sh]
#!/bin/sh
SOUR=public_html
DEST=public_html/oldsite/
mv -v $SOUR/sour1/ $DEST
cp $SOUR/dummy1.txt $DEST
rm $SOUR/dummy1.txt
  
[Содержимое restore_old_site.sh]
#!/bin/sh
SOUR=public_html/oldsite
DEST=public_html/
mv -v $SOUR/sour1/ $DEST
cp $SOUR/dummy1.txt $DEST
rm $SOUR/dummy1.txt

- перекопировал по ftp в папку scriptsfold два мои будущие скрипта remove_old_site.sh и restore_old_site.sh.

- тем же Total Commander-ом добавил владельцу право на выполнение этих файлов (меню Файл\Изменить атрибуты...). Теперь мои файлы стали исполняемыми скриптами.

- протестировал работу скриптов. Для этого зашел на BSD-шелл моего хостера по ssh и выполнил команды:

$ scriptsfold/remove_old_site.sh
$ scriptsfold/restore_old_site.sh

Как и следовало ожидать, тестируемая папка sour и файл dummy.txt при запуске remove_old_site.sh перекачивались в папку oldsite (папка sour вместе со своим содержимым), а при запуске restore_old_site.sh перекачивались назад в папку public_html.

3. Теперь сделаем более удобный перенос сайта - нужно, чтобы копировались те файлы папки, которые есть в изначально подготовленных списках. В итоге это у меня вылилось в 5 файлов, которые я положил в папку scriptsfold:

file_list.txt список файлов для переноса из корневого каталога сайта
folder_list.txt список папок  для переноса из корневого каталога сайта
movesite.sh скрипт, который переносит файлы и папки по спискам в заданном направлении
remove_old_site.sh запускает movesite.sh для удаления старого сайта
restore_old_site.sh запускает movesite.sh для восстановления старого сайта

Требования к файлам - они должны иметь unix-like строки (в конце строк должен быть только байт перевода строки символ LF == 0xA), и последняя строка в списках file_list.txt и folder_list.txt должна обязательно кончаться на перевод строки.

4. Удаляем старый сайт скриптом remove_old_site.sh, и переписываем туда инсталляцию с Denwer.

5. Импортируем базу данных MySQL (в командной строке FreeBSD хостера):

$ mysql --user=hostinguserlogin --password=hostinguserpass -hlocalhost --execute="CREATE
DATABASE jdatabase DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci"

Или через панель управления Agava по ссылке https://panel33.agava.net/ добавляем новую базу данных, например jdatabase (окошко "База данных:", кнопка "Добавить БД"). Если указать имя jdatabase, то добавится база данных с именем hostinguserlogin_jdatabase (автоматически добавляется префикс их имени логина пользователя хостинга).

6. Создаем пользователя mysqluser и указываем ему пароль, например bla-bla-bla-mysqlpass.

7. Привязываем пользователя hostinguserlogin_mysqluser к базе данных hostinguserlogin_jdatabase (кнопка "Добавить пользователя в БД").

8. Импортируем базу данных. Для этого копируем дамп базы данных dump.txt в каталог scriptsfold, и выполняем команду:

$ mysql --user=hostinguserlogin_mysqluser --password=bla-bla-bla-mysqlpass -hlocalhost
--default-character-set=cp1251 --character-sets-dir=/usr/local/share/mysql/charsets 
hostinguserlogin_jdatabase < scriptsfold/dump.txt

Немного пояснений. Опция --character-sets-dir требует найти каталог с кодировками (charset). Этот каталог находим командой

$ locate charsets

и найденный путь, где есть кодировка cp1251.xml (/usr/local/share/mysql/charsets), подставляем в командную строку. Остальное по опциям все очевидно.

9. Правим конфиг Joomla (public_html/configuration.php):

$mosConfig_absolute_path = '/home/hostinguserlogin/public_html';
$mosConfig_cachepath = '/home/hostinguserlogin/public_html/cache';
$mosConfig_db = 'hostinguserlogin_jdatabase';
$mosConfig_live_site = 'http://yourdomain.ru';
$mosConfig_password = 'bla-bla-bla-mysqlpass';
$mosConfig_user = 'hostinguserlogin_mysqluser';

10. Меняем пароль админа:

admin
admin_joomla_pass

11. Меняем пароль пользователя:

user1
user1password

12. Защищаемся от уязвимостей. Меняем в файле globals.php

define( 'RG_EMULATION', 1 );

на

define( 'RG_EMULATION', 0);

В файл .htaccess в начало добавляем строчку:

php_value register_globals 0

В папку administrator записываем файл .htaccess нулевой длины, убеждаемся, что на него нет прав на запись у пользователей группы и других пользователей. Идеальный вариант - режим только для чтения для всех, в том числе и для владельца.

13. Делаем автопереадресацию со старых страниц сайта (когда он был на html) на новое содержимое сайта [1].

[Ссылки]

1Автопереадресация на другой URL.