Бесплатная миграция IT-инфраструктуры в облако

Как установить Wordpress на сервер с использованием домена и SSL от Let’s Encrypt

Миша Курушин
Миша Курушин
Технический писатель
28 февраля 2024 г.
744
14 минут чтения
Средний рейтинг статьи: 5

WordPress — простой, популярный, открытый и бесплатный движок (CMS) для создания современных сайтов. Сегодня WordPress поддерживает почти половину существующих в мире сайтов.

Однако одной лишь системы управления контентом недостаточно. Современные сайты должны иметь SSL-сертификат, который обеспечивает шифрование и позволяет использовать защищенный HTTPS-протокол.

Image3

В этом коротком руководстве будет показано, как установить WordPress на выделенный (или облачный) сервер, выполнить первичную конфигурацию CMS, а также подключить к готовому сайту SSL-сертификат, который позволит пользователям получать веб-страницы через HTTPS-соединение.

В свою очередь, пользовательские запросы будут приниматься веб-сервером Nginx, а далее проксироваться на WordPress для обработки и генерации ответного контента.

Еще пара компонентов — база данных MySQL, которая является основным способом хранения данных в WordPress, а также PHP, на котором написана WordPress.

Такой технологический стек называется LEMP — Linux, Nginx, MySQL, PHP.

1. Создание сервера

Примеры, показанные в этом руководстве, выполнялись на виртуальном сервере с установленной операционной системой Ubuntu 22.04.

Чтобы создать облачный сервер, необходимо:

  • Перейти в панель управления, авторизовавшись в Timeweb Cloud.

  • Выбрать вкладку Облачные серверы в левой части панели управления Timeweb Cloud.

  • Нажать на кнопку Добавить.

После этого этого вы окажетесь на странице создания облачного сервера.

E29fcc2c 5e69 4104 Be75 6d2b0ab79762

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

  • Дистрибутив операционной системы и его версия (в нашем случае Ubuntu 22.04)

  • Локация дата-центра

  • Физическая конфигурация

  • Информация о сервере

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

После этого мы окажемся в панели управления сервером.  

После завершения создания сервера во вкладке Дашборд можно увидеть IP-адрес облачного сервера, а также скопировать команду для подключения к серверу по SSH и root-пароль:

61a4406c B403 4bcc 8ac7 E8d1e709398a

Далее нужно открыть консольный терминал в вашей локальной операционной системе и выполнить подключение по SSH с авторизацией по паролю:

ssh root@SERVER_ADDRESS

При этом SERVER_ADDRESS нужно заменить на IP-адрес вашего облачного сервера Timeweb Cloud.

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

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

clear

2. Обновление системы

Перед началом установки важно обновить список репозиториев, доступных через пакетных менеджер APT:

sudo apt update -y

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

sudo apt upgrade -y

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

3. Установка PHP

В самом начале лучше выполнить самую простую операцию — загрузку и установку интерпретатора 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)

4. Установка MySQL

База данных 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 можно выполнить настройку безопасности базы данных.

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

5. Загрузка и конфигурация Nginx

Веб-сервер 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 отдаст стандартную страницу с приветствием.

Image12

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 это изменится.

6. Установка SSL-сертификата

Для получения 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-адрес, принять «Условия соглашения» и указать необходимость получения новостных рассылок (это можно отклонить).

Image8

Далее нужно будет ввести список доменных имен, разделенных запятой или пробелом, для которых необходим выпуск сертификата. Указываются именно те доменные имена, которые прописаны в конфигурационном файле 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 не генерировать выходные данные.

7. Загрузка WordPress

В этом руководстве используется 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, внутри которой будет множество файлов движка.

Image10

Большая часть исходников распределена по каталогам 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/

8. Конфигурация WordPress

Взаимодействие с WordPress происходит через интуитивно понятный графический интерфейс панели управления.

Для этого не требуются какие-либо знания языков программирования (JavaScript, PHP, HTML, CSS), хотя их понимание будет очевидным преимуществом — вы сможете редактировать или создавать с нуля темы и плагины, являющиеся основными компонентами WordPress.

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

Например, адрес может быть таким:

https://domain.ru

В этом случае, если установка всех компонентов прошла успешно, вас перекинет на страницу первичной конфигурации WordPress:

https://domain.ru/wp-admin/setup-config.php

Сначала появится экран выбора языка. Выделяем необходимый и жмем на кнопку Continue.

A852b6d2 D5b2 44ca B967 Ad086fdb746f

После этого WordPress покажет небольшое описание будущих этапов конфигурации и список данных, который потребуется CMS для настройки.

На этом экране нужно просто нажать кнопку Let’s go!, после чего вас перекинет на страницу заполнения информации о базе данных MySQL.

F0c170ca C77e 4978 92c3 E0c8aeebbf5d

Потребуется ввести следующие параметры:

  • Имя базы данных (в нашем примере это wordpress_database)

  • Имя пользователя базы данных (в нашем примере это wordpress_user)

  • Пароль пользователя базы данных (в нашем примере это wordpress_password)

  • Адрес базы данных (оставляем localhost)

  • Префикс таблицы (оставляем wp_)

Далее жмем кнопку Submit.

C630b1b0 F6be 441f A1c0 7e213bd5f7ea

Если данные введены верно, появится сообщение о том, что WordPress получил доступ к БД.

Внизу будет кнопка Run the installation — жмем на нее, после чего WordPress выведет страницу для заполнения информации о сайте и администраторе:

  • Название сайта

  • Имя пользователя

  • Пароль

  • Email

  • Запрет на индексацию сайта поисковыми системами

После заполнения данных жмем на кнопку Install Wordpress.

1f358d6d C03a 48ef A921 8a18a465714c

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

На главной странице находятся настраиваемые информационные доски, а слева расположено основное меню, через которое редактируются основные «сущности» движка WordPress — посты, страницы, комментарии, медиа-файлы, темы, плагины, пользователи и т.д.

Image2

Заключение

В этом руководстве было показано, как установить WordPress со всеми его зависимостями, а также подключить к уже работающему сайту домен и SSL-сертификат от Let’s Encrypt, позволяющий устанавливать HTTPS-соединение с удаленным сервером.

При этом в число зависимостей, необходимый для работы WordPress, входит:

  • Язык скриптовых сценариев PHP, на котором написана WordPress.

  • База данных MySQL, которую использует WordPress для хранения информации о контенте и пользователях.

  • Веб-сервер Nginx (в других реализация обычно используется Apache), первично обрабатывающий пользовательские запросы.

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
28 февраля 2024 г.
744
14 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев