WordPress — простой, популярный, открытый и бесплатный движок (CMS) для создания современных сайтов. Сегодня WordPress поддерживает почти половину существующих в мире сайтов.
Однако одной лишь системы управления контентом недостаточно. Современные сайты должны иметь SSL-сертификат, который обеспечивает шифрование и позволяет использовать защищенный HTTPS-протокол.
В этом коротком руководстве будет показано, как установить WordPress на выделенный (или облачный) сервер, выполнить первичную конфигурацию CMS, а также подключить к готовому сайту SSL-сертификат, который позволит пользователям получать веб-страницы через HTTPS-соединение.
В свою очередь, пользовательские запросы будут приниматься веб-сервером Nginx, а далее проксироваться на WordPress для обработки и генерации ответного контента.
Еще пара компонентов — база данных MySQL, которая является основным способом хранения данных в WordPress, а также PHP, на котором написана WordPress.
Такой технологический стек называется LEMP — Linux, Nginx, MySQL, PHP.
Примеры, показанные в этом руководстве, выполнялись на виртуальном сервере с установленной операционной системой Ubuntu 22.04.
Чтобы создать облачный сервер, необходимо:
Перейти в панель управления, авторизовавшись в Timeweb Cloud.
Выбрать вкладку Облачные серверы в левой части панели управления Timeweb Cloud.
Нажать на кнопку Добавить.
После этого этого вы окажетесь на странице создания облачного сервера.
Здесь нам предстоить настроить ряд параметров, которые в итоге определяют арендную плату за сервер. Самые важные из них:
Дистрибутив операционной системы и его версия (в нашем случае Ubuntu 22.04)
Локация дата-центра
Физическая конфигурация
Информация о сервере
После заполнения всех данных жмем на кнопку Заказать, на которой будет указана стоимость аренды.
После этого мы окажемся в панели управления сервером.
После завершения создания сервера во вкладке Дашборд можно увидеть IP-адрес облачного сервера, а также скопировать команду для подключения к серверу по SSH и root-пароль:
Далее нужно открыть консольный терминал в вашей локальной операционной системе и выполнить подключение по SSH с авторизацией по паролю:
ssh root@SERVER_ADDRESS
При этом SERVER_ADDRESS
нужно заменить на IP-адрес вашего облачного сервера Timeweb Cloud.
После этого в консоли появится предложение ввести пароль. Можно либо ввести вручную, либо вставить из буфера обмена.
После подключения в терминале появится информация об операционной системе. Поэтому можно заранее очистить консоль, чтобы с ней было удобнее работать:
clear
Перед началом установки важно обновить список репозиториев, доступных через пакетных менеджер APT:
sudo apt update -y
Также имеет смысл обновить уже установленные в системе пакеты до последней версии:
sudo apt upgrade -y
Теперь можно перейти непосредственно к загрузке и установке компонентов технологического стека, необходимого для запуска и работы WordPress.
vds
В самом начале лучше выполнить самую простую операцию — загрузку и установку интерпретатора PHP.
Для этого сперва добавим специальный репозиторий, который предоставляет актуальные версии PHP:
sudo add-apt-repository ppa:ondrej/php
В этом руководстве используется версия PHP 8.3 в режиме FPM (FastCGI Process Manager), а также дополнительный модуль для взаимодействия PHP с MySQL:
sudo apt install php8.3-fpm php-mysql -y
Флаг -y
необходим для автоматического ответа «yes» на все возникающие в процессе установки вопросы.
Чтобы убедиться, что PHP действительно теперь есть в системе, можно запросить его версию:
php -v
В случае успешной установки в консоли появится примерно такой вывод:
PHP 8.3.2-1+ubuntu22.04.1+deb.sury.org+1 (cli) (built: Jan 20 2024 14:16:40) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.2, Copyright (c) Zend Technologies
with Zend OPcache v8.3.2-1+ubuntu22.04.1+deb.sury.org+1, Copyright (c), by Zend Technologies
Также можно проверить статус FPM-службы:
sudo systemctl status php8.3-fpm
В консольном выводе должен отображаться зеленый параметр статуса:
Active: active (running)
База данных MySQL — обязательный компонент движка WordPress. Всю информацию о сайте и пользователях CMS хранит именно там.
Мы установим пакет сервера MySQL:
sudo apt install mysql-server -y
Убедиться в корректности установки можно, запросив версию базы данных:
mysql --version
Есть все прошло успешно, в консольном терминале появится примерно такой вывод:
mysql Ver 8.0.36-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
Обратите внимание, что в этом руководстве использовалась версия MySQL 8.0.36.
Также убедитесь, что сервер MySQL в данным момент запущен. Для этого достаточно запросить статус службы базы данных:
sudo systemctl status mysql
В консольном выводе должен отображаться зеленый параметр статуса:
Active: active (running)
В этом руководстве этот шаг является необязательным, однако его стоит упомянуть.
После установки MySQL можно выполнить настройку безопасности базы данных.
mysql_secure_installation
После этого в терминале консоли нужно будет ответить на ряд вопросов, которые конфигурируют необходимый уровень безопасности MySQL.
Далее нужно подготовить отдельную базу данных специально для WordPress.
Для этого сперва войдем в MySQL:
mysql
А потом выполним соответствующий SQL-запрос для создания БД:
CREATE DATABASE wordpress_database;
Также потребуется отдельный пользователь для доступа к созданной базе данных:
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'wordpress_password';
И разрешение на этот самый доступ:
GRANT ALL PRIVILEGES ON wordpress_database.* TO 'wordpress_user'@'localhost';
Теперь можно выйти из MySQL:
quit
Веб-сервер Nginx будет принимать пользовательские HTTP-запросы и проксировать их на PHP через интерфейс FastCGI.
Веб-сервер Nginx мы загрузим и установим через APT:
sudo apt install nginx -y
Далее имеет смысл убедиться, точно ли Nginx запущен как служба:
systemctl status nginx
В консольном выводе должен фигурировать параметр статуса зеленого цвета:
Active: active (running)
Также вы можете убедиться в корректности работы веб-сервера, сделав HTTP-запрос через браузер. Для этого вам нужно указать в адресной строке IP-адрес удаленного сервера, на который вы выполняете установку.
Например, адрес может быть таким:
http://90.156.208.243
Если все в порядке, то Nginx отдаст стандартную страницу с приветствием.
HTTP-запрос выполнялся через браузер Google Chrome с операционной системы Windows 10.
Nginx можно вручную останавливать:
sudo systemctl stop nginx
Nginx можно вручную запускать:
sudo systemctl start nginx
Nginx можно вручную перезапускать:
sudo systemctl restart nginx
Каждый раз, когда в конфигурационный файл веб-сервера, Nginx необходимо вручную перезагружать (не перезапускать):
sudo systemctl reload nginx
Также на всякий случай добавим Nginx в список автозапуска (хотя обычно при установке это происходит автоматически) при старте системы:
sudo systemctl enable nginx
Если требуется отключить автоматический запуск Nginx при старте системы, вы можете удалить его из списка автозапуска:
sudo systemctl disable nginx
По сути, это основные команды управления Nginx. Теперь можно внести изменения в конфигурацию веб-сервера.
В нашем примере мы слегка отредактируем стандартную конфигурацию Nginx:
sudo nano /etc/nginx/sites-enabled/default
На самом деле, если из нее убрать всю «воду», размещенную в комментариях, то останется только это:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
К этой конфигурации нужно лишь добавить функцию проксирования запросов на PHP через FastCGI:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# добавили index.php
index index.html index.htm index.nginx-debian.html index.php;
# для дальнейшего получения SSL-сертификата нужно указать доменное имя
server_name domain.ru www.domain.ru;
location / {
# try_files $uri $uri/ =404;
# передаем root-запросы на /index.php
try_files $uri $uri/ /index.php?$args;
}
# передаем все .php-запросы в PHP через интерфейс FastCGI
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
Обратите внимание, что параметр
server_name
должен содержать имя того домена, DNS-настройки которого имеют A-запись, направляющую на конфигурируемый сервер с 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 reload nginx
Результат браузерного вывода пока что прежний — будет открываться стандартное приветствие веб-сервера. Однако после установки WordPress это изменится.
Для получения SSL-сертификата от Let’s Encrypt используется специальная утилита — Certbot.
В этом руководстве Certbot автоматически выполнит несколько задач:
Сделает запрос на получения сертификата.
Создаст дополнительный конфигурационный файл Nginx.
Отредактирует уже существующий конфигурационный файл Nginx (тот, который описывает работающий HTTP-сервер).
Перезапустит Nginx, чтобы применить изменения.
Как и любые другие пакеты, Certbot устанавливает через APT:
sudo apt install certbot
sudo apt install python3-certbot-nginx
Первый пакет устанавливает саму программу, а второй добавляет модуль на Python для работы с Nginx.
На самом деле можно выполнить только команду установки python3-certbot-nginx
, а certbot
установится автоматически в качестве зависимости:
sudo apt install python3-certbot-nginx -y
Теперь начнем процесс получение и установку SSL-сертификата.
sudo certbot --nginx
Сперва Certbot попросит вас зарегистрироваться в Let’s Encrypt. Нужно будет ввести email-адрес, принять «Условия соглашения» и указать необходимость получения новостных рассылок (это можно отклонить).
Далее нужно будет ввести список доменных имен, разделенных запятой или пробелом, для которых необходим выпуск сертификата. Указываются именно те доменные имена, которые прописаны в конфигурационном файле Nginx в директиве server_name
:
domain.ru
www.domain.ru
После выдачи сертификата Certbot автоматически установит его, добавив в файл конфигурации Nginx следующий текст:
...
listen 443 ssl; # managed by Certbot
# RSA certificate
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
...
Таким образом, полный файл конфигурации Nginx примет следующий вид:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl; # managed by Certbot
# RSA certificate
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
root /var/www/html;
index index.html index.htm index.nginx-debian.html index.php;
server_name domain.com www.domain.com;
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
location / {
# try_files $uri $uri/ =404;
# передаем root-запросы на /index.php
try_files $uri $uri/ /index.php?$args;
}
# передаем все .php-запросы в PHP через интерфейс FastCGI
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
Срок действия сертификатов Let's Encrypt истекает каждые 90 дней. Поэтому их нужно регулярно обновлять. Делать вручную это неудобно, поэтому лучше настроить автоматическую задачу.
Для справки, Crontab в системах Unix — это таблица с расписанием запуска приложений, описанная специальным синтаксисом.
Сперва откроем существующий файл Crontab:
crontab -e
При открытии Crontab может предложить вам выбрать текстовый редактор, через который будет происходить редактирование. В этом руководстве используется Nano.
В файл добавим команду для запуска Certbot с указанием периодичности ее выполнения:
0 12 * * * /usr/bin/certbot renew --quiet
В такой конфигурации команда будет выполняться в полдень каждого дня, проверяя срок сертификата и продлевая его в случае истечения. Флаг --quiet
предписывает Certbot не генерировать выходные данные.
В этом руководстве используется WordPress версии 6.4.3, которая загружается с официального сайта:
wget https://wordpress.org/wordpress-6.4.3.tar.gz
После загрузки архив с CMS нужно распаковать:
tar -xvf wordpress-*.tar.gz
После распаковки архив можно удалить:
rm wordpress-*.tar.gz
По итогу появится папка wordpress
, внутри которой будет множество файлов движка.
Большая часть исходников распределена по каталогам wp-content
, wp-includes
, wp-admin
. Также обратите внимание на «точку входа» («entry point») в WordPress — index.php
.
Все эти файлы должны быть скопированы в рабочую папку веб-сервера, из которой он будет возвращать сгенерированный (с помощью PHP) контент на основе HTTP-запросов пользователей.
При этом перед копированием мы очистим эту папку. На данный момент в ней лежит HTML-файл со стандартным приветствием Nginx — он нам больше не нужен:
rm /var/www/html/*
Теперь копируем туда исходники WordPress:
cp -R wordpress/* /var/www/html/
Флаг -R
указывает на рекурсивный тип копирования файлов и каталогов.
Также нужно установить права доступа и группу www-data
к каталогу /var/www/html/
— таким образом файлы внутри этой директории станут доступны Nginx для обработки. Если этого не сделать, то во время установки WordPress не сможет модифицировать собственные файлы и будет просить сделать изменения вручную:
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
Взаимодействие с WordPress происходит через интуитивно понятный графический интерфейс панели управления.
Для этого не требуются какие-либо знания языков программирования (JavaScript, PHP, HTML, CSS), хотя их понимание будет очевидным преимуществом — вы сможете редактировать или создавать с нуля темы и плагины, являющиеся основными компонентами WordPress.
Соответственно, настройка CMS будет выполняться через панель управления. Чтобы в нее попасть, нужно зайти на рабочий сайт через браузер по тому домену, который мы указали в конфигурации Nginx.
Например, адрес может быть таким:
https://domain.ru
В этом случае, если установка всех компонентов прошла успешно, вас перекинет на страницу первичной конфигурации WordPress:
https://domain.ru/wp-admin/setup-config.php
Сначала появится экран выбора языка. Выделяем необходимый и жмем на кнопку Continue.
После этого WordPress покажет небольшое описание будущих этапов конфигурации и список данных, который потребуется CMS для настройки.
На этом экране нужно просто нажать кнопку Let’s go!, после чего вас перекинет на страницу заполнения информации о базе данных MySQL.
Потребуется ввести следующие параметры:
Имя базы данных (в нашем примере это wordpress_database
)
Имя пользователя базы данных (в нашем примере это wordpress_user
)
Пароль пользователя базы данных (в нашем примере это wordpress_password
)
Адрес базы данных (оставляем localhost
)
Префикс таблицы (оставляем wp_
)
Далее жмем кнопку Submit.
Если данные введены верно, появится сообщение о том, что WordPress получил доступ к БД.
Внизу будет кнопка Run the installation — жмем на нее, после чего WordPress выведет страницу для заполнения информации о сайте и администраторе:
Название сайта
Имя пользователя
Пароль
Запрет на индексацию сайта поисковыми системами
После заполнения данных жмем на кнопку Install Wordpress.
После этого WordPress предложить авторизоваться на сайте. Вводим ранее указанные имя пользователя и пароль и оказываемся в панели управления сайтом.
На главной странице находятся настраиваемые информационные доски, а слева расположено основное меню, через которое редактируются основные «сущности» движка WordPress — посты, страницы, комментарии, медиа-файлы, темы, плагины, пользователи и т.д.
Запустите свой проект на VDS/VPS<br>в Timeweb Cloud
В этом руководстве было показано, как установить WordPress со всеми его зависимостями, а также подключить к уже работающему сайту домен и SSL-сертификат от Let’s Encrypt, позволяющий устанавливать HTTPS-соединение с удаленным сервером.
При этом в число зависимостей, необходимый для работы WordPress, входит:
Язык скриптовых сценариев PHP, на котором написана WordPress.
База данных MySQL, которую использует WordPress для хранения информации о контенте и пользователях.
Веб-сервер Nginx (в других реализация обычно используется Apache), первично обрабатывающий пользовательские запросы.
Более подробную информацию о том, как управлять контентом сайта через панель управления WordPress, а также создавать собственные темы и плагины, можно найти в официальной документации WordPress.