Эту инструкцию по настройке сервера можно использовать почти с любой CMS на PHP и MySQL: Wordpress, Drupal, MODX, October CMS и т. д.
1. Создаем сервер
Редакция выделила бюджет, поэтому берем сервер помощнее. Например, провайдер IT-инфраструктуры Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, возможность подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разрабов. Плюс, быстрая тех. поддержка, наличие резервного копирования и API. Такие серверы предназначены для нескольких десятков небольших сайтов или одного крупного.
Мы выберем следующую конфигурацию:
Intel Core i7-8700, 6 ядер по 3.2 ГГц, 32 ГБ ОЗУ, 960 ГБ SSD – отлично, Джумлу потянет.
В качестве ОС выбираем Ubuntu 20.04:
Арендуем сразу два сервера, чтобы два раза не вставать:
Кликнем по Первому серверу
, перейдем во вкладку Операционная система
и узнаем IP нашего сервера, имя пользователя и пароль:
Чтобы зайти на сервер скачаем Putty (Windows), впишем в него IP-адрес, порт 22 и нажмем на Open
:
Пользователям Ubuntu достаточно открыть терминал (Ctrl + Alt + T
) и ввести:
Нас попросят ввести логин и пароль. Заходим под рутом (root
) и приступаем к установке Джумлы.
1.1. Обновление системы
Обновим систему:
1.2. Создание пользователя
В целях безопасности не рекомендуется работать под рутом, поэтому создадим нового пользователя alfred
с помощью команды adduser
:
Добавим пользователя alfred
в группу sudo
:
Перелогинимся под пользователя alfred
:
1.3. Установка сервера MySQL
Установим MySQL-сервер командой:
Скрипт mysql_secure_installation
позволяет настроить базовую защиту MySQL-сервера:
Что он делает:
- устанавливает/меняет пароль root-пользователя;
- удаляет анонимных пользователей;
- ограничивает удаленный доступ root-пользователя;
- удаляет тестовую базу данных.
Что нам выбрать:
Логин под рутом нам еще пригодится, поэтому оставим удаленный доступ.
1.4. Создание базы данных
Запускаем MySQL:
Создадим базу данных joomla_db
:
Создадим пользователя базы данных joomla_user
с паролем password
:
Предоставим пользователю joomla_user
все привилегии на управление таблицей joomla_db
:
Перезагрузим привилегии, чтобы изменения вступили в силу:
Выйдем из mysql:
1.5. Установка PHP
В репозиториях Ubuntu 20.04 присутствует только php 7.4. Поскольку нам нужна версия 8, потребуется подключить сторонний репозиторий PPA:
Joomla 4 поддерживает PHP восьмой версии. Для установки PHP 8 и сопутствующих пакетов введем:
Изменим параметры файла конфигурации php.ini
в соответствии с параметрами нашего сервера. Воспользуемся командой sed, которая ищет строчку в файле и заменяет ее на другую:
Директива memory_limit
устанавливает доступный для PHP объем памяти в мегабайтах (M):
upload_max_filesize
задает максимальный размер закачиваемого файла:
post_max_size
– максимально допустимый размер данных, отправляемых методом POST.
max_execution_time
– время, отведенное PHP-коду на исполнение.
Все настройки можно также изменить, открыв файл php.ini
с помощью редактора nano
:
1.6. Установка Nginx
Установим Nginx:
Зайдем на сайт, введя в браузере его IP. Если все хорошо, то получим приветственное сообщение:
Создадим конфигурационный файл виртуального хоста:
Здесь:
mysite.com
– домен. Если у нас есть только IP-адрес и нет домена, мы все равно можем создать папку с именем домена и прописать путь к этой папке в настройках.
Заполним файл следующими строчками:
Нажимаем сочетание клавиш Ctrl + O
, затем Enter
, чтобы сохранить изменения и Ctrl + X
, чтобы выйти из редактора nano.
Здесь:
server_name 5.188.158.146
– сюда записываем через запятую IP-адрес и/или домен, например server_name 5.188.158.146, mydomain.com
. Ограничимся только IP-адресом.
Мы создали виртуальный хост. Чтобы его активировать, создадим символьную ссылку на файл с конфигурацией и разместим ее в каталоге sites-enabled
, который Nginx будет считывать при запуске:
Проверим конфигурацию Nginx на наличие синтаксических или системных ошибок:
Если ошибок нет, получим:
Перезапустим Nginx:
1.7. Загрузка Джумлы
Скачаем последнюю версию Джумлы и переименуем архив в joomla.zip
:
Создадим папку с нашим сайтом mysite.com
:
Чтобы разархивировать архив, установим утилиту unzip
:
Разархивируем Джумлу в папку mysite.com
:
Наделим пользователя www-data
правами (chown
) на все файлы и папки внутри директории (-R
, то есть рекурсивно) /var/www/mysite.com
:
Еще раз зайдем на наш сайт через браузер и увидим установщик Джумлы:
Создадим учетную запись:
Заполним параметры учетной записи админа:
и заполним поля с именем БД, именем пользователя БД и его паролем:
После установки Джумлы:
перейдем в панель администратора http://5.188.158.146/administrator/
(вместо этого IP напишите свой) залогинимся и создадим свою первую запись:
Заполним поля и кликнем по кнопке Save & Close
:
Перейдем во вкладку Content
→ Articles
и кликнем по Toggle featured status
:
Перейдем на главную страницу http://5.188.158.146/
:
1.8. Настройка фаервола
UFW (Uncomplicated Firewall) – популярная и простая утилита для настройки и управления фаерволом в дистрибутивах Ubuntu и Debian. По умолчанию фаервол уже установлен, но не активирован.
Если фаервол вдруг не установлен, то установим его командой:
Узнаем текущий статус фаервола:
Фаервол выключен:
Посмотрим профили приложений:
В зависимости от пакетов, установленных в системе, вывод будет выглядеть следующим образом:
Разрешим фаерволу доступ к профилям OpenSSH
и 'Nginx Full'
:
Включим фаервол:
Если понадобится отключить фаервол, воспользуемся командой:
1.9. Защита от брутфорса: fail2ban
В сети полно ботнетов, непрерывно сканирующих стандартные порты подключения SSH и пытающихся выполнить атаку перебором. Защищаемся от этого, ограничив количество неудачных попыток входа на сервер с помощью программы fail2ban
.
Установим fail2ban
:
и проверим его статус:
Получим следующий вывод:
Утилита работает.
Чтобы изменить настройки fail2ban
откроем файл конфигурации:
Найдем в нем следующие строчки:maxretry = 5
– количество неудачных попыток входа до бана.findtime = 10m
– IP-адрес банится, если в течение 10 минут было предпринято 5 неудачных попыток хода.bantime = 10m
– IP-адрес банится на 10 минут.
Если поменяли параметры, то нужно перезапустить сервис fail2ban
, чтобы изменения вступили в силу:
1.10. Установка SSL-сертификата
SSL-сертификат можно поставить только с доменом (IP-адрес не подойдет). Если домен есть, то получим и установим бесплатный сертификат через центр сертификации Let's Encrypt.
Для этого установим утилиту сerbot, которая автоматизирует все шаги и ее плагин для Nginx:
Получим сертификат для домена mydomain.com
:
2. Миграция
Теперь перенесем БД и файлы с Джумлой на второй сервер.
2.1. Устанавливаем PHP и Nginx
Данные второго сервера:
Заходим на второй сервер и обновляемся:
Установим php:
поставим nginx :
Откроем файл с конфигурацией Nginx:
Конфигурация как у первого сервера, только поменялся IP-адрес:
Создадим символьную ссылку:
Проверим файл конфигурации на ошибки:
Перезапустим сервер Nginx:
2.2. Переносим базу данных
Перенос БД включает в себя следующие шаги:
- Экспорт БД с помощью утилиты
mysqldump
. - Архивация дампа БД.
- Перенос архива с дампом БД на второй сервер, используя команду
scp
. - Создание пользователя базы данных и пустой базы данных на втором сервере.
- Распаковка архива с дампом БД на втором сервере.
- Импорт в пустую базу данных дампа БД.
Зайдем на первый сервер и перелогинимся под рута:
Сделаем дамп базы данных с помощью утилиты mysqldump
и сохраним дамп БД в папке /home/alfred/
:
Установим архиватор zip
:
Перейдем в папку пользователя alfred
:
и заархивируем дамп БД:
Создадим на втором сервере пользователя alfred
:
Перенесем дамп БД с первого сервера на второй. Для этого вернемся к первому серверу и введем:
Здесь:
команда scp
– копирует файлы по ssh между компьютерами под управлением Linux. root
– логин администратора второго сервера.84.38.184.67
– IP второго сервера.
Зайдем на второй сервер и установим утилиту для распаковки архива unzip:
Распакуем архив с дампом БД в папку пользователя alfred
:
Установим MySQL-сервер:
Откроем MySQL:
Создадим пустую базу данных joomla_db
:
Создадим пользователя базы данных joomla_user
:
Дадим ему привилегии на управление базой данных:
Перезагрузим привилегии:
Выйдем из MySQL:
Перейдем в папку пользователя alfred
:
Импортируем в пустую базу данных joomla_db
дамп БД, который мы сделали на первом сервере:
Базу данных перенесли, теперь очередь Джумлы.
2.3. Переносим файлы Джумлы
Перенос файлов Джумлы включает в себя следующие шаги:
- Архивация папки с Джумлой.
- Перенос архива на второй сервер с помощью команды
scp
. - Распаковка архива в папку
/var/www/mysite.com
.
Зайдем на первый сервер:
Заархивируем файлы Джумлы в папку пользователя alfred
:
Создадим на втором сервере папку mysite.com
:
Зайдем на первый сервер и перенесем архив с Джумлой на второй сервер:
Зайдем на второй сервер и разархивируем архив с Джумлой в папку /var/www/
:
Наделим пользователя правами (chown
) на подпапки с сайтом:
Перейдем на главную страницу второго сервера http://84.38.184.67
:
Миграция завершена.
PS: в целях безопасности можно отключить логин под рутом по SSH. Для этого откроем конфиг SSH-сервера:
Найдем строчку PermitRootLogin yes
и поменяем yes
на no
.
Перезапустим сервер SSH:
или
3. Расширения
Расширения Joomla помогут превратить сайт в интернет-магазин, ускорить загрузку сайта, позаботиться о безопасности и многое другое. Расширения доступны по адресу
extensions.joomla.org. Вот самые популярные из них:
Расширения для интернет магазина
- HikaShop – расширение электронной коммерции для всех версий Joomla.
- JoomShopping – более 400 тыс. новых пользователей расширением за 3 года.
- EShop – просто устанавливаете, добавляете продукты, включаете встроенные модули, плагины оплаты, плагины доставки и начинаете принимать заказы.
SEO
- Google Structured Data – помогает размечать структурированные данные на страницы, чтобы Google точнее распознавал данные на ней и использовать их в результатах поиска.
- EO-Generator, Aimy Speed Optimization PRO – увеличивает скорость загрузки страницы за счет объединения, сжатия и кэширования файлов.
- TAGZ Open Graph – сообщает социальным сетям какую информацию отображать каждый раз, когда кто-либо другой делится ссылкой на ваш сайта.
Безопасность
- Watchful Client – автоматизирует такие задачи, как создание резервных копий сайта, сканирование на наличие признаков проникновения и обновление расширений.
- SpambotCheck – используя черные списки электронной почты, предотвращает регистрацию и вход смап-ботов.
- OSpam-a-note – блокирует регистрацию ботов за счет меток времени: если форма отправлена очень быстро, то регистрация будет заблокирована.
- Brute Force Stop – защищает сайт от брутфорса.
- Admin Tools – уведомит вас о новых релизах Joomla, исправит разрешения ваших файлов и каталогов, защитит каталог администратора паролем, изменит префикс вашей базы данных и многое другое.
Отображение контента
- Mini FrontPage – отражает статьи из выбранных категорий с датой и дизайном на выбор.
- Latest News+ Date – кастомизирует отображение новостей как предыдущее расширение.
- Vertical scroll recent article – заголовок статьи будет прокручиваться снизу вверх по вертикали.
- DJ-ImageSlider – создает неограниченное количество групп и слайдов.
- Slideshow CK – отображает изображения или видео с красивыми эффектами.
- Phoca Gallery – галерея с 15 способами отображения контента.
- Advanced Custom Fields – расширяет коллекцию основных полей Joomla: YouTube, Vimeo, HTML-Audio, Google Map и др.
- GMapFP OpenStreetMap Custom Field – позволяет пользователям и редактору легко устанавливать маркеры на карту OpenStreetMap.
- GMapFP : Google Map or Openstreet Map – можно использовать Google Maps и Openstreet Maps вместе.
4. Локализация Джумлы
Чтобы поменять язык на русский перейдем в System
→ Language
→ Вводим в поле поиска russian
→ Install
:
Сделаем Русский язык
основным: System
→ Manage
→ Languages
→ Выберем Russian
значением по дефолту:
5. Ускорение Джумлы и настройка бэкапа
5.1. Включение кэша
Когда посетитель переходит на страницу, Joomla извлекает содержимое из базы данных, загружает расширения, необходимые для этой страницы, файлы шаблона и создает страницу, которую видит пользователь. Формирование новой страницы занимает время. При включении кэша пользователи будут получать сохраненную версию страницы вместо генерации новой страницы.
Чтобы включить кэширование перейдем в Панель управления
→ Общие настройки
→ Система
и выберем Стандартное кэширование
:
Стандартное кэширование отдает одинаковый кэш всем посетителям, прогрессирующее кэширование создает кэш для каждого отдельного посетителя.
Чтобы сбросить кэш, откроем Панель управления
→ вкладку System
и кликнем по Очистить кэш
→ Очистить все
.
5.2. Сжатие страницы
Gzip сжимает страницу перед отправкой ее посетителю. Для включения сжатия перейдем:
Панель управления
→ Общие настройки
→ Сервер
и включим Gzip-сжатие страниц
:
5.3. Объединение CSS и JavaScript
Расширение JCH Optimize объединяет JavaScript- и CSS-файлы в один, снижая объем передаваемых данных и уменьшая количество HTTP-запросов к серверу.
Чтобы установить расширение перейдем в Система
→ Расширения
→ Установить из JED
и введем в поле поиска JCH Optimize
:
Перейдем на страницу расширения и установим его. Настройки расширения доступны в Компоненты
→ JCH Optimize
. По умолчанию сжатие JS и CSS включены.
5.4. Настройка бэкапа
С помощью расширения Akeeba Backup можно делать бэкапы в один клик. Установим Akeeba Backup через JED. Теперь перейдем в Компоненты
→ Akeeba Backup
и кликнем по кнопке Default Backup Profile
. Бэкап создается автоматически и будет доступен в Manage Backups:
5.5. Быстрый хостинг
Чтобы ускорить загрузку сайта выберите хостинг, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативки и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка.
В этой статье мы:
- научились работать со стеком LEMP: Linux, Nginx, MySQL, PHP;
- установили Joomla на выделенный сервер;
- настроили фаервол и ограничили количество неудачных попыток входа сервер;
- перенесли готовый Joomla-сайт на другой сервер;
- ускорили работу Joomla.
Комментарии