Простая установка WordPress на Ubuntu / Debian c HTTPS (SSL) с помощью Docker Compose и LinuxServer SWAG.

В этой статье будет описана простая установка WordPress на Ubuntu 20.04, установленную на ранее зарегистрированном бесплатном VPS — сервере от Oracle. (Операционная система на базе ядра Linux может быть и любая другая, например Debian или Kali Linux. А в качестве сервера может выступать любая «домашняя железяка», например неттоп или старый ноутбук/ПК).

Простая установка WordPress на Ubuntu / Debian c HTTPS (SSL) с помощью Docker Compose и LinuxServer SWAG.

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

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

  1. Простота. Фактически мы разворачиваем готовый контейнер «в пару кликов» и сайт на WordPress у нас готов,. Перед этим буквально небольшая подготовка системы Lunux (Ubuntu / Debian) в плане установки Docker, Docker Compose и Portainer
  2. Установка WordPress на Ubuntu / Debian с HTTPS. Здесь у нас готовый автоматический процесс генерации и обновления бесплатных сертификатов SSL-сервера.
  3. Бесплатный бэкап WordPress. Можно использовать для этого плагины WordPress, но в Jetpack от WordPress — эта функция платная. «UpdraftPlus — Backup/Restore» в бесплатной версии позволяет делать это только вручную. Есть ещё много разных плагинов для бэкапа, например BackupBuddy…, но здесь же я в дальнейшем автоматизирую этот процесс средствами Linux, docker — rsync и/или rclone.
  4. Возможна установка двух, трёх…. WordPress сайтов в один контейнер на одном сервере.

Подготовка операционной системы и домена к установке WordPress.

Итак, у вас должна быть предварительно подготовлено:

  • Установлена операционная система Linux (Ubuntu, Debian или другая);
  • Установлен Docker, Docker Compose и Portainer;
  • Опционально есть доменное имя для вашего блога. Если ещё нет, то в качестве альтернативы для теста можете бесплатно создать домен на duckdns.org. Нам это нужно будет для того, что бы входить на сайт не по IP адресу, и получить сертификат для HTTPS.
Бесплатный домен для сайта WordPress

В дальнейшем вы сможете зарегистрировать и привязать свой полноценный домен второго уровня для своего сайта или блога в сервисе регистрации доменов, например у российского регистратора доменных имен — 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 навсегда, для сервисов Умного дома или чего-то другого…» коснуться и меня, то блог из бэкапа перенесу на домашний сервер, а на Пикабу запилю пост об этом. Пока у меня всё работает, как часы )))

На этом у меня на сегодня — Ф С Ё !!! )))

2 комментария к “Простая установка WordPress на Ubuntu / Debian c HTTPS (SSL) с помощью Docker Compose и LinuxServer SWAG.”

  1. Никита

    Доброго времени суток. Давно уже воюю с wordpress’ом. Есть VPS Oracle выступающий в роли проксирования на домашний сервак, в котором крутятся разные контейнеры, homeassistant, Bitwarden и, собствено, wordpress. С редиректами на первые два никаких проблем нет, выдал certbot’ом SSL серты, https грузится. Но с wordpress всё совсем не так, страничка вроде и грузится, но загружается некорректно, php не подхватывает как будто https://prnt.sc/10r7mxq
    Конфиг в nginx https://prnt.sc/10r7oiw
    Буду крайне благодарен, если что посоветуете 🙂

    1. Доброго времени суток. У меня нет большого опыта работы с 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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх