company_banner

У нас появился новый образ в маркетплейсе: VPS с Joomla 3.9 на Centos 8

  • Tutorial


Joomla — третья по популярности (после Wordpress и Shopify) система управления контентом, написанная на языке PHP и использующая в качестве хранилища данных реляционные базы данных.

Как и многие другие CMS, Joomla полностью бесплатна для использования и имеет открытый код. Система шаблонов легко позволяет менять внешний вид сайта, а огромный каталог расширений, позволяет так же легко дополнять функциональность сайта нужными модулями.

За что мы любим Joomla


Вот 10 фактов, за которые мы любим ее сами.

  1. Бесплатная
    Главное, за что мы любим Joomla и что помогло ей стать настолько популярной
  2. Опенсорсная
    Как опенсорсный продукт, любой может брать ее код и менять, если понадобится. Это привело много разработчиков к работе именно с Joomla.
  3. SEO Friendly
    Система управления контентом в Joomla хорошо дружит с поисковыми системами. Работает на apache-модуле, который создает ссылки, которые хорошо воспринимаются поисковиками. Он же помогает добалять свои собственные названия страница, мета-описания и мета-ключевые слова. Это помогает сайтам на джумле хорошо индексироваться.
  4. Безопасная
    Безопасность играет важную роль в веб-разработке, с джумлой в этом вопросе можно быть спокойным. У CMS есть специальная команда разработчиков «Joomla Security Strike Team», которая занимается только поиском уязвимостей и их починкой. Они прогоняют множество автоматических тестов, проверяют каждый кусок кода, принимают фидбек от пользователей и так далее. При использовании свежей версии Joomla можно быть достаточно уверенным в безопасности и в том, что хакеры пойдут далеко и надолго.
  5. Простая интеграция шаблонов
    У Joomla огромное количество шаблонов для подключения. Подключаются они в несколько кликов, но самое лучшее в том, что разные шаблоны можно использовать под разные страницы.
  6. Мультиязычность
    Причем и сайтов, и админки, и поддержки
  7. Обширная библиотека расширений
    Joomla создали собственный фреймворк, благодаря которому расширений действительно много: почти под любую задачу можно найти и подключить уже готовое. Есть три варианта расширений: компоненты, модули и плагины.
  8. Регулярные обновления
    Один из наших любимых пунктов: обновления выходят часто, в августе они за релизили новую свежую версию.
  9. Большое коммьюнити и его активная поддержка
    Сообщество разработчиков на Joomla одно из самых больших онлайн-коммьюнити в мире. Много форумов, где можно получить ответ от опытных разработчиков, которые активно поддерживаются самой командой CMS.
  10. Отличная документация
    Детально проработанные документации для дизайнеров, разработчиков и администраторов сайтов. Есть канал на youtube, где учат быстро разворачивать сайт новичкам.

При такой большой любви, мы конечно не могли оставить наш маркетплейс без Joomla и создали новый образ с ней.



Как мы создавали этот образ: требования к серверу


Для использования Joomla рекомендуется использовать 2 Гб RAM и 2 ядра CPU.

Основные файлы Joomla занимают около 40 Мб, дополнительно вам понадобится место для хранения картинок, базы данных, тем, дополнительных модулей и резервных копий, которое будет зависить от размера вашего сайта.

Для Joomla 3.9 требуется минимальная версия PHP 5.3.10, но рекомендуется использовать 7.3 или выше.

В качестве веб-сервера Joomla может использовать Apache, Nginx или IIS, а в качестве базы данных MySQL, MSSQL или PostgreSQL.

Мы будем устанавливать Joomla с использованием Nginx и MySQL.

Установка


Обновленим установленные пакеты до последней версии:

sudo dnf update -y

Добавим постоянное разрешение для входящего трафика на http/80 и https/443 порты:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Применим новые правила файрвола:

sudo systemctl reload firewalld

Запустим и включим сервер Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Установим PHP, PHP-FPM, и требуемые модули PHP:

sudo dnf install php-fpm php-cli php-mysqlnd php-json php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip -y

Установим MySQL Server:

sudo dnf install mysql-server -y

Включим и запустим сервер MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Так как мы делаем шаблон для VDS, а они могут быть медленными, добавим задержку старта mysqld 30 секунд, иначе могут быть проблемы со стартом сервера при первоначальной загрузке системы:

sudo sed -i '/Group=mysql/a \
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service

Изменим группу и пользователя из под которого будет работать nginx внеся изменения в
/etc/php-fpm.d/www.conf:
sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Изменим владельца каталога сессий PHP так же соответственно на nginx:

sudo chown -R nginx. /var/lib/php/session

Удалим строки с коментариями из файла конфигурации /etc/nginx/nginx.conf (что бы не было двойных срабатываний для sed):

sudo sed -i -e '/^[ \t]*#/d'  /etc/nginx/nginx.conf

Добавим в /etc/nginx/nginx.conf настройки компрессии gzip

sudo sed -i '/types_hash_max_size 2048;/a \
\
    gzip on;\
    gzip_static on;\
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;\
    gzip_comp_level 9;\
    gzip_proxied any;\
    gzip_min_length 1000;\
    gzip_disable "msie6";\
    gzip_vary on; \
' /etc/nginx/nginx.conf

Добавим в /etc/nginx/nginx.conf настройки индексного файла index.php:

sudo sed -i '/        root         \/usr\/share\/nginx\/html;/a \
        index index.php index.html index.htm;\
' /etc/nginx/nginx.conf


Добавим настройки для дефолтного сервера обработку php через сокет php-fpm, отключим лог для статических файлов, увеличим время expire, отключим лог доступа и ошибок для favicon.ico и robots.txt и запретим доступ к файлам .ht для всех:

sudo sed -i '/        location \/ {/a \
		try_files $uri $uri/ /index.php?q=$uri&$args;\
        }\
    \
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {\
        access_log off;\
        expires max;\
        }\
    \
        location ~ \.php$ {\
        try_files  $uri =404;\
        fastcgi_pass   unix:/run/php-fpm/www.sock;\
        fastcgi_index index.php;\
        include fastcgi_params;\
        fastcgi_intercept_errors on;\
        fastcgi_ignore_client_abort off;\
        fastcgi_connect_timeout 60;\
        fastcgi_send_timeout 180;\
        fastcgi_read_timeout 180;\
        fastcgi_buffer_size 128k;\
        fastcgi_buffers 4 256k;\
        fastcgi_busy_buffers_size 256k;\
        fastcgi_temp_file_write_size 256k;\
        }\
    \
        location = /favicon.ico {\
        log_not_found off;\
        access_log off;\
        }\
    \
        location = /robots.txt {\
        allow all;\
        log_not_found off;\
        access_log off;\
        }\
    \
        location ~ /\.ht {\
        deny all;' /etc/nginx/nginx.conf

Установим wget требуемый для установки certbot:

sudo dnf install wget -y

Скачаем исполняемый файл certbot с оффсайта:

cd ~
wget https://dl.eff.org/certbot-auto

Переместим certbot в /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

И назначим права и владельцем root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Установим зависимости certbot и на данном этапе прервем его работу (Ответы: Y, c):

certbot-auto

Скачаем с оффсайта архив с Joomla_3-9-22-Stable-Full_Package

cd ~
wget https://downloads.joomla.org/cms/joomla3/3-9-22/Joomla_3-9-22-Stable-Full_Package.tar.gz?format=gz

Установим tar для распаковки архива

sudo dnf install tar -y

Распакуем файлы в каталог веб-сервера

tar xf Joomla_3-9-22-Stable-Full_Package.tar.gz\?format\=gz -C /usr/share/nginx/html/

Удалим архив

rm -f Joomla_3-9-22-Stable-Full_Package.tar.gz\?format\=gz

Назначим владельцем файлов nginx

sudo chown -R nginx. /usr/share/nginx/html

Отключим буферизацию вывода по рекомендации Joomla

sudo sed -i --follow-symlinks 's/output_buffering = 4096/output_buffering = Off/g' /etc/php.ini

На данном этапе мы выключим сервер и сделаем снапшот:

shutdown -h now

После запуска VDS из снапшота выполним первоначальную настройку MySQL сервера запустив скрипт:

mysql_secure_installation

Включим валидатор паролей:

Would you like to setup VALIDATE PASSWORD component? : y

Зададим пароль пользователя root MySQL:

New password:
Re-enter new password:

Удалим анонимных пользователей:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Запретим подключаться root удаленно:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Удалим тестовую базу данных:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Перезагрузим таблицы привилегий:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

После этого, для завершения установки, мы можем перейти по адресу vps_ip_address
По этому адресу мы увидим страницу с установкой Joomla.

Укажем название сайта, зададим email, логин и пароль администратора Joomla. Нажмем «Далее».

На второй странице укажем имя пользователя БД root и пароль, который мы задали при запуске mysql_secure_installation.
Зададим имя базе данных, например joomla. Нажмем "Далее".

На третьей странице, мы можем выбрать установку демо-данных для ознакомления с возможностями CMS или выбрать пустой сайт по умолчанию, после выбора нажмем "Установка".

Для установки русского языка, нужно нажать "Установка языковых пакетов" — Russian, и после установки, установить языком по умолчанию.

Для завершения установки нужно нажать "Удалить директорию", что бы удалить файлы используемые для установки.

После этого можно перейти в панель управления с созданным логином и паролем администратора Joomla.

НАСТРОЙКА HTTPS (ОПЦИОНАЛЬНО)


Для настройки HTTPS у VDS должно быть действующее DNS имя, укажите в /etc/nginx/nginx.conf
в разделе server имя сервера (например):

server_name  domainname.ru;

Перезапустим nginx:

service nginx restart

Запустим certbot:

sudo /usr/local/bin/certbot-auto --nginx

Введем свой e-mail, cогласимся с условиями сервиса (A), Подписка на рассылку (опционально) (N), выберем доменные имена для которых нужно издать сертификат (Enter для всех).

В случае, если все прошло без ошибок, мы увидим сообщение об успешной выдаче сертификатов и настройке сервера:

Congratulations! You have successfully enabled ...


После этого подключения на 80 порт будут перенаправляться на 443 (https).

Добавим в /etc/crontab для автоматического обновления сертификатов:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"


Для владельцев бизнеса: предложите свой софт


Если вы — разработчик софта, который разворачивают и используют на VPS, то мы можем включить вас в маркетплейс. Так мы можем помочь вам привести новых клиентов, трафик и узнаваемость. Пишите нам

Просто предложить нам образ в комментариях


Напишите, какой с каким софтом вы хотели бы иметь возможность разворачивать виртуалки в один клик?

Чего вам не хватает в маркетплейсе RUVDS?

Что каждый уважающий себя хостинг должен обязательно включить в свой маркетплейс?



RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

Комментарии 5

    +4
    SEO Friendly
    Система управления контентом в Joomla хорошо дружит с поисковыми системами. Работает на apache-модуле, который создает ссылки, которые хорошо воспринимаются поисковиками. Он же помогает добалять свои собственные названия страница, мета-описания и мета-ключевые слова. Это помогает сайтам на джумле хорошо индексироваться.


    киллер фича, конечно, писать об этом в 20 году. Ключевые слова в метатегах лет 10 в игноре поисковиков. Сейчас cms-ки еcли хотят привлекать внимание, должны показывать 100 100 100 100 в аудите хрома lighthouse.

    Джумлу любят по одной причине — детство, когда спина еще хорошо гнется.
      +2
      Наверное это основная :)
      +2
      На второй странице укажем имя пользователя БД root и пароль, который мы задали при запуске mysql_secure_installation.

      Не уверен, что работать с базой данных от рута это хорошая идея. В случае SQL-инъекции, такие права могут помочь влезть в систему куда глубже БД.

        0
        джумла это 99% виртуальные хостинги. Там права рута ограничены сами по себе рамках одной базы и определенных комманд. Это если сайт ломануть можно попасть в файлы других проектов в рамках одного аккаунта. Но не выше точно.
          0

          Ну тут речь идёт как раз про чистую
          VPS’ку, на которой нет других сайтов и песочниц для запущенных приложений. Если проводить настройку по статье, то суперюзер в БД будет настоящим суперюзером, без каких-то ограничений прав.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое