Настройка сервера VPS WordPress под ключ

После приобретения виртуального сервера у вас появится абсолютная свобода в использовании программного обеспечения для реализации необходимого вам функционала.

Самая распространенная причина покупки VPS – это развертывание сайта, или нескольких сайтов на одной виртуальной машине и в этой статье мы разберемся, как подготовить быстрый сервер для размещения нескольких сайтов WordPress.

Для себя я выбрал поставщика услуг ihc и это не реклама, вы можете выбрать любого хостера, на свое усмотрение.

Для себя я выбрал виртуальный сервер VDS на процессорах последнего поколения Intel Scalable Gold 2 Gen и SSD дисках NVMe

С двумя ядрами, 4 ГБ оперативной памяти и 45 Гигабайтами дискового пространства.

В качестве операционной системы я выбрал ubuntu 20.04.

В личном кабинете меняете пароль на root чтобы подключиться по протоколу ssh к терминалу сервера, еще нам потребуется IP-адрес сервера, который тоже можно получить в админке.

Для подключения к терминалу будем использовать утилиту putty

После входа в терминал сервера первым делом производим обновление пакетов.

sudo apt update

Эта команда скачает последние данные о пакетах находящихся в репозиториях и можно будет ввести следующую комаду:

sudo apt upgrade

Сервер сверит версии установленных пакетов с информацией из репозиториев и предложит обновления. Чтобы продолжить обновление нужно нажать Y и Enter.

По завершении обновлений установим Midnight Commander для удобства работы с файлами.

sudo apt install mc

В моем случае он уже установлен.

Настройка безопасного SSH-доступа

Запускаем в терминале Midnight Commander:

sudo mc

Первым делом, сменим порт ssh для доступа к серверу отредактировав файл sshdconfig

в директории /etc/ssh/

Нажав F4 на выбранном файле впервые, MC спросит, в каком редакторе мы хотим работать с текстовыми файлами, тут я выбираю 3 (mcedit)

Заменяем цифру 22 и убираем # в строке #Port 22 так

Port 22022

Клавиша F2 сохранит изменения, для выхода нажмем F10.

Порт мы меняем для того, чтобы усложнить автоматическое сканирование и подбор пароля.

Для того, чтобы дополнительно защитить сервер настроим вход по ключам.

Для генерации ключей, пишем на сервере в терминале:

ssh-keygen

Оставляем имя по умолчанию нажав Enter, и еще два раза, чтобы входить без пароля.

После этого в папке ~/.ssh появятся два файла id_rsa и id_rsa.pub, приватный и публичный ключ соответственно.

Теперь вставляем в терминал эту строку, все подтверждаем вводом «yes»

cat ~/.ssh/id_rsa.pub | ssh root@localhost"mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat » ~/.ssh/authorized_keys"

Файл id_rsa скачиваем на локальный компьютер. Для этого можно использовать утилиту WinSCP

Для того чтобы работать с приватным ключом при помощи putty необходимо конвертировать id_rsa в формат .ppk

В этом поможет утилита PuttyGen входящая в состав pytty, просто откройте файл id_rsa и сохраните его нажав на кнопку Save private key

Для завершения настройки ssh нужно вернуться к редактированию файла

/etc/ssh/sshd_config

пишем

PasswordAuthentication no

и перезагружаем службу  ssh

sudo systemctl restart ssh

Теперь следует изменить настройки подключения к серверу в putty и WinScp, изменить порт на 22022, и добавить ссылку на файл ключа.

Установка Веб-сервера nginx

Для передачи клиенту страниц сайта в большинстве случаев служат программы называемые web-сервером. Одним из наиболее быстрых Web-серверов является nginx, поэтому установим именно его.

В терминале вводим команду

sudo apt install nginx

После установки можем ввести http://IP-СЕРВЕРА и увидим приветственную страницу nginx.

Установка базы данных MariaDB

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

Установим:

sudo apt install mariadb-server

И изменим настройки безопасности:

sudo mysql_secure_installation

Это позволит установить пароль на доступ к базе данных, на все остальные вопросы можно отвечать Y.

Теперь войдем в MariaDB

sudo mariadb

Создаем базу данных  wordpress_db:

CREATE DATABASE wordpress_db;

Создаем пользователя wordpress_us с паролем password и полными правами на базу wordpress_db

GRANT ALL ON wordpress_db.* TO ‘wordpress_us@‘localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Чтобы сервер перезагрузил все таблицы привилегий используем инструкцию:

FLUSH PRIVILEGES;

Выходим из базы данных

exit

Пробуем авторизироваться в базе данных из под нового пользователя wordpress_us с паролем password

mariadb -u wordpress_us -p

Устанавливаем PHP

Для того, чтобы сервер мог динамически управлять контентом при генерации страниц мы установим PHP

sudo apt install php-fpm php-mysql

Настройка виртуального домена

По умолчанию nginx выводит пользователю содержимое папки /var/www/html

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

Для начала создадим директорию и установим привелегии(site-1 нужно заменить на ваш домен):

sudo mkdir /var/www/site-1
sudo chmod -R 755 /var/www/site-1
sudo chown -R www-data:www-data /var/www/site-1

Создадим файл конфигурации для этого сайта (site-1 нужно заменить на ваш домен)

#/etc/nginx/sites-available/site-1.conf

server { 
listen 80; 
listen [::]:80; 

root /var/www/site-1; 
index index.php index.html index.htm; 

server_name site-1 www.site-1; 

location / { 
try_files $uri $uri/ =404; 
} 

location ~ \.php$ { 
include snippets/fastcgi-php.conf; 
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; 
} 
}

Описав конфигурацию виртуального домена, необходимо его активировать создав символическую ссылку (site-1 нужно заменить на ваш домен)

sudo ln -s /etc/nginx/sites-available/site-1.conf /etc/nginx/sites-enabled/

Перезапускаем nginx чтобы применить изменения

sudo systemctl reload nginx

Осталось создать файл /var/www/site-1/index.php и добавить туда следующее содержимое

<?php
phpinfo();
?>

Если при входе на домен мы видим такую страницу, значит все настроено верно:

Что может пойти не так

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

  • пропишите в настройках сети DNS сервера Google 8.8.8.8 и 8.8.4.4 , они обновляются на много чаще, чем DNS сервера вашего провайдера.
  • сбросьте кэш днс windows в командной строке: ipconfig /flushdns
  • откройте сайт во вкладке инкогнито, либо сбросьте кэш днс в своем браузере

chrome://net-internals/#dns — для Google Chrome

browser://net-internals/#dns — для Яндекс Браузера

opera://net-internals/#dns — для Оперы

Настраиваем бесплатный SSL сертификат для сайта

Сейчас мы установим Certbot – это программа, которая автоматизирует работу с центром сертификации Let’s Encrypt , что позволяет достаточно просто получать и обновлять бесплатные сертификаты TLS/SSL.

sudo apt install certbot python3-certbot-nginx

Запускаем certbot (site-1 нужно заменить на ваш домен)

sudo certbot —nginx -d site-1 -d www.site-1

После этого вам нужно будет ответить на несколько вопросов, оставить email, решить интересны ли вам новости сервиса, нужен ли обязательный редирект на https.

Установка системы управления сайтом WordPress

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

sudo apt install curl php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
cd /tmp
curl -O https://wordpress.org/latest.tar.gz

Теперь извлекаем содержимое архива latest.tar.gz

tar xzvf latest.tar.gz

И создаем папку, чтобы wordpress мог автоматически обновляться

mkdir /tmp/wordpress/wp-content/upgrade

Перемещаем новые файлы в директорию нашего сайта, не забываем заменить site-1 на свой домен

sudo cp -a /tmp/wordpress/. /var/www/site-1

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

sudo chown -R www-data:www-data /var/www/site-1

И установим конкретные разрешения для директорий и файлов нашего сайта(site-1 меняем на домен)

sudo find /var/www/site-1/ -type d -exec chmod 750 {} \; 
sudo find /var/www/site-1/ -type f -exec chmod 640 {} \;

Если все сделано правильно, при входе на сайт появится меню настройки wordpress

Выбираем язык и заполняем форму доступа к базе данных, которую мы уже настроили до этого

На следующем этапе вводим название сайта и логин, пароль и электронную почту.

После этого вордпресс установлен и готов к работе.