Часть 1: Настраиваем WordPress VPS

Поскольку сегодня многие люди используют виртуальный хостинг, мы решили привести серию учебных руководств, которые помогут вам настроить свой собственный виртуальный частный сервер (VPS), все необходимые сервисы для обслуживания WordPress-сайта, а также расскажем вам, как оптимизировать его скорость и безопасность.

Почему виртуальный хостинг – не самый лучший вариант?

  • Ваша сборка WordPress должна бороться за ресурсы сервера
  • Вы не можете ускорить WordPress самостоятельно
  • Вы не можете защитить WordPress самостоятельно

Единственное, что вы должны понять – то, что есть разница между виртуальным хостингом и управляемым хостингом; первый – это в основном просто каталог, который вы имеете на сервере, а также FTP-доступ и некоторая панель управления (обычно Plesk или cPanel).

Последний – это базовая консоль, которая позволяет вам установить домен, получить доступ к базе данных, а также выполнить некоторые другие вещи – все остальное выполняется за вас хостинг-компанией. Есть много таких хостингов: WPEngine, Pagely, Flywheel, SiteGround – все они помогают сделать ваш сайт оптимизированным и обновленным, вам не нужно будет беспокоиться об этом.

Почему в данной серии статей мы не рассматриваем управляемые WordPress-сборки? Во-первых, поддерживая сайт самостоятельно, вы узнаете массу всего, что требуется для успешного ведения WordPress-сайта. Вы узнаете, как установить и оптимизировать все детали сайта; начиная с Linux (операционная система) и заканчивая Nginx (веб-сервер), FTP, SSH, базой данных; наконец, вы узнаете, как обслуживать WordPress, как оптимизировать ресурсы, как поднять безопасность, а также как добиться лучшего времени отклика.

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

Подготовка

Вы не можете управлять сервером с помощью традиционного метода щелчков мышью, поэтому вам понадобится использовать командную строку (или терминал, если вы используете Mac), а также иметь некоторые базовые навыки работы с Linux — мы будем использовать сервер на базе Ubuntu. Наконец, у вас должен быть аккаунт в DigitalOcean. Вы можете также работать и с другими провайдерами облачного хостинга, однако вам понадобится адаптировать некоторые шаги – что, в принципе, не составит труда.

Также обратите внимание, что все команды терминала начинаются со знака доллара ($).

Создаем свой VPS

Создание сервера – достаточно простой процесс, который состоит из нескольких кликов мышью. Заходим в свою консоль DigitalOcean, щелкаем по «Create Droplet» (дроплетами они называют свои виртуальные серверы).

DO-VPS

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

  • Hostname: может быть доменом, субдоменом или произвольным словом, как, к примеру, «my-server». Я выбрал «playground».
  • Region: вам нужно выбрать регион, который является самым близким к вашим целевым посетителям. Я выбрал Нью-Йорк, поскольку он находится на разумном расстоянии от США и Европы – двух мест, откуда идет основной поток посетителей.
  • Image: позволяет выбрать дистрибутив Linux, который вам больше всего подходит. Я использую Ubuntu (первый вариант), поскольку это – наиболее известная и широко поддерживаемая платформа.
  • SSH Key: как вы можете видеть, я уже загрузил свои ключи, и я рекомендую вам сделать то же самое. В следующем разделе я расскажу вам, как это осуществить.

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

SSH-ключ – это пара двух зашифрованных файлов, один из которых является публичным, а другой – приватным (публичный – это замок, в то время как приватный – это ключ). Если вы зайдете в оболочку сервера и загрузите приватный файл в корректное место, сервер не будет спрашивать ваш пароль, поскольку он автоматически сравнит два файла и позволит вам войти в случае их соответствия.

Для пользователей Windows: вы должны использовать PuTTY для подключения к серверу, и он также поддерживает генерацию пары ключей.

Чтобы сгенерировать пару ключей, перейдите к терминалу и введите следующие команды:

$ cd ~/.ssh
$ ssh-keygen -t rsa -C “[email protected]

VPS-WordPress-RSA-generate

Вас попросят ввести название ключа, а также пароль, который надо оставить пустым (просто нажмите Enter) в данный момент, однако если вы захотите узнать об этом больше, вы можете перейти к следующей статье, в которой разъясняется этот дополнительный шаг. В качестве названия ключа введите любое слово или оставьте его по умолчанию, однако учтите, что в таком случае будет перезаписан существующий дефолтный ключ, если он уже был создан.

Теперь, когда ваш SSH-ключ сгенерирован, вы можете вернуться обратно к форме создания дроплета и щелкнуть по пункту «Add SSH Key», что откроет текстовую область, где вы можете вставить публичную часть ключа (файл, который заканчивается на .pub).

(Чтобы получить контент .pub файла, вам нужно либо открыть его в текстовом редакторе, либо выполнить $ cat playground.pub в терминале).

Если все настройки сервера в порядке и SSH-ключ правильно загружен, щелкните по Create Droplet и подождите несколько минут – в итоге вы получите готовый работающий сервер.

Следующий пункт является необязательным, однако он позволяет сэкономить некоторое время при входе на сервер, поэтому он настоятельно рекомендован. Перейдите к папке .ssh с вашими ключами и создайте файл под названием config (без расширения), после чего добавьте к нему следующие строки:

Host Playground
  HostName 104.131.53.181
  Port 22
  User root
  IdentityFile /Users/Tomaz/.ssh/playground

Не забудьте изменить HostName на IP, который был вам предоставлен, а также IdentityFile на приватный ключ, который был сгенерирован. Сохраните файл и закройте редактор.

Вуаля! Теперь вы можете устанавливать SSH-соединение с сервером. Для этого просто введите:

$ ssh Playground

Вы войдете на сервер и увидите оболочку – среду, которую предлагает сервер для ввода команд (чтобы запустить программу, создать/изменить файл и т.д.).

Создание пользователя

Все, что мы делали до сих пор, предполагало, что мы выполняем действия на сервере в качестве «богоподобного» пользователя, который называется root. В действительности это – достаточно плохая, небезопасная практика, поэтому мы создадим нормального пользователя, который будет использоваться для входа на сервер.

На сервере выполняем следующие две команды:

$ groupadd admin
$ adduser webmaster --ingroup admin

Вас попросят ввести пароль (курсор не будет перемещаться при вводе, просто нажмите Enter, когда все будет завершено) и некоторую дополнительную информацию, которую вы можете предоставить, а можете не предоставлять (это не обязательно).

Группа admin имеет больше привилегий, чем обычный пользователь на виртуальном хостинге, и эти привилегии уже сконфигурированы в Ubuntu. Однако группа по умолчанию не существует, поэтому мы должны ее сначала добавить.

Теперь, когда у нас есть свой пользователь, мы можем переместить SSH-ключ от root к нашему новому пользователю. Вот как это сделать:

$ mkdir /var/www/webmaster/.ssh
$ mv /root/.ssh/authorized_keys /var/www/webmaster/.ssh/
$ chown -R webmaster:admin /var/www/webmaster/.ssh/

Что делают эти три команды:

  • Создают директорию (каталог, если вы работаете с Windows)
  • Переносят файл с ключами авторизации от root к пользователю
  • Создают пользователя webmaster с правами владения файлом (пользователь получает к нему доступ).

Теперь пришло время обновить конфигурационный файл, который мы создали в предыдущей секции:

Host Playground
  HostName 104.131.53.181
  Port 22
  User webmaster
  IdentityFile /Users/Tomaz/.ssh/playground

После этого вернитесь обратно на свой сервер.

Повышение безопасности

Все наши серверы ежедневно сталкиваются со всеми типами атак, и одна из наиболее популярных атак – это брутфорс SSH-входа. Это достигается путем использования тысяч комбинаций имен пользователей и паролей, поэтому далее мы прекратим обращаться к такому подходу – ведь у нас теперь есть пара ключей, а значит нет никакой необходимости в паролях.

Есть конфигурационный файл, который нам нужно отредактировать:

$ sudo nano /etc/ssh/sshd_config

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

В этом файле имеется много настроек, но нас будут интересовать только следующие из них:

PermitRootLogin no
PasswordAuthentication no

Сохраните файл и выйдите из редактора, нажав ctrl+X, shift+Y и Enter. Чтобы изменения вступили в силу, вы должны перезапустить демона; делается это следующим образом:

$ sudo service ssh restart

Настройка Nginx

Теперь, когда безопасность в порядке, мы должны установить программы веб-сервера. Мы могли бы использовать Apache (я уверен, что вы слышали о нем), однако он ест много памяти и медленно обрабатывает запросы, поэтому вместо него мы воспользуемся Nginx.

Чтобы установить его, просто введите следующие команды:

$ sudo apt-get update
$ sudo apt-get -y install nginx

Откройте браузер и введите IP-адрес сервера, чтобы убедиться в том, что все работает корректно. Вы должны увидеть стандартную страницу «Welcome to nginx», как на картинке ниже:

VPS-WordPress-nginx-welcome

Достаточно просто, не правда ли?

Настройка PHP

Система WordPress написана на open source языке, который называется PHP. Мы должны настроить его на своем сервере, используя следующую команду:

$ sudo apt-get install -y php5-fpm php5-cli

