Ставим Джумлу на выделенный сервер (стек LEMP), настраиваем фаервол и переносим готовый сайт на второй сервер. Linux, консоль. Ready, steady, go! Что делаем? Устанавливаем Nginx, PHP, MySQL, Joomla, настраиваем фаервол и ограничиваем количество неудачных попыток входа с помощью fail2ban. Затем переносим работающий сайт на другой сервер. Бонус: Топ-20 лучших бесплатных расширений для Джумлы и советы по ее ускорению. Эту инструкцию по настройке сервера можно использовать почти с любой 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) и ввести: ssh root@5.188.158.146 Нас попросят ввести логин и пароль. Заходим под рутом (root) и приступаем к установке Джумлы. 1.1. Обновление системы Обновим систему: sudo apt update && sudo apt upgrade 1.2. Создание пользователя В целях безопасности не рекомендуется работать под рутом, поэтому создадим нового пользователя alfred с помощью команды adduser: adduser alfred Добавим пользователя alfred в группу sudo: usermod -aG sudo alfred Перелогинимся под пользователя alfred: su - alfred 1.3. Установка сервера MySQL Установим MySQL-сервер командой: sudo apt install mysql-server Скрипт mysql_secure_installation позволяет настроить базовую защиту MySQL-сервера: sudo mysql_secure_installation Что он делает: устанавливает/меняет пароль root-пользователя; удаляет анонимных пользователей; ограничивает удаленный доступ root-пользователя; удаляет тестовую базу данных. Что нам выбрать: Would you like to setup VALIDATE PASSWORD component? [Y/n]: N Set root password? [Y/n]: N Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: N Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y Логин под рутом нам еще пригодится, поэтому оставим удаленный доступ. 1.4. Создание базы данных Запускаем MySQL: sudo mysql Создадим базу данных joomla_db: mysql> CREATE DATABASE joomla_db; Создадим пользователя базы данных joomla_user с паролем password: mysql> CREATE USER 'joomla_user'@'localhost' IDENTIFIED BY 'password'; Предоставим пользователю joomla_user все привилегии на управление таблицей joomla_db: mysql> GRANT ALL PRIVILEGES ON joomla_db.* TO 'joomla_user'@'localhost'; Перезагрузим привилегии, чтобы изменения вступили в силу: mysql> FLUSH PRIVILEGES; Выйдем из mysql: mysql> q 1.5. Установка PHP В репозиториях Ubuntu 20.04 присутствует только php 7.4. Поскольку нам нужна версия 8, потребуется подключить сторонний репозиторий PPA: sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php Joomla 4 поддерживает PHP восьмой версии. Для установки PHP 8 и сопутствующих пакетов введем: sudo apt install php8.0-fpm php8.0-cli php8.0-gd php8.0-opcache php8.0-mysql php8.0-mcrypt php8.0-xml php8.0-curl Изменим параметры файла конфигурации php.ini в соответствии с параметрами нашего сервера. Воспользуемся командой sed, которая ищет строчку в файле и заменяет ее на другую: sudo sed -i "s/memory_limit = .*/memory_limit = 32000M/" /etc/php/8.0/fpm/php.ini Директива memory_limit устанавливает доступный для PHP объем памяти в мегабайтах (M): sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php/8.0/fpm/php.ini upload_max_filesize задает максимальный размер закачиваемого файла: sudo sed -i "s/post_max_size = .*/post_max_size = 128M/" /etc/php/8.0/fpm/php.ini post_max_size – максимально допустимый размер данных, отправляемых методом POST. sudo sed -i "s/max_execution_time = .*/max_execution_time = 3000/" /etc/php/8.0/fpm/php.ini max_execution_time – время, отведенное PHP-коду на исполнение. Все настройки можно также изменить, открыв файл php.ini с помощью редактора nano: sudo nano /etc/php/8.0/fpm/php.ini 1.6. Установка Nginx Установим Nginx: sudo apt install nginx Зайдем на сайт, введя в браузере его IP. Если все хорошо, то получим приветственное сообщение: Создадим конфигурационный файл виртуального хоста: sudo nano /etc/nginx/sites-available/mysite.com Здесь: mysite.com – домен. Если у нас есть только IP-адрес и нет домена, мы все равно можем создать папку с именем домена и прописать путь к этой папке в настройках. Заполним файл следующими строчками: server { listen 80; server_name 5.188.158.146; root /var/www/mysite.com; index index.html index.htm index.php; charset utf-8; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log info; location / { try_files $uri $uri/ /index.php?$args; } location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 /403_error.html; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi.conf; } location ~ /.(?!well-known).* { deny all; } } Нажимаем сочетание клавиш 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 будет считывать при запуске: sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com Проверим конфигурацию Nginx на наличие синтаксических или системных ошибок: sudo nginx -t Если ошибок нет, получим: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful Перезапустим Nginx: sudo systemctl restart nginx 1.7. Загрузка Джумлы Скачаем последнюю версию Джумлы и переименуем архив в joomla.zip: wget https://downloads.joomla.org/ru/cms/joomla4/4-0-2/Joomla_4-0-2-Stable-Full_Package.zip?format=zip -O joomla.zip Создадим папку с нашим сайтом mysite.com: sudo mkdir -p /var/www/mysite.com Чтобы разархивировать архив, установим утилиту unzip: sudo apt install unzip Разархивируем Джумлу в папку mysite.com: sudo unzip joomla.zip -d /var/www/mysite.com Наделим пользователя www-data правами (chown) на все файлы и папки внутри директории (-R, то есть рекурсивно) /var/www/mysite.com: sudo chown -R www-data: /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. По умолчанию фаервол уже установлен, но не активирован. Если фаервол вдруг не установлен, то установим его командой: sudo apt install ufw Узнаем текущий статус фаервола: sudo ufw status Фаервол выключен: Status: inactive Посмотрим профили приложений: sudo ufw app list В зависимости от пакетов, установленных в системе, вывод будет выглядеть следующим образом: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH Разрешим фаерволу доступ к профилям OpenSSH и 'Nginx Full': sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' Включим фаервол: sudo ufw enable Если понадобится отключить фаервол, воспользуемся командой: sudo ufw disable 1.9. Защита от брутфорса: fail2ban В сети полно ботнетов, непрерывно сканирующих стандартные порты подключения SSH и пытающихся выполнить атаку перебором. Защищаемся от этого, ограничив количество неудачных попыток входа на сервер с помощью программы fail2ban. Установим fail2ban: sudo apt install fail2ban и проверим его статус: sudo systemctl status fail2ban Получим следующий вывод: ● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-09-09 18:18:55 EEST; 4s ago Docs: man:fail2ban(1) Main PID: 79346 (f2b/server) Tasks: 5 (limit: 2282) Memory: 13.4M CGroup: /system.slice/fail2ban.service └─79346 /usr/bin/python3 /usr/bin/fail2ban-server -xf start Утилита работает. Чтобы изменить настройки fail2ban откроем файл конфигурации: sudo nano /etc/fail2ban/jail.conf Найдем в нем следующие строчки:maxretry = 5 – количество неудачных попыток входа до бана.findtime = 10m – IP-адрес банится, если в течение 10 минут было предпринято 5 неудачных попыток хода.bantime = 10m – IP-адрес банится на 10 минут. Если поменяли параметры, то нужно перезапустить сервис fail2ban, чтобы изменения вступили в силу: sudo systemctl restart fail2ban 1.10. Установка SSL-сертификата SSL-сертификат можно поставить только с доменом (IP-адрес не подойдет). Если домен есть, то получим и установим бесплатный сертификат через центр сертификации Let’s Encrypt. Для этого установим утилиту сerbot, которая автоматизирует все шаги и ее плагин для Nginx: sudo apt install certbot python3-certbot-nginx Получим сертификат для домена mydomain.com: sudo certbot --nginx -d mydomain.com -d www.mydomain.com 2. Миграция Теперь перенесем БД и файлы с Джумлой на второй сервер. 2.1. Устанавливаем PHP и Nginx Данные второго сервера: Заходим на второй сервер и обновляемся: sudo apt update && sudo apt upgrade Установим php: sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt install php8.0-fpm php8.0-cli php8.0-gd php8.0-opcache php8.0-mysql php8.0-mcrypt php8.0-xml php8.0-curl поставим nginx : sudo apt install nginx Откроем файл с конфигурацией Nginx: sudo nano /etc/nginx/sites-available/mysite.com Конфигурация как у первого сервера, только поменялся IP-адрес: server { listen 80; server_name 84.38.184.67; root /var/www/mysite.com; index index.html index.htm index.php; charset utf-8; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log info; location / { try_files $uri $uri/ /index.php?$args; } location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 /403_error.html; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi.conf; } location ~ /.(?!well-known).* { deny all; } } Создадим символьную ссылку: sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com Проверим файл конфигурации на ошибки: sudo nginx -t Перезапустим сервер Nginx: sudo systemctl restart nginx 2.2. Переносим базу данных Перенос БД включает в себя следующие шаги: Экспорт БД с помощью утилиты mysqldump. Архивация дампа БД. Перенос архива с дампом БД на второй сервер, используя команду scp. Создание пользователя базы данных и пустой базы данных на втором сервере. Распаковка архива с дампом БД на втором сервере. Импорт в пустую базу данных дампа БД. Зайдем на первый сервер и перелогинимся под рута: sudo su Сделаем дамп базы данных с помощью утилиты mysqldump и сохраним дамп БД в папке /home/alfred/: mysqldump -u root -p joomla_db > /home/alfred/joomla_db.sql; Установим архиватор zip: sudo apt install zip Перейдем в папку пользователя alfred: cd /home/alfred/ и заархивируем дамп БД: zip /home/alfred/database.zip ./joomla_db.sql Создадим на втором сервере пользователя alfred: sudo adduser alfred sudo usermod -aG sudo alfred Перенесем дамп БД с первого сервера на второй. Для этого вернемся к первому серверу и введем: scp /home/alfred/database.zip root@84.38.184.67:/home/alfred Здесь: команда scp – копирует файлы по ssh между компьютерами под управлением Linux. root – логин администратора второго сервера.84.38.184.67 – IP второго сервера. Зайдем на второй сервер и установим утилиту для распаковки архива unzip: sudo apt install unzip Распакуем архив с дампом БД в папку пользователя alfred: sudo unzip /home/alfred/database.zip -d /home/alfred Установим MySQL-сервер: sudo apt install mysql-server Откроем MySQL: sudo mysql Создадим пустую базу данных joomla_db: mysql> CREATE DATABASE joomla_db; Создадим пользователя базы данных joomla_user: mysql> CREATE USER 'joomla_user'@'localhost' IDENTIFIED BY 'password'; Дадим ему привилегии на управление базой данных: mysql> GRANT ALL PRIVILEGES ON joomla_db.* TO 'joomla_user'@'localhost'; Перезагрузим привилегии: mysql> FLUSH PRIVILEGES; Выйдем из MySQL: mysql> q Перейдем в папку пользователя alfred: cd /home/alfred/ Импортируем в пустую базу данных joomla_db дамп БД, который мы сделали на первом сервере: mysql -u root -p joomla_db < /home/alfred/joomla_db.sql; Базу данных перенесли, теперь очередь Джумлы. 2.3. Переносим файлы Джумлы Перенос файлов Джумлы включает в себя следующие шаги: Архивация папки с Джумлой. Перенос архива на второй сервер с помощью команды scp. Распаковка архива в папку /var/www/mysite.com. Зайдем на первый сервер: cd /var/www/ Заархивируем файлы Джумлы в папку пользователя alfred: sudo zip -r /home/alfred/joomla_copy.zip ./mysite.com Создадим на втором сервере папку mysite.com: sudo mkdir -p /var/www/mysite.com Зайдем на первый сервер и перенесем архив с Джумлой на второй сервер: scp /home/alfred/joomla_copy.zip root@84.38.184.67:/home/alfred Зайдем на второй сервер и разархивируем архив с Джумлой в папку /var/www/: sudo unzip /home/alfred/joomla_copy.zip -d /var/www/ Наделим пользователя правами (chown) на подпапки с сайтом: sudo chown -R www-data: /var/www/mysite.com Перейдем на главную страницу второго сервера http://84.38.184.67: Миграция завершена. PS: в целях безопасности можно отключить логин под рутом по SSH. Для этого откроем конфиг SSH-сервера: sudo nano /etc/ssh/sshd_config Найдем строчку PermitRootLogin yes и поменяем yes на no. Перезапустим сервер SSH: sudo service sshd restart или sudo systemctl restart sshd 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.
Что делаем? Устанавливаем Nginx, PHP, MySQL, Joomla, настраиваем фаервол и ограничиваем количество неудачных попыток входа с помощью fail2ban. Затем переносим работающий сайт на другой сервер. Бонус: Топ-20 лучших бесплатных расширений для Джумлы и советы по ее ускорению.
Эту инструкцию по настройке сервера можно использовать почти с любой CMS на PHP и MySQL: WordPress, Drupal, MODX, October CMS и т. д.
Редакция выделила бюджет, поэтому берем сервер помощнее. Например, провайдер 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:
Open
Пользователям Ubuntu достаточно открыть терминал (Ctrl + Alt + T) и ввести:
Ctrl + Alt + T
ssh root@5.188.158.146
Нас попросят ввести логин и пароль. Заходим под рутом (root) и приступаем к установке Джумлы.
root
Обновим систему:
sudo apt update && sudo apt upgrade
В целях безопасности не рекомендуется работать под рутом, поэтому создадим нового пользователя alfred с помощью команды adduser:
alfred
adduser
adduser alfred
Добавим пользователя alfred в группу sudo:
sudo
usermod -aG sudo alfred
Перелогинимся под пользователя alfred:
su - alfred
Установим MySQL-сервер командой:
sudo apt install mysql-server
Скрипт mysql_secure_installation позволяет настроить базовую защиту MySQL-сервера:
mysql_secure_installation
sudo mysql_secure_installation
Что он делает:
Что нам выбрать:
Would you like to setup VALIDATE PASSWORD component? [Y/n]: N Set root password? [Y/n]: N Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: N Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y
Логин под рутом нам еще пригодится, поэтому оставим удаленный доступ.
Запускаем MySQL:
sudo mysql
Создадим базу данных joomla_db:
joomla_db
mysql> CREATE DATABASE joomla_db;
Создадим пользователя базы данных joomla_user с паролем password:
joomla_user
password
mysql> CREATE USER 'joomla_user'@'localhost' IDENTIFIED BY 'password';
Предоставим пользователю joomla_user все привилегии на управление таблицей joomla_db:
mysql> GRANT ALL PRIVILEGES ON joomla_db.* TO 'joomla_user'@'localhost';
Перезагрузим привилегии, чтобы изменения вступили в силу:
mysql> FLUSH PRIVILEGES;
Выйдем из mysql:
mysql> q
В репозиториях Ubuntu 20.04 присутствует только php 7.4. Поскольку нам нужна версия 8, потребуется подключить сторонний репозиторий PPA:
sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php
Joomla 4 поддерживает PHP восьмой версии. Для установки PHP 8 и сопутствующих пакетов введем:
sudo apt install php8.0-fpm php8.0-cli php8.0-gd php8.0-opcache php8.0-mysql php8.0-mcrypt php8.0-xml php8.0-curl
Изменим параметры файла конфигурации php.ini в соответствии с параметрами нашего сервера. Воспользуемся командой sed, которая ищет строчку в файле и заменяет ее на другую:
php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 32000M/" /etc/php/8.0/fpm/php.ini
Директива memory_limit устанавливает доступный для PHP объем памяти в мегабайтах (M):
memory_limit
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php/8.0/fpm/php.ini
upload_max_filesize задает максимальный размер закачиваемого файла:
upload_max_filesize
sudo sed -i "s/post_max_size = .*/post_max_size = 128M/" /etc/php/8.0/fpm/php.ini
post_max_size – максимально допустимый размер данных, отправляемых методом POST.
post_max_size
sudo sed -i "s/max_execution_time = .*/max_execution_time = 3000/" /etc/php/8.0/fpm/php.ini
max_execution_time – время, отведенное PHP-коду на исполнение.
max_execution_time
Все настройки можно также изменить, открыв файл php.ini с помощью редактора nano:
nano
sudo nano /etc/php/8.0/fpm/php.ini
Установим Nginx:
sudo apt install nginx
Зайдем на сайт, введя в браузере его IP. Если все хорошо, то получим приветственное сообщение:
Создадим конфигурационный файл виртуального хоста:
sudo nano /etc/nginx/sites-available/mysite.com
Здесь:
mysite.com – домен. Если у нас есть только IP-адрес и нет домена, мы все равно можем создать папку с именем домена и прописать путь к этой папке в настройках.
mysite.com
Заполним файл следующими строчками:
server { listen 80; server_name 5.188.158.146; root /var/www/mysite.com; index index.html index.htm index.php; charset utf-8; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log info; location / { try_files $uri $uri/ /index.php?$args; } location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 /403_error.html; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi.conf; } location ~ /.(?!well-known).* { deny all; } }
Нажимаем сочетание клавиш Ctrl + O, затем Enter, чтобы сохранить изменения и Ctrl + X, чтобы выйти из редактора nano.
Ctrl + O
Enter
Ctrl + X
server_name 5.188.158.146 – сюда записываем через запятую IP-адрес и/или домен, например server_name 5.188.158.146, mydomain.com. Ограничимся только IP-адресом.
server_name 5.188.158.146
server_name 5.188.158.146, mydomain.com
Мы создали виртуальный хост. Чтобы его активировать, создадим символьную ссылку на файл с конфигурацией и разместим ее в каталоге sites-enabled, который Nginx будет считывать при запуске:
sites-enabled
sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com
Проверим конфигурацию Nginx на наличие синтаксических или системных ошибок:
sudo nginx -t
Если ошибок нет, получим:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустим Nginx:
sudo systemctl restart nginx
Скачаем последнюю версию Джумлы и переименуем архив в joomla.zip:
joomla.zip
wget https://downloads.joomla.org/ru/cms/joomla4/4-0-2/Joomla_4-0-2-Stable-Full_Package.zip?format=zip -O joomla.zip
Создадим папку с нашим сайтом mysite.com:
sudo mkdir -p /var/www/mysite.com
Чтобы разархивировать архив, установим утилиту unzip:
unzip
sudo apt install unzip
Разархивируем Джумлу в папку mysite.com:
sudo unzip joomla.zip -d /var/www/mysite.com
Наделим пользователя www-data правами (chown) на все файлы и папки внутри директории (-R, то есть рекурсивно) /var/www/mysite.com:
www-data
chown
-R
/var/www/mysite.com
sudo chown -R www-data: /var/www/mysite.com
Еще раз зайдем на наш сайт через браузер и увидим установщик Джумлы:
Создадим учетную запись:
Заполним параметры учетной записи админа:
и заполним поля с именем БД, именем пользователя БД и его паролем:
После установки Джумлы:
перейдем в панель администратора http://5.188.158.146/administrator/ (вместо этого IP напишите свой) залогинимся и создадим свою первую запись:
http://5.188.158.146/administrator/
Заполним поля и кликнем по кнопке Save & Close:
Save & Close
Перейдем во вкладку Content → Articles и кликнем по Toggle featured status:
Content
Articles
Toggle featured status
Перейдем на главную страницу http://5.188.158.146/:
http://5.188.158.146/
UFW (Uncomplicated Firewall) – популярная и простая утилита для настройки и управления фаерволом в дистрибутивах Ubuntu и Debian. По умолчанию фаервол уже установлен, но не активирован.
Если фаервол вдруг не установлен, то установим его командой:
sudo apt install ufw
Узнаем текущий статус фаервола:
sudo ufw status
Фаервол выключен:
Status: inactive
Посмотрим профили приложений:
sudo ufw app list
В зависимости от пакетов, установленных в системе, вывод будет выглядеть следующим образом:
Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
Разрешим фаерволу доступ к профилям OpenSSH и 'Nginx Full':
OpenSSH
'Nginx Full'
sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full'
Включим фаервол:
sudo ufw enable
Если понадобится отключить фаервол, воспользуемся командой:
sudo ufw disable
В сети полно ботнетов, непрерывно сканирующих стандартные порты подключения SSH и пытающихся выполнить атаку перебором. Защищаемся от этого, ограничив количество неудачных попыток входа на сервер с помощью программы fail2ban.
fail2ban
Установим fail2ban:
sudo apt install fail2ban
и проверим его статус:
sudo systemctl status fail2ban
Получим следующий вывод:
● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-09-09 18:18:55 EEST; 4s ago Docs: man:fail2ban(1) Main PID: 79346 (f2b/server) Tasks: 5 (limit: 2282) Memory: 13.4M CGroup: /system.slice/fail2ban.service └─79346 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Утилита работает.
Чтобы изменить настройки fail2ban откроем файл конфигурации:
sudo nano /etc/fail2ban/jail.conf
Найдем в нем следующие строчки:maxretry = 5 – количество неудачных попыток входа до бана.findtime = 10m – IP-адрес банится, если в течение 10 минут было предпринято 5 неудачных попыток хода.bantime = 10m – IP-адрес банится на 10 минут.
maxretry = 5
findtime = 10m
bantime = 10m
Если поменяли параметры, то нужно перезапустить сервис fail2ban, чтобы изменения вступили в силу:
sudo systemctl restart fail2ban
SSL-сертификат можно поставить только с доменом (IP-адрес не подойдет). Если домен есть, то получим и установим бесплатный сертификат через центр сертификации Let’s Encrypt.
Для этого установим утилиту сerbot, которая автоматизирует все шаги и ее плагин для Nginx:
sudo apt install certbot python3-certbot-nginx
Получим сертификат для домена mydomain.com:
mydomain.com
sudo certbot --nginx -d mydomain.com -d www.mydomain.com
Теперь перенесем БД и файлы с Джумлой на второй сервер.
Данные второго сервера:
Заходим на второй сервер и обновляемся:
Установим php:
sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt install php8.0-fpm php8.0-cli php8.0-gd php8.0-opcache php8.0-mysql php8.0-mcrypt php8.0-xml php8.0-curl
поставим nginx :
Откроем файл с конфигурацией Nginx:
Конфигурация как у первого сервера, только поменялся IP-адрес:
server { listen 80; server_name 84.38.184.67; root /var/www/mysite.com; index index.html index.htm index.php; charset utf-8; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log info; location / { try_files $uri $uri/ /index.php?$args; } location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 /403_error.html; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi.conf; } location ~ /.(?!well-known).* { deny all; } }
Создадим символьную ссылку:
Проверим файл конфигурации на ошибки:
Перезапустим сервер Nginx:
Перенос БД включает в себя следующие шаги:
mysqldump
scp
Зайдем на первый сервер и перелогинимся под рута:
sudo su
Сделаем дамп базы данных с помощью утилиты mysqldump и сохраним дамп БД в папке /home/alfred/:
/home/alfred/
mysqldump -u root -p joomla_db > /home/alfred/joomla_db.sql;
Установим архиватор zip:
zip
sudo apt install zip
Перейдем в папку пользователя alfred:
cd /home/alfred/
и заархивируем дамп БД:
zip /home/alfred/database.zip ./joomla_db.sql
Создадим на втором сервере пользователя alfred:
sudo adduser alfred sudo usermod -aG sudo alfred
Перенесем дамп БД с первого сервера на второй. Для этого вернемся к первому серверу и введем:
scp /home/alfred/database.zip root@84.38.184.67:/home/alfred
команда scp – копирует файлы по ssh между компьютерами под управлением Linux. root – логин администратора второго сервера.84.38.184.67 – IP второго сервера.
команда scp
84.38.184.67
Зайдем на второй сервер и установим утилиту для распаковки архива unzip:
Распакуем архив с дампом БД в папку пользователя alfred:
sudo unzip /home/alfred/database.zip -d /home/alfred
Установим MySQL-сервер:
Откроем MySQL:
Создадим пустую базу данных joomla_db:
Создадим пользователя базы данных joomla_user:
Дадим ему привилегии на управление базой данных:
Перезагрузим привилегии:
Выйдем из MySQL:
Импортируем в пустую базу данных joomla_db дамп БД, который мы сделали на первом сервере:
mysql -u root -p joomla_db < /home/alfred/joomla_db.sql;
Базу данных перенесли, теперь очередь Джумлы.
Перенос файлов Джумлы включает в себя следующие шаги:
Зайдем на первый сервер:
cd /var/www/
Заархивируем файлы Джумлы в папку пользователя alfred:
sudo zip -r /home/alfred/joomla_copy.zip ./mysite.com
Создадим на втором сервере папку mysite.com:
Зайдем на первый сервер и перенесем архив с Джумлой на второй сервер:
scp /home/alfred/joomla_copy.zip root@84.38.184.67:/home/alfred
Зайдем на второй сервер и разархивируем архив с Джумлой в папку /var/www/:
/var/www/
sudo unzip /home/alfred/joomla_copy.zip -d /var/www/
Наделим пользователя правами (chown) на подпапки с сайтом:
Перейдем на главную страницу второго сервера http://84.38.184.67:
http://84.38.184.67
Миграция завершена.
PS: в целях безопасности можно отключить логин под рутом по SSH. Для этого откроем конфиг SSH-сервера:
sudo nano /etc/ssh/sshd_config
Найдем строчку PermitRootLogin yes и поменяем yes на no.
PermitRootLogin yes
yes
no
Перезапустим сервер SSH:
sudo service sshd restart
или
sudo systemctl restart sshd
Расширения Joomla помогут превратить сайт в интернет-магазин, ускорить загрузку сайта, позаботиться о безопасности и многое другое. Расширения доступны по адресу
extensions.joomla.org. Вот самые популярные их них:
Чтобы поменять язык на русский перейдем в System → Language → Вводим в поле поиска russian → Install:
System
Language
russian
Install
Сделаем Русский язык основным: System → Manage → Languages → Выберем Russian значением по дефолту:
Русский язык
Manage
Languages
Russian
Когда посетитель переходит на страницу, Joomla извлекает содержимое из базы данных, загружает расширения, необходимые для этой страницы, файлы шаблона и создает страницу, которую видит пользователь. Формирование новой страницы занимает время. При включении кэша пользователи будут получать сохраненную версию страницы вместо генерации новой страницы.
Чтобы включить кэширование перейдем в Панель управления → Общие настройки → Система и выберем Стандартное кэширование:
Панель управления
Общие настройки
Система
Стандартное кэширование
Стандартное кэширование отдает одинаковый кэш всем посетителям, прогрессирующее кэширование создает кэш для каждого отдельного посетителя.
Чтобы сбросить кэш, откроем Панель управления → вкладку System и кликнем по Очистить кэш → Очистить все.
Очистить кэш
Очистить все
Gzip сжимает страницу перед отправкой ее посетителю. Для включения сжатия перейдем:
Панель управления → Общие настройки → Сервер и включим Gzip-сжатие страниц:
Сервер
Gzip-сжатие страниц
Расширение JCH Optimize объединяет JavaScript- и CSS-файлы в один, снижая объем передаваемых данных и уменьшая количество HTTP-запросов к серверу.
Чтобы установить расширение перейдем в Система → Расширения → Установить из JED и введем в поле поиска JCH Optimize:
Расширения
Установить из JED
JCH Optimize
Перейдем на страницу расширения и установим его. Настройки расширения доступны в Компоненты → JCH Optimize. По умолчанию сжатие JS и CSS включены.
Компоненты
С помощью расширения Akeeba Backup можно делать бэкапы в один клик. Установим Akeeba Backup через JED. Теперь перейдем в Компоненты → Akeeba Backup и кликнем по кнопке Default Backup Profile. Бэкап создается автоматически и будет доступен в Manage Backups:
Akeeba Backup
Default Backup Profile
Чтобы ускорить загрузку сайта выберите хостинг, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативки и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка.
***
В этой статье мы:
Ваш адрес email не будет опубликован. Обязательные поля помечены *
Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев.
Δ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.