В этой статье будет описана простая установка WordPress на Ubuntu 20.04, установленную на ранее зарегистрированном бесплатном VPS — сервере от Oracle. (Операционная система на базе ядра Linux может быть и любая другая, например Debian или Kali Linux. А в качестве сервера может выступать любая «домашняя железяка», например неттоп или старый ноутбук/ПК).
Предпосылкой написания этой статьи стало то, что некоторое время назад я начал серию публикация на Pikabu посвящённую тематике умного дома. Со временем некоторые статьи стали содержать код (команды Linux, YML-файлы…), который в публикациях, на фактически развлекательном ресурсе, не имеет нужной разметки и особенно важной в yaml-файлах — табуляции.
Поэтому решил себе завести блог для таких публикаций… Ну, а в этой статье поделюсь, как это можно сделать легко и непринуждённо на своём примере. )))
Почему не стоит спешить заводить блог на WordPress.com?
Почему я просто не завёл блог на WordPress.com, а решил установить WordPress на Ubuntu на своём бесплатном сервере:
- нельзя использовать свои темы (шаблоны) для сайтов без тарифа Bussines (1 499 рублей в месяц);
- дизайн бесплатных шаблонов сильно ограничен, а в Personal и Premium (250 и 550 рублей в месяц) очень убогие шаблоны, без возможности гибкой настройки;
- в бесплатной версии не нашёл возможность использовать сервисы аналитики Гугл и Яндекс, а так же инструменты SEO;
- плагины (даже простые) в бесплатной версии не подключить;
Перечислять можно и дальше, но суть проста — практически за каждую простую услугу там нужно платить.
Веб-сайт на LAMP- или LEMP-стеке
Традиционно для самостоятельной установки WordPress (и развёртывания других веб-приложений и динамических сайтов) используются популярные наборы компонентов LAMP (Linux, Apache HTTP Server, MySQL, PHP) и его вариация LEMP. (в которой веб-сервер Apache заменяется на Nginx).
В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.
Но я выбрал альтернативный и по моему мнению наиболее простой способ установки, немного отличающийся от традиционных — установка WordPress с помощью Docker Compose и LinuxServer SWAG.
Установка WordPress на Ubuntu / Debian при помощи SWAG в Docker
SWAG — Secure Web Application Gateway (ранее известный как letsencrypt, не имеющий отношения к Let’s Encrypt ™) настраивает веб-сервер Nginx и обратный прокси-сервер с поддержкой php и встроенным клиентом certbot, который автоматизирует процессы генерации и обновления бесплатных сертификатов SSL-сервера (Let’s Encrypt и ZeroSSL). Он также содержит fail2ban для предотвращения вторжений.
Преимущества данного способа для меня были очевидны и состоят из нескольких ключевых пунктов:
- Простота. Фактически мы разворачиваем готовый контейнер «в пару кликов» и сайт на WordPress у нас готов,. Перед этим буквально небольшая подготовка системы Lunux (Ubuntu / Debian) в плане установки Docker, Docker Compose и Portainer
- Установка WordPress на Ubuntu / Debian с HTTPS. Здесь у нас готовый автоматический процесс генерации и обновления бесплатных сертификатов SSL-сервера.
- Бесплатный бэкап WordPress. Можно использовать для этого плагины WordPress, но в Jetpack от WordPress — эта функция платная. «UpdraftPlus — Backup/Restore» в бесплатной версии позволяет делать это только вручную. Есть ещё много разных плагинов для бэкапа, например BackupBuddy…, но здесь же я в дальнейшем автоматизирую этот процесс средствами Linux, docker — rsync и/или rclone.
- Возможна установка двух, трёх…. WordPress сайтов в один контейнер на одном сервере.
Подготовка операционной системы и домена к установке WordPress.
Итак, у вас должна быть предварительно подготовлено:
- Установлена операционная система Linux (Ubuntu, Debian или другая);
- Установлен Docker, Docker Compose и Portainer;
- Опционально есть доменное имя для вашего блога. Если ещё нет, то в качестве альтернативы для теста можете бесплатно создать домен на duckdns.org. Нам это нужно будет для того, что бы входить на сайт не по IP адресу, и получить сертификат для HTTPS.
В дальнейшем вы сможете зарегистрировать и привязать свой полноценный домен второго уровня для своего сайта или блога в сервисе регистрации доменов, например у российского регистратора доменных имен — REG.RU (Мой промо-код ECA7-B285-57FC-20C2 даёт скидку 5% на заказ домена).
Переходим к установке WordPress на Ubuntu с помощью Docker Compose
Далее будем использовать docker-compose для создания и запуска своих образов и контейнеров, а именно LinuxServer / SWAG и WordPress. Вот содержание docker-compose.yml для этого:
version: '3.3'
services:
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Samara
- URL=ВашДомен.duckdns.org # change for your domain
- VALIDATION=http
- EMAIL=mail@mail.ru # optional
- EXTRA_DOMAINS=ВашДомен.duckdns.org # change for your domain
volumes:
- ./config:/config
ports:
- 443:443
- 80:80
restart: unless-stopped
db_pikabu: # change name for every new site wordpress
image: mysql:5.7
container_name: db_pikabu # change name for every new site wordpress
restart: always
ports:
- 3315:3306 # change port for every new site wordpress
volumes:
- ./config/www/pikabu/mysql:/var/lib/mysql # change directory for every new site wordpress
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: Pikabu1234 # change this password for you
wordpress_pikabu: # change name for every new site wordpress
image: wordpress:latest
container_name: wordpress_pikabu # change name for every new site wordpress
restart: always
ports:
- 7000:80 # change port for every new site wordpress
volumes:
- ./config/www/pikabu/config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini # change directory for every new site wordpress
- ./config/www/pikabu/wordpress:/var/www/html # change directory for every new site wordpress
environment:
WORDPRESS_DB_HOST: db_pikabu # change optional
WORDPRESS_DB_NAME: wordpress # change optional
WORDPRESS_DB_USER: root # change optional
WORDPRESS_DB_PASSWORD: Pikabu1234 # change this password for you
depends_on:
- db_pikabu # change name for every new site wordpress
ВАЖНО СОБЛЮДАТЬ ТАБУЛЯЦИЮ (ОТСТУПЫ)!!! (при копировании текста в ваш docker-compose.yml)
Если вы читаете этот пост на Пикабу или Яндекс Дзен, которые не поддерживают «форматирование текста с отступами», то для удобного копирования форматированного текста, когда приступите непосредственно к установке WopdPress можете перейти на эту страницу, где код отформатирован с отступами.
Где стоит хэштег «# change ….» — укажите свои данные !
Итак, создаём файл docker-compose.yml в удобном для вас месте и удобным для вас способом. Я покажу пример для Ubuntu 20.04 на VPS Oracle, где у меня стоит тестовая Home Аssistant Supervised (конечно же это полная аналогия и для других вариантов).
Создам его по пути /home/ubuntu
# echo "version: '3.3'
services:" >/home/ubuntu/docker-compose.yml
Вы можете командой echo сразу отправить весь текст (содержание файла выше), либо открыть файл командой nano и вставить содержимое:
# sudo nano /home/ubuntu/docker-compose.yml
После этого сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.
Либо, всё то же самое можно сделать через WinSCP
Для создания и редактирования таких файлов рекомендую использовать Notepad++ вместо «блокнота»:
После создания и сохранения файла, переходим в терминале в папку, где у нас лежит docker-compose.yml командой # cd (в Ubuntu 20.04 на VPS Oracle мы по умолчанию находимся в ней) и запускаем контейнеры:
# docker-compose up -d
Если будет ошибка: «docker.errors.DockerException: Error while fetching server API version: (‘Connection aborted.’, PermissionError(13, ‘Permission denied’))«, то возможно вы просто забыли добавить «своего пользователя» в группу докеров на этом этапе.
# sudo usermod -aG docker $USER
# newgrp docker
Если вы ставили Ubuntu 20.04 на бесплатный VPS сервер от Oracle, то необходимо открыть порт 80 и 443 в Oracle. Как это сделать написано в конце этого поста.
Для «домашней» Ubuntu или Debian на сервере или десктопе тоже нужно открыть порты 80 и 443 для Let’s Encrypt, пробросив их на вашу машину в роутере (см. инструкцию к нему)
После этого проверяем в Portainer, что контейнеры swag, wordpress_pikabu и db_pikabu успешно запустились:
Осталось настроить Nginx (Добавить HTTPS для WordPress)
Открываем (для редактирования, удобным вам способом) файл с настройками Nginx — default.
(В папке, где у вас был файл docker-compose.yml — появилась папка config)
В моём примере файл default расположен по пути /home/ubuntu/config/nginx/site-confs
# sudo nano /home/ubuntu/config/nginx/site-confs/default
ALT+T — очищаем всё содержимое файла default, и вставляем следующее:
# redirect all traffic to https
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
# main server block for site 1
server {
listen 443 ssl;
#listen [::]:443 ssl;
root /config/www/pikabu/wordpress; # change directory for every new site
index index.html index.htm index.php;
server_name ВашДомен.duckdns.org; # change for your domain
# enable subfolder method reverse proxy confs
include /config/nginx/proxy-confs/*.subfolder.conf;
# all ssl related config moved to ssl.conf
include /config/nginx/ssl.conf;
client_max_body_size 128m; # change opcional, default 0
location / {
try_files $uri $uri/ /index.html /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
После этого сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.
Где стоит хэштег «# change ….» — укажите свои данные !
ВашДомен.duckdns.org и директорию /config/www/pikabu/wordpress, где вместо pikabu указываете папку в которой создали wordpress на предыдущем этапе.
Перезапускаем в Portainer контейнер swag
После этого заходим в браузере на свой почти созданный сайт по адресу HTTPS://ВашДомен, где у вас должно появится окно «пятиминутной установки WordPress». Выбираем язык:
Заполняем поля для своего сайта:
Если появится такая ошибка, то просто перезапустите в Portainer контейнеры wordpress и db
У С Ё готово! )))
Простая установка WordPress на Ubuntu c HTTPS (SSL) с помощью Docker Compose и SWAG — завершена успешно.
Входим со своими учётными данными и настаиваем свой сайт на wordpress как вам угодно… А пока на главной странице сайта вас встретит вот такая страничка, с вашим названием сайта конечно же)))
Я же по прежнему буду вести тему «умного дома» в своём профиле на Пикабу, а вот если нужно будет показать какой-либо форматированный код (команды Linux, YML-файлы…), буду публиковать его на своём блоге — https://huny.blog ))) И если вдруг «страшные рассказы» о том, как Oracle нарушает условия Always Free и всех «банит» через 30 дней использования сервиса, написанные в комментариях под статьёй на Пикабу «Регистрируем бесплатный (Always Free) VPS — сервер от Oracle навсегда, для сервисов Умного дома или чего-то другого…» коснуться и меня, то блог из бэкапа перенесу на домашний сервер, а на Пикабу запилю пост об этом. Пока у меня всё работает, как часы )))
На этом у меня на сегодня — Ф С Ё !!! )))
Доброго времени суток. Давно уже воюю с wordpress’ом. Есть VPS Oracle выступающий в роли проксирования на домашний сервак, в котором крутятся разные контейнеры, homeassistant, Bitwarden и, собствено, wordpress. С редиректами на первые два никаких проблем нет, выдал certbot’ом SSL серты, https грузится. Но с wordpress всё совсем не так, страничка вроде и грузится, но загружается некорректно, php не подхватывает как будто https://prnt.sc/10r7mxq
Конфиг в nginx https://prnt.sc/10r7oiw
Буду крайне благодарен, если что посоветуете 🙂
Доброго времени суток. У меня нет большого опыта работы с Nginx. Эта статья является результатом успешной установки WordPress на VPS Oracle, фактически с первого раза. Поэтому сразу и записал его в виде статьи, как «шпаргалку» для себя на будущее, а заодно и поделился 🙂 Поэтому явных рекомендация я дать не могу, но в конфиге в Nginx у вас я не увидел настройки Nginx — «FastCGI Cache для сокращения времени отклика сервера WordPress». Возможно в этом причина и вам стоит покопать в этом направлении, но это не точно 😉
P/S (это не по вашему вопросу, а для дальнейшей работы): client_max_body_size 0 измените на client_max_body_size 128m — это позволит вам в дальнейшем загружать файлы в WordPress более 2 мегабайт. И соответствующие строки нужно прописать в фале php.ini:
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300