PHP FPM – диспетчер процессов FastCGI, который обрабатывает PHP-файлы, чтобы система WordPress могла функционировать корректно. Это автономный процесс (или фоновое приложение – также именуемое как демон), к которому обращается наш веб-сервер (nginx), когда ему нужно обработать PHP-файлы.

Альтернатива, к которой вы, вероятно, уже привыкли – это модуль Apache. Однако проблема с данным подходом заключается в том, что этот модуль всегда включен, вне зависимости от того, должен ли Apache обслуживать статичный файл (допустим, изображение); т.е. этот модуль всегда активен, поэтому он напрасно тратит ресурсы сервера. В то время как в нашем подходе процесс вызывается только при необходимости.

Мы также установим интерфейс командной строки (или CLI) для PHP, т.е. мы сможем работать с PHP из нашей командной строки. Чтобы протестировать его, просто введите следующее:

$ php -v

Если вы видите данный экран, вы готовы к следующему шагу:

VPS-WordPress-PHP-verification

Настройка базы данных

У нас есть два варианта для выбора механизма базы данных: MySQL и MariaDB. Мы воспользуемся вторым вариантом, поскольку он является заменой первого, и его написал тот же самый автор.

$ sudo apt-get install -y mariadb-server mariadb-client

Вас дважды попросят ввести пароль пользователя root. Убедитесь в том, что вы выбрали сложный пароль и сохранили его в безопасном месте (я рекомендую использовать 1Password).

Чтобы протестировать, все ли в порядке, попробуйте подключиться к базе данных:

$ mysql -u root -p

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

VPS-WordPress-access-MySQL

Для выхода нажмите CTRL + D.

Настройка FTP

Я не являюсь особым поклонником FTP, однако WordPress, кажется, лучше всего работает именно с ним, поэтому у нас просто нет выбора – мы установим FTP в данном разделе.

Для начала нам нужно создать FTP-сервер (к которому мы будем подключаться через наш FTP-клиент). Мы будем использовать vsftpd, один из самых популярных FTP-серверов. Чтобы установить его, просто используйте apt-get, как в предыдущих случаях:

$ sudo apt-get install -y vsftpd

Чтобы протестировать его, откройте ваш FTP-клиент и подключитесь к серверу, используя ранее созданное имя пользователя и пароль (если вы следовали за руководством, то в таком случае имя пользователя – webmaster).

Существуют и другие настройки, однако мы рассмотрим их в следующих руководствах.

Настройка почтовой программы

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

Такой подход не слишком удачен по нескольким причинам:

  • Письмо отправляется с минимально настроенными/неправильно настроенными заголовками
  • Письмо зачастую помечается как спам
  • Отправка может привести к сбою на стороне сервера, и вы, скорее всего, не заметите этого

Именно поэтому я являюсь сторонником установки демона почтовой программы, и мне нравится использовать sSMTP вследствие его простоты. Есть только один маленький файл, который надо сконфигурировать.

Для начала давайте установим его:

$ sudo apt-get install -y ssmtp

Во время установки конфигурационный файл находится по адресу /etc/ssmtp/ssmtp.conf. Его нам надо отредактировать:

$ sudo nano /etc/ssmtp/ssmtp.conf

Прежде, чем продолжить, я вам рекомендую создать отдельный почтовый ящик, который будет использоваться сервером для отправки писем – к примеру, [email protected]. Запомните пароль, он вам понадобится для дальнейшего конфигурирования.

Или, что еще лучше, создайте учетную запись на Mailgun и используйте ее для отправки писем. С этим сервисом легко начать работу и он поддерживает 10k писем бесплатно в месяц. Вполне достаточное количество.

Появится уродливый текстовый редактор – убедитесь в том, что параметры в файле выглядят следующим образом:

[email protected]
mailhub=smtp.gmail.com:587
[email protected]
AuthPass=password
UseTLS=YES
UseSTARTTLS=YES
rewriteDomain=your-domain.com

Сохраните файл и закройте его.

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

$ echo test | ssmtp [email protected]

Это приведет к отправке тестового письма, в котором будет содержаться только одно слово «Test».

Заключение

Теперь у вас есть свой собственный VPS-сервер, который содержит в себе все основные компоненты, требуемые нам для установки WordPress. Установку WP на этот сервер мы раскроем в следующих статьях. В настоящее время сервер не несет в себе никакой ценности, однако он понадобится нам для следующих руководств.

Блог про WordPress
Комментарии: 22
  1. Денис

    Полезно. Подобного нигде не видел. Спасибо, автор!

  2. AlexD

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

    1. ram108

      У меня на DigitalOcean 512mb на одном дроплете несколько wordpress сайтов. Одновременное посещение одного из их более 100 человек. И все работает.

      1. Дмитрий (автор)

        Вот я тоже не совсем понял, почему он будет держать нагрузку только 30 посетителей онлайн. Хочется детальной информации.

  3. petrozavodsky

    мне нравится рецепт с использованием nginx, вот только про одно не написали про конфиг, а это почти самая интересная часть

  4. Максим

    FTP то совсем необязателен для работы с wp. Какая вообще wp разница каким образом файлы на сервер закачиваются?

  5. AlexD

    С настройками по умолчанию nginx & mysql выдерживает 30-40 онлайн залогиченных пользователей, а дальше тормоза или падения.

  6. AlexD

    А php-fm используете?

  7. Виктор

    Дмитрий Алёшин, спасибо за перевод. Наконец-то стоящее, подробное руководство на русском, как для новичка поднять LEMP на VPS.

    Есть такой вопрос к Вам.

    Что скажете про EasyEngine?
    https://rtcamp.com/easyengine/

    Я его немного поизучал, и пришел к выводу что это очень даже хорошая штука для новичков. Хороша она тем, что позволяет на чистом VPS при помощи двух строчек:
    wget -qO ee rt.cx/ee && sudo bash ee
    ee site create example.com —wp

    Запустить свой wordpress сайт на Nginix, Percona. И это не просто автоLEMP. Автоматом настраивается важные плюшки на сервере — оптимизация и безопасность.

    1. Дмитрий (автор)

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

  8. Евгений

    Спасибо, настроил! Теперь все работает.

  9. Василий

    Здравствуйте, я прям совсем новичок, но с горем пополам разобрался. Заходил через root с помощью Putty, но почему-то ни одна команда не срабатывала. В итоге попробовал через консоль на хостинге, но сразу с установки nginx, после чего удивился как всё попёрло. Скажите пожалуйста, возможно ли теперь как-то настроить пользователя и провести настройки по безопасности после всей установки? И еще не получилось smtp настроить, возможно ли также вернуться к этому вопосу после установки вордпреса? А вообще спасибо огромное за статью! Очень полезная!

    1. Дмитрий (автор)

      Можно всегда создать юзера с правами root. Надо будет задать пароль и имя пользователя.

      useradd -ou 0 -g 0 imya
      passwd imya

      smpt можно будет потом настроить.

  10. Василий

    Спасибо большое за столь быстрый ответ. Я от нетерпения решил попробовать поставить вордпресс в root, зря наверное да? Кроме того ошибка при перезапуске nginx «failed to start a high performance web server and a reverse proxy server». И может быть на всякий случай скажите, возможно ли как-то откатить все установки и изменения на сервере и сделать всё заново шаг за шагом?

    1. Дмитрий (автор)

      http://catethysis.ru/nginx-full-reinstall/

      Переставляете Nginx, и дальше по накатанной.

  11. Василий

    Сделал PasswordAuthentication no, но теперь ни через фтп зайти не могу, ни через PuTTy, ни через консоль на хостинге (просил логин и пароль), что делать? и почему так, ключ не применился? Делал через: ssh-copy-id -i «путь-к-ключу» «логин@сервер»

  12. Дмитрий (автор)

    service ssh restart делали?

  13. Василий

    ага

    1. Дмитрий (автор)

      Попробуйте задать PermitRootLogin without-password в /etc/ssh/sshd_config

  14. Василий

    Решил не отключать вход по паролю и довел таки дело до конца, возможно в предыдущие разы не мог так как одна NS-запись у домена была неверной. Спасибо вам большое за эти 2 статьи и за подсказки! Без вас бы не знаю что делал! Скажите, что если мне после всей проделанной работы отключить таки вход по паролю и не сработают настройки, всё накроется? Или будет работать но я не смогу больше зайти в консоль и на ftp и не смогу устанавливать плагины? И есть пара моментов при настройке: 1) Я устанавливал php7.2 и строка получилась такой: fastcgi_pass unix:/var/run/php/php5-fpm.sock; 2) Теперь при установке/удалении плагинов каждый раз запрашивает хост логин и пароль от ftp — это можно как-то отключить, чтоб один раз ввёл и всё?

    1. Дмитрий (автор)

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

      А по второму вопросу ответ такой:

      sudo chown -R www-data wordpress/

      Здесь www-data — это ваш apache юзер, а wordpress/ — каталог с WordPress.

      Вот тут можете посмотреть подробнее: https://wordpress.stackexchange.com/questions/48/how-can-i-stop-wordpress-from-prompting-me-to-enter-ftp-information-when-doing-u

  15. Василий

    Спасибо большое!

Добавить комментарий

Получать новые комментарии по электронной почте.