• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Wordpress — это популярная, бесплатная и стабильная CMS, имеющая за своими плечами долгую историю и огромное сообщество, которое активно поддерживает её развитие.

В данной статье мы подробно рассмотрим как установить Wordpress на Debian 10 без использования популярных панелей управления. Это позволит понять как устроена CMS, какие зависимости она затрагивает, а так же сэкономить ресурсы сервера, если они ограничены.

Содержание

  1. Установка стека LAMP
  2. Создание базы данных MariaDB
  3. Настройка виртуального хоста Apache
  4. Тестирование настроек
  5. Установка и настройка Wordpress
  6. Настройка SSL для домена на Wordpress
  7. Рекомендации по обеспечению безопасности
  8. Если вы установили Wordpress на VPS из нашего шаблона
  9. Заключение

Существует два рекомендуемых способа установки, использовать Apache или Nginx. В данной статье мы рассмотрим первый вариант - Apache. В качестве бэкенда будем использовать MariaDB.

Требования WordPress версии 5.4 к серверу, по состоянию на апрель 2020, следующие:

PHP версии 7.3 или выше.

MySQL версии 5.6 или выше ИЛИ MariaDB версии 10.1 или выше.

Руководство рассчитано на то, что вы его используете на «чистом» сервере, без предустановленного программного обеспечения. Установка на уже существующий, без предварительного анализа предустановленных версий не рекомендуется. Будут затронуты зависимости, которые могут привести к неработоспособности уже существующих сервисов.

1. Установка стека LAMP

Стек LAMP это аббревиатура стека Linux Apache MySQL PHP. Первым делом обновим наш пакетный менеджер:

 

root@dedicated:~# apt-get update && apt-get upgrade -y

 

Установим Apache

 

root@dedicated:~# apt-get install apache2

 

Проверим, все ли работает. Для этого достаточно в адресной строке браузера ввести ip адрес вашего сервера:

https://your_ip

Страница проверки Apache

Аpache работает. Теперь установим и настроим систему управления базами данных MariaDB, которая обеспечит доступ к базам данным которые мы создадим позже. MariaDB является форком MySQL, в большинстве случаев рекомендуется устанавливать именно её. Почему так, это отдельная тема которая затрагивает вопросы лицензирования, разработки и истории MySQL.

 

root@dedicated:~# apt-get install mariadb-server

 

Проверим нашу версию MariaDB:

 

root@dedicated:~# mariadb --version

mariadb Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

 

Выполним первоначальную настройку безопасности. Для этого существует команда mysql_secure_installation, после ввода которой запустится скрипт, в котором нужно будет выполнить ряд действий:

 

root@dedicated:~# mysql_secure_installation

# Вводим пароль пароль пользователя root (нажимаем Enter)

Enter current password for root (enter for none):

# Смена пароля суперпользователя root для MariaDB;

Change the root password? [Y/n] n

# Удаляем анонимного пользователя

Remove anonymous users? [Y/n] Y

# Запретим подключение к базе данных со сторонних серверов

Disallow root login remotely? [Y/n] Y

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

Remove test database and access to it? [Y/n] Y

# Активируем привелегии их перезагрузкой

Reload privilege tables now? [Y/n] Y

Thanks for using MariaDB!

 

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

 

root@dedicated:~# apt-get install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap 
php-intl php-zip

 

Проверим версию php, чтобы она соответствовала минимальным требованиям:

 

root@dedicated:~# php -v

PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )

 

Затем выполним небольшую правку. Для начала посмотрим, что у нас находится в обработчике:

 

root@dedicated:~# cat /etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>

	DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

</IfModule>

 

Как видим, первым делом Apache обслуживает index.html, и только четвертым будет обработка index.php. Хорошей практикой будет обработку php поставить первым. Для этого откройте dir.conf любым удобным редактором и приведите его к следующему виду:

 

root@dedicated:~# cat /etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>

	DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

</IfModule>

 

Перезапустите Apache и проверьте его состояние:

 

root@dedicated:~# systemctl restart apache2.service

root@dedicated:~# systemctl status apache2.service

 

Проверка состояния работы Apache

2. Создание базы данных MariaDB

Для создания базы данных, пользователя и назначения привилегий в консоли достаточно ввести mariadb и перед вами откроется консоль управления СУБД:

 

root@dedicated:~# mariadb

MariaDB [(none)]>

 

Создадим базу данных с названием mydatabase:

 

MariaDB [(none)]> CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8 COLLATE
utf8_unicode_ci;

 

Создадим пользователя secret_user для базы данных mydatabase. Вместо frEEHo$t78 придумайте сложный пароль, который включает в себя не менее 10 латинских символов в верхнем и нижнем регистрах, цифры и спецсимволы.

 

MariaDB [(none)]> GRANT ALL ON mydatabase.* TO 'secret_user'@'localhost' IDENTIFIED BY
'frEEHo$t78';

 

Обновите привилегии:

 

MariaDB [(none)]> FLUSH PRIVILEGES;

 

Проверьте результат:

 

MariaDB [(none)]> SHOW DATABASES;

 

Установка привелегий

Теперь можно завершить редактирование командой

 

MariaDB [(none)]> EXIT;

 

В будущем, для управления базами данных вы можете использовать phpMyAdmin. С инструкцией по установке вы можете ознакомиться по ссылке.

3. Настройка виртуального хоста Apache

По умолчанию у вас будет доступен только один дефолтный виртуалхост - /var/www/html. В нашем примере мы будем использовать тестовый домен dmt.co.ua (кстати, зарегистрировать домен Вы можете на нашем сайте). Создадим для него собственный виртуалхост. /var/www/html удалите, а так же закоментируйте все директивы в /etc/apache2/sites-available/000-default.conf, иначе при проверке синтаксиса apache, вы получите ошибку отсутствия каталога html

Первым делом, для него нам понадобится отдельный каталог. Создадим его:

 

root@dedicated:~# mkdir /var/www/dmt.co.ua

 

Создайте новый файл конфигурации описывающий ваш домен

 

root@dedicated:~# nano /etc/apache2/sites-available/dmt.co.ua.conf

 

Добавьте в него следующее содержимое:

 

<VirtualHost *:80>

ServerName dmt.co.ua

ServerAlias www.dmt.co.ua

ServerAdmin admin@example.com

DocumentRoot /var/www/dmt.co.ua

<Directory /var/www/dmt.co.ua>

Options -Indexes +FollowSymLinks

AllowOverride All

</Directory>

ErrorLog ${APACHE_LOG_DIR}/dmt.co.ua-error.log

CustomLog ${APACHE_LOG_DIR}/dmt.co.ua-access.log combined

</VirtualHost>

 

Содержимым выше мы указали домену dmt.co.ua корневой каталог по пути /var/www/dmt.co.ua. Директивой AllowOverride в блоке <Directory … </Directory> мы разрешили использование .htaccess

Проверьте синтаксис:

 

root@dedicated:~# apache2ctl configtest

Syntax OK

 

Включите поддержку rewrite:

 

root@dedicated:~# a2enmod rewrite

 

Активируйте виртуалхост командой a2ensite:

 

root@dedicated:~# a2ensite dmt.co.ua

 

Если все сделано правильно, вы должны увидеть следующее:

 

Enabling site dmt.co.ua.

To activate the new configuration, you need to run:

systemctl reload apache2

 

Команда a2ensite активировав виртуалхост создаст символическую ссылку в каталоге /etc/apache2/sites-enabled

Создание символической ссылки

Перезапустите Apache:

 

root@dedicated:~# systemctl restart apache2.service

 

4. Тестирование настроек

Прежде чем мы приступим к установке Wordpress давайте протестируем, все ли верно мы настроили. Для этого в корневой директории, которую мы определили для домена dmt.co.ua, создадим файл info.php со следующим содержимым:

 

root@dedicated:~# cat /var/www/dmt.co.ua/info.php

<?php

phpinfo();

 

В адресной строке браузера перейдем по ссылке:

https://dmt.co.ua/info.php

Информация phpinfo

После тестирования обязательно удалите файл info.php, он не должен быть в открытом доступе.

5. Установка и настройка Wordpress

Если у вас не установлена утилита curl, установите её

 

root@dedicated:~# apt-get install curl

 

Затем перейдите в каталог /tmp, скачайте в него скачайте свежую версию Wordpress и извлеките с архива содержимое:

 

root@dedicated:~# cd /tmp

root@dedicated:~# curl -O https://wordpress.org/latest.tar.gz

root@dedicated:~# tar xzvf latest.tar.gz

 

Скопируйте содержимое в корневую директорию сайта, которую мы создали ранее:

 

root@dedicated:~# cp -a /tmp/wordpress/. /var/www/dmt.co.ua/

 

Дальнейшую настройку мы будем проводить относительно корневого каталога /var/www/dmt.co.ua/

Ранее мы включили поддержку .htaccess, создайте пустой файл, без содержимого.

 

root@dedicated:~# cd /var/www/dmt.co.ua/

root@dedicated:~# touch .htaccess

 

Создайте каталог upgrade. Этот каталог обычно создается при автоматическом обновлении Wordpress, но при его создании иногда бывают конфликты, которые можно исключить создав каталог вручную. При обновлении, Wordpress сначала скачивает архив в этот каталог, а уже из него будет происходить дальнейшее обновление.

 

root@dedicated:~# mkdir /var/www/dmt.co.ua/wp-content/upgrade

 

Скопируйте главный конфигурационный файл с именем wp-config.php

 

root@dedicated:~# cp /var/www/dmt.co.ua/wp-config-sample.php
/var/www/dmt.co.ua/wp-config.php

 

Установите правильные права доступа на каталоги. Пользователь и группы должны быть www-data. Если вы что-то создаете в каталоге с сайтом wordpress от пользователя root, возьмите за привычку проверять права на каталоги.

 

root@dedicated:~# chown -R www-data:www-data /var/www/dmt.co.ua/

 

По правилам безопасности, права на каталоги должны быть 755, а на файлы 644. Необходимо избегать прав 777, это первая уязвимость сайта для несанкционированного доступа и внедрения вредоносного кода. Отредактируйте права следующими командами:

 

root@dedicated:~# find /var/www/dmt.co.ua/ -type d -exec chmod 755 {} \;

root@dedicated:~# find /var/www/dmt.co.ua/ -type f -exec chmod 644 {} \;

 

Результат должен быть следующим:

 

root@dedicated:~# ls -la /var/www/dmt.co.ua/

 

Установка прав на каталоги

Далее сгенерируем ключи безопасности. Это набор случайных значений, которые служат для шифрования информации которая хранится в Cookies. С использованием ключей безопасности повышается сложность взлома паролей.

Генерация секретных ключей происходит следующим образом:

 

root@dedicated:~# curl -s https://api.wordpress.org/secret-key/1.1/salt/

 

В терминале вы увидите автоматически сгенерированные ключи. Они уникальны.

Генерация ключей

Откройте удобным редактором wp-config.php

 

root@dedicated:~# nano /var/www/dmt.co.ua/wp-config.php

 

...и найдите следующие строки:

 

define( 'AUTH_KEY', 'put your unique phrase here' );

define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );

define( 'LOGGED_IN_KEY', 'put your unique phrase here' );

define( 'NONCE_KEY', 'put your unique phrase here' );

define( 'AUTH_SALT', 'put your unique phrase here' );

define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );

define( 'LOGGED_IN_SALT', 'put your unique phrase here' );

define( 'NONCE_SALT', 'put your unique phrase here' );

 

Удалите эти строки, и на их место скопируйте те что мы сгенерировали.

Сдесь же, в wp-config.php, настроим подключение к базе данных, используя данные пользователя, которого мы создали в разделе «Создание базы данных MariaDB». Удалите значения по умолчанию заменив своими:

Настройка подключения к БД

Сохраните wp-config.php. Теперь вы можете приступить к установке Wordpress через интерфейс в браузере. Выберите язык и нажмите «Продолжить». Далее заполните все поля и подтвердите нажатием «Установить Wordpress»

Страница установки WP

Указание начальной информации для установки WP

Стартовая страница сайта после установки WP

6. Настройка SSL для домена на Wordpress

SSL обязателен для шифрования трафика между сайтом и посетителем, особенно это важно, если через сайт проходят платежи и конфиденциальная информация, попадание которой к третьим лицам недопустимо. Так же SSL сертификат играет не последнюю роль в СЕО и продвижении сайта в интернете. Существуют бесплатные и платные сертификаты. Если вы уделяете должное внимание обеспечению безопасности и продвижению сайта, рекомендуются платные сертификаты. Например Comodo (ныне Sectigo), которые можно заказать, в том числе, и через компанию Freehost.UA. Если вы решаетесь, нужен ли вам платный сертификат, настоятельно рекомендуется установить бесплатный. От так же функционален и защитит ваш сайт.

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

Устанавливать будем с помощью утилиты Certbot, которая поддерживает бесплатные сертификаты от сервиса Let’s Encrypt.

 

root@dedicated:~# wget https://dl.eff.org/certbot-auto

root@dedicated:~# chmod a+x certbot-auto

 

Запустим сценарий, указав apache. Если вы используете nginx, укажите его.

 

root@dedicated:~# ./certbot-auto --apache

 

Во время выполнения скрипта, нужно будет выполнить ряд действий, предоставив необходимую информацию.

Укаазание информациюю для установки Let`s Encrypt

Настройка HTTPS

  • Введите ваш действующий email адрес
  • Подтвердите пользовательские соглашения. Ответ: А
  • Желаете ли получать email рассылки? Ответ: N
  • Для какого домена нам нужен сертификат. В нашем примере без www
  • Пункт предлагает, оставить сайт доступным по HTTP и HTTPS, или только по HTTPS. В нашем примере мы выбрали первый вариант. На скриншоте информация нечитабельна, но перевод уведомления красным цветом буквально следующей: «Будущие версии Certbot будут автоматически настраивать веб-сервер так, чтобы все запросы перенаправлялись на безопасный доступ HTTPS. Вы можете контролировать это поведение и отключить это предупреждение с помощью флагов --redirect и --no-redirect.»

Certbot автоматически все сгенерировал и разложи по каталогам. Сертификат (certificate) и цепочку (chain) сохранил в:

/etc/letsencrypt/live/dmt.co.ua/fullchain.pem

Приватный ключ сгенерирован здесь:

/etc/letsencrypt/live/dmt.co.ua/privkey.pem

Удобство заключается так же в том, что Certbot просканировал все наши каталоги и виртуалхосты, автоматически создав новый конфиг dmt.co.ua-le-ssl.conf

Созданный файл dmt.co.ua-le-ssl.conf

Если платный сертификат выдается сроком на 1 год, то бксплатный сертификат Let’s Encrypt выдается сроком на три месяца. Продлить его можно следующей командой, из каталога в который скачан Certbot :

 

root@dedicated:~# ./certbot-auto renew

 

..или добавить выполнение данной команды в планировщик задач cron. Рекомендуется ставить выполнение задачи не чаще, чем раз в три месяца, иначе при валидном сертификате он может не обновится.

Есть несколько ресурсов, на которых можно проверить валидность ssl сертификата.

Проверка вадидности SSL сертифката

Далее идем в панель управления https://dmt.co.ua/wp-admin, в левом меню переходим в раздел «Настройки», в директивах Адрес WordPress (URL) и Адрес сайта (URL) меняем http на https. Нажимаем «Сохранить изменения» внизу страницы.

Внесение настроек в админпанели WP

Отключаем HTTP, для этого наш файл .htaccess приводим к следующему виду:

 

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} =off

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

</IfModule>

 

Примечание: файл .htaccess гибок, существует огромное количество реализаций редиректов и других настроек. Они во многом зависят от реализации самого сайта. В нашем примере мы показали, как выполнить первоначальные настройки. Для более гибких и тонких, рекомендуется обратиться к разработчику, который сопровождает ваш сайт.

Если после этого вы получите ошибку циклической переадресации, необходимо в файле wp-config.php, после <?php добавить с новой строки следующее содержимое:

 

if ($_SERVER["HTTP_X_FORWARDED_PROTOCOL"] == 'https'){

$_SERVER["HTTPS"]='on';

}

if ($_SERVER["HTTP_X_FORWARDED_PROTOCOL"] == 'http'){

$_SERVER["HTTPS"]='on';

header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]);

exit();

}

 

Теперь наш сайт доступен только по HTTPS. При попытке перейти по протоколу HTTP, посетителя будет автоматически перенаправлять на защищенный протокол.

Работа сайта на https

7. Рекомендации по обеспечению безопасности

Настройка парольной аутентификации Apache

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

 

root@dedicated:~# apt-get install apache2-utils

 

Создайте файл с паролями, задайте уникальное имя пользователя и придумайте для него сложный пароль. Пароль следует запомнить, он хранится в хешированом виде и в текстовом виде недоступен:

 

root@dedicated:~# htpasswd -c /etc/apache2/.htpasswd secret_username

New password:

Re-type new password:

Adding password for user secret_username

 

Флаг «-с» означает create, и используется только при создании .htpasswd для apache. Если вы планируете добавить несколько пользователей, повторно этот флаг использовать не нужно.

Теперь настроим наш виртуальный хост. Для этого выполним правку:

 

root@dedicated:~# nano /etc/apache2/sites-enabled/dmt.co.ua-le-ssl.conf

 

Добавив в него содержимое:

 

<Directory "/var/www/dmt.co.ua/wp-admin">

AuthType Basic

AuthName "Restricted Content"

AuthUserFile /etc/apache2/.htpasswd

Require valid-user

</Directory>

 

Редактирование файла dmt.co.ua-le-ssl.conf

Сохраните файл. Проверьте синтаксис и перезапустите Apache

 

root@dedicated:~# apache2ctl configtest

Syntax OK

root@dedicated:~# systemctl restart apache2.service

 

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

Вход в админчасть WP

Ограничение доступа по IP адресу

Так же вы можете ограничить вход в административную часть сайта, которая по умолчанию доступна по https://dmt.co.ua/wp-admin/ и https://dmt.co.ua/wp-login.php

Для этого в .htaccess добавьте следующие строки, указав вместо 111.111.111.111 свой внешний статический ip адрес, с которого вы планируете администрировать сайт. Допускается добавления нескольких IP адресов, вносить каждый нужно с новой строки:

 

<FilesMatch "^(wp-login|wp-config)\.php$">

Order deny,allow

Deny from all

Allow from 111.111.111.111

</FilesMatch>

 

Возможности обезопасить ваш сервер ограничены только временем и желанием на изучение администрирования. Рекомендуем так же ознакомиться со статьей «Как обеспечить безопасность Linux сервера» и ознакомиться с другими статьями нашего блога которые затрагивают администрирование различных CMS.

8. Если вы установили Wordpress на VPS из нашего шаблона

Для наших клиентов VPS мы подготовили шаблон виртуального сервера на Debian 10 с WordPress. Автоматическая установка занимает не более 10 минут и инициируется в панели управления сервером. По умолчанию, доступен только один сайт, доступный по ip адресу. Как настроить виртуалхост по доменному имени, подробно рассмотрено в этом руководстве. Вы можете сделать свои виртуальные хосты и установить несколько сайтов, на сколько позволят технические характеристики сервера и загруженность самих сайтов.

Если вы решите использовать сайт доступный из шаблона, необходимо обязательно сменить данные доступа администратора баз данных или создать свою азу данных, удалив существующую. Изменить пароль очень просто:

 

root@dedicated:~# mariadb

MariaDB [(none)]> SET PASSWORD FOR 'admindb'@'localhost' = PASSWORD('newpassword');

 

Вместо newpassword укажите свой уникальный сложный пароль. Затем затем отредактируйте файл wp-config.php

 

root@dedicated:~# nano /var/www/wordpress/wp-config.php

 

изменив значение следующей директивы:

 

define( 'DB_PASSWORD', 'newpassword' );

 

Заключение

В данном руководстве мы ознакомились с процедурой установки популярного движка Wordpress на среду Linux. По данному мануалу не составит труда его установить самостоятельно и обеспечить базовую безопасность сайта или установить из существующего шаблона, заказав облачный VPS. Наша круглосуточная служба технической поддержки поможет с его базовой настройкой, если у вас возникнут сложности.

 

Дата: 27.04.2020
Автор: Дмитрий
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA