Приведем пошаговую инструкцию (технологическая карта) по переносу сайта на JOOMLA с одного хостинга на другой на примере сайта pulsefitness.ru.

Предварительная подготовка. Необходимо выяснить пароль для доступа с правом записи в корневую папку сайта. Доступ нужен по протоколу FTP, а лучше SSH. Имя базы данных сайта логин и пароль доступа к базе можно узнать из файла configuration.php.

  1. Скопируйте скрытые файлы из корневой папки сайта (.htaccess). и файл конфигурации configuration.php.
  2. Создайте архив системы управления сайта (все файлы и папки сайта начиная с корневой)
  3. Выясните в какой кодировке работала база данных сайта.
  4. Создайте дамп базы данных сайта.
  5. Скопируйте дамп базы данных и архив системы управления сайта.

Далее операции выполняются на новом хостинге (у нас в примере хостинг виртуальный).

  1. Терминалом подключитесь к серверу сайта по протоколу SSH.
  2. Создайте администратора сайта и папку для вашего сайта, например, /var/www/pulsefitness.ru/
  3. Создайте алиас с www для вашего сайта.
  4. Разрешите членам группы запись в корневую папку Вашего сайта.
  5. Смените группу владельцев корневой папки сайта на www-data
  6. Скопируйте дамп базы данных, архив системы управления сайта и скрытые файлы на хостинг.
  7. Для того чтобы распаковать архив сайта от имени www-data, создайте в корне сайта файл unzip.php.
  8. Распакуйте, воспользовавшись браузером, архив сайта.
  9. После извлечения сайта из архива, удалите файл unzip.php
  10. Войдите под root в консоль MySQL
  11. Создайте базу данных для сайта [с тем же именем] и в той же кодировке, что и было раньше.
  12. Войдите в новую базу.
  13. Загрузите в новую базу все данные из резервной копии.
  14. В случае необходимости, в файла configuration.php измените логин и пароль доступа к базе данных.
  15. Установите соответствующие права на базу в консоли MySQL.

tar и gzip архиватор — создание и извлечение архива сайта

Утилиты tar и gzip присутствуют во многих дистрибутивах Linux по умолчанию. gzip — архиватор он сжимает файлы, tar — упаковывает файлы в один файл.

Приведем пример создания архива сайта (без базы данных):

Перейдите в корневую папку сайта, обычно это папка /var/www или на виртуальном хостинге для сайта UESAKA это папка /var/www/uesaka.ru и заархивируйте сайт:

cd var/www/uesaka.ru
tar -zcvf uesaka.ru.tar.gz *

В этом примере команда tar упаковывает все файлы и папки в один файл uesaka.ru.tar, а затем архиватор gzip сжимает этот файл в архив uesaka.ru.tar.gz.

Большое преимущество такого метода в том, что tar корректно сохраняет все атрибуты файлов и папок — владельцы, группы пользователей и права доступа.

Внимание! Предыдущая команда не сохранит в архиве скрытые файлы из корневой директории, например, .htaccess. Скопируйте скрытые файлы отдельно или воспользуйтесь следующей командой:

tar -zcvf uesaka.ru.tar.gz . --exclude="uesaka.ru.tar.gz"

где точка указывает на весь текущий каталог, а параметр --exclude=ШАБЛОН позволяет исключать файлы из архива.

Чтобы распаковать архив сайта, перейдите в тот же каталог и распакуйте файл архива:

tar -xzf uesaka.ru.tar.gz

Кодировка символов в MySQL

Сервер баз данных MySQL поддерживает несколько уровней установок кодировки символов. Переменные character_set определяют кодировку на всем сервере.

Следующая команда выводит текущие установки переменных character_set:

mysql -u root -p mysql

mysql> show variables like "character_set%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

При создании базы данных в MySQL может быть задана своя кодировка, проверим её для базы mysql:

mysql> show create database mysql;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| mysql    | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

В базе данных MySQL для каждой таблицы может быть задана своя кодировка, проверим её для таблицы mysql.user:

mysql> use mysql;
Database changed

mysql> show create table user;
............
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
...........
 

Если при создании базы данных или таблицы в ней кодировка не была задана явно, то для базы данных устанавливается кодировка из character_set_database, а для таблицы — кодировка установленная в базе данных.

mysqldump создание Резервной копии MySQL базы сайта на JOOMLA

Резервную копию MySQL базы данных можно сделать при помощи утилиты mysqldump. Также, с помощью mysqldump можно восстановить базу данных MySQL.

Для доступа к базе данных сайта на JOOMLA необходимо узнать имя пользователя MySQL базы, пароль пользователя MySQL и, собственно, имя базы данных.

Пароль к MySQL, имя пользователя MySQL и имя базы данных DB хранится в файле конфигурации JOOMLA configuration.php Пароль и имя пользователя MySQL базы сайта можно узнать из командной строки:

cat /var/www/uesaka.ru/configuration.php

..........................
	public $dbtype = 'mysql';
	public $host = 'localhost';
	public $user = 'root';
	public $password = '123';
	public $db = 'uesakaru';
..........................

Кроме того, по FTP можете скачать из корня своего сайта файл configuration.php и в нем посмотреть название базы данных MySQL, имя пользователя базы данных и пароль к MySQL базе.

Теперь можно сделать резервную копию базы данных сайта:

mysqldump --skip-opt --add-locks -uroot -p uesakaru > uesakaru.sql

В результате выполнения этой команды будет создан файл uesakaru.sql — полная копия базы данных сайта с инструкциями для ее восстановления.

Ключ --skip-opt позволяет успешно обойти ошибку: "mysqldump: Got error: 1044: Access denied for user 'root'@'localhost' to database 'uesakaru' when using LOCK TABLES"

Размещение сайтов на виртуальном хостинге

Создайте администратора сайта и папку для вашего сайта, например, uesaka.ru:

sudo adduser --home /var/www/uesaka.ru/ adminname

Создайте алиас с www для вашего сайта:

sudo ln -s /var/www/uesaka.ru /var/www/www.uesaka.ru

Пример размещения на сервере папок для сайта uesaka.ru

Пример размещения папок сайта на виртуальном хостинге

Скопируйте файлы Вашего сайта в папку /var/www/uesaka.ru

Права доступа к папке сайта

Удобно если на виртуальном хостинге, папка сайта является домашним каталогом владельца сайта.

В таком случае, владелец сайта от своего имени может размещать файлы в папке сайта и наполнять сайт. Как быть если на Вашем сайте предусмотрена работа CMS системы (Content Management System)? PHP код на Ubuntu LAMP сервере выполняется от имени пользователя www-data.

Смените группу владельцев корневой папки сайта.

sudo chgrp www-data /var/www/uesaka.ru

Разрешите членам группы запись в корневую папку Вашего сайта.

sudo chmod 775 /var/www/uesaka.ru

Войдите в систему с именем пользователя владельца сайта и перейдите в корневую папку своего сайта (uesaka.ru).

su adminname
cd /var/www/uesaka.ru

Как распаковать архив сайта от имени www-data

Если необходимо распаковать архив сайта от имени www-data, создайте в корне сайта файл unzip.php:

nano -w unzip.php
<html> <body> <pre> <?php system ("tar -xzvf uesaka.ru.tar.gz"); ?> </pre> </body> </html>

Запустите файл unzip.php через браузер и все файлы и папки сайта будут распакованы.

Распаковываем архив через web-интерфейс

После извлечения сайта из архива, удалите файл unzip.php и, может быть, сам архив:

rm unzip.php
rm uesaka.ru.tar.gz

Восстановление MySQL базы данных сайта на JOOMLA

Восстанавливать MySQL базу данных сайта будем в консоли MySQL на новом хостинге. Создадим на новом хостинге базу данных с тем же именем, что и было раньше (uesakaru), и восстановим в нее базу данных сайта с файла резервной копии uesakaru.sql.

Войти в консоль MySQL позволяет Linux команда mysql. Ее параметрами являются имя пользователя базы данных и название базы данных.

Войдите в консоль MySQL с именем пользователя root, подключившись к базе mysql

mysql -u root -p mysql

Введите пароль пользователя root, не путать с root пользователем Linux.

CREATE DATABASE создание базы данных

Команда MySQL CREATE DATABASE позволяет создать базу данных, параметр CHARACTER SET позволяет указать в какой кодировке создавать базу.

Пример, создайте базу данных uesaka:

mysql> CREATE DATABASE uesakaru;

При необходимости, выясните в какой кодировке работала старая база и укажите кодировку при создании новой базы:

mysql> CREATE DATABASE uesakaru CHARACTER SET utf8;

SOURCE восстановление MySQL базы данных из резервной копии

MySQL команда SOURCE позволяет загрузить из резервной копии в базу данных все таблицы с данными и настроить базу MySQL с оригинальными параметрами.

Предположим у нас есть резервная копия базы данных сайта uesaka.ru, файл uesakaru.sql. Восстановим эту базу на новом хостинге.

Войдите в новую базу

mysql> use uesakaru;

Загрузите в новую базу все данные из резервной копии:

mysql> source /var/www/uesaka.ru/uesakaru.sql;
quit;

Резервная копия создана, но ее владелец root. На старом сайте владельцем базы возможно был другой Юзер. Еще хуже ситуация, если на старом сайте владельцем MySQL базы также был root но с другим паролем.

В любом случае, необходимо сменить имя пользователя и пароль MySQL базы сайта и указать соответствующие имя пользователя MySQL базы и его пароль в файле конфигурации JOOMLA.

Как сменить пользователя MySQL базы данных в JOOMLA

В настройках, по умолчанию, пользователем MySQL базы в системе управления контентом сайта JOOMLA является пользователь root, к тому же еще и без пароля.

Такая ситуация не способствует безопасности сайта и в целом WEB-сервера. У такого сайта на JOOMLA могут возникнуть трудности при смене хостинга.

Необходимо изменить пароль и пользователя MySQL базы в файле конфигурации JOOMLA и на MySQL сервере.

Сначала смените пароль MySQL в файле конфигурации JOOMLA. В корне своего сайта (uesaka.ru) отредактируйте файл configuration.php:

nano /var/www/uesaka.ru/configuration.php

..........................
	public $dbtype = 'mysql';
	public $host = 'localhost';
	public $user = 'uesakasqluser';
	public $password = '123';
	public $db = 'uesakaru';
..........................

Теперь сделайте соответствующие изменения в MySQL консоли:

Войти в консоль MySQL позволяет Linux команда mysql. Ее параметрами являются имя пользователя базы данных и название базы данных.

Войдите в консоль MySQL с именем пользователя root, подключившись к базе mysql

mysql -u root -p mysql

Введите пароль пользователя root, не путать с root пользователем Linux.

Как создать нового пользователя базы данных MySQL и установить для него пароль?

Консольная команда MySQL GRANT ALL PRIVILEGES позволяет определить нового владельца базы данных MySQL и задать для него пароль.

Например, мы хотим для базы uesakaru назначить владельца uesakasqluser@localhost (на локальном компьютере) и установить пароль к MySQL базе 123:

mysql> GRANT ALL PRIVILEGES ON uesakaru.* TO uesakasqluser@localhost IDENTIFIED BY '123';