В прошлый раз я описал как приспособил остатки ноутбука в некий «сервер», установил на него Debian с web-сервером и ssh, а также MariaDB и phpMyAdmin. Так же попробовал установить ftp и настроить шифрование его трафика. В комментариях меня упрекали, совершенно справедливо, в использовании устаревшего протокола, полностью соглашаюсь и всем советую использовать как альтернативу sftp.

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

Все началось с провайдера, у Ростелекома получил статический ip-адрес. Процедура проходила через звонок в техподдержку и спустя сутки я стал счастливым или не очень счастливым обладателем «белой статики». Теперь пора настроить все остальное.

Регистрация доменного имени

Для начала зарегистрируюсь на reg.ru и получу доменное имя. Поехали!

После регистрации подбираю для себя доменное имя:

Покупаю его и заполняю анкету:

Готово!

Теперь нужно, чтобы это доменное имя было привязано к моему ip-адресу. Все делается очень просто в личном кабинете. Смена происходит почти моментально. Погнали:

 Проверяю с помощью простой команды:

$ ping notabene.site

Настройка Firewall

Поскольку «сервер» у меня за роутером (TP-Link TL-WR1043ND v2) под управлением OpenWRT, я воспользуюсь его firewall’ом и проброшу нужные порты. Настраивается просто: 

Логинюсь и попадаю на главную страницу: 

Перехожу в настройки Firewall:

HTTP:

HTTP
HTTP

HTTPS:

HTTPS
HTTPS

SSH/SFTP:

SSH/SFTP
SSH/SFTP

Можно проверить nmap'ом:

nmap
nmap

Нужные порты проброшены. Порт 9091 - это transmission, на него не нужно обращать внимание, они к этой статье никакого отношения не имеет и настроен отдельно. Приступаю к настройке виртуальных хостов.

Настройка виртуальных хостов

Во время инсталляции я выбрал для установки помимо ssh-сервера еще и web-сервер, а последнее значит, что уже установлен и настроен по умолчанию Apache. Теперь нужно настроить Apache так, чтобы тот направлял посетителей в созданную мной директорию, где как раз и располагаются файлы моего сайта. Можно создать и наполнить файлами сайтов сколь угодно директорий, при этом у посетителей не возникнет даже подозрений в том, что на этом же сервере «работают» другие сайты, если таковые будут настроены в будущем, к ip-адресу можно «привязать» сколь угодно доменных имен. И эта схема будет работать пока сервер сможет выдерживать нагрузку и хватит его дискового пространства. Базовая единица, описывающая отдельный сайт или домен, называется виртуальный хост. Настрою таковой для себя.

Создам, а также настрою принадлежность и права для директории, куда будут копироваться файлы сайта. Затем создам пустой файл index.html:

$ sudo mkdir -p /var/www/notabene.site

$ sudo chown -R $USER:$USER /var/www/notabene.site/

$ sudo chmod -R 755 /var/www

$ vim /var/www/notabene.site/index.html

Файл index.html будет демонстрировать, что виртуальный хост работает и у меня получилось его нормально настроить. Наполняю его примерно следующим содержанием:

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

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/notabene.site.conf

Затем исправляю его: заполняю вновь созданный файл notabene.site.conf своими данными:  

Файл до исправления:

Наполняю его следующим содержанием:

#Redirect ip -> domain

# если будут обращаться по ip 

ServerName {IP}

 RewriteEngine on

# перенаправляю на домен

 Redirect / https://notabene.site/

# почта админа сайта

 ServerAdmin admin@notabene.site

# имя сайта

 ServerName notabene.site

# псевдонимы

 ServerAlias www.notabene.site

 ServerAlias 88.147.143.237

Файл после исправления:

Теперь нужно отключить сайт по умолчанию, настройки которого хранятся в файле 000-default.conf:

$ sudo a2dissite 000-default.conf:

Затем включить мой уиртуальный хост командой:

$ sudo a2ensite notabene.site.conf

и на забыть перезапустить службу Apache:

$ sudo systemctl restart apache2:

Итак, посмотрим на результат моих действий:

Сначала попробую перейти по внутреннему ip-адресу:

Ну а теперь попробую перейти по доменному имени:

Сертификат Let’s Encrypt для Apache

Теперь хочу защитить трафик. Платить за сертификат совершенно не хочется и поэтому я выбрал Let’s Encrypt - это центр сертификации, предлагающий достаточно простой способ создания и установки БЕСПЛАТНОГО сертификата TSL/SSL, обеспечивающего шифрование HTTPS-соединения. Процесс генерирования происходит с помощью клиента Certbot. В настоящее время процесс получения и установки сертификата Let’s Encrypt для Apache полностью автоматизирован.

Что ж, устанавливаю certbot с помощью команды:

$ sudo apt install certbot python3-certbot-apache:

Запускаю процесс получения сертификата:

$ sudo certbot --apache

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

Вижу поздравления, по всей видимости все получилось: 

Проверяю:

Теперь трафик будет зашифрован. Сертификаты выдаются на 90 дней, посему лучше заранее позаботиться об автоматическом продлении сертификата. Но, как я писал ранее, в Apache, в настоящее время, этот процесс автоматизирован. Проверяю это командой:

$ sudo systemctl status certbot.timer

 Все хорошо! Проверка будет осуществляться дважды в день. Для тестирования процесса обновления запускаю "сухой прогон":

$ sudo certbot renew --dry-run

"Сухой прогон" не выдал никаких ошибок, а это не может не радовать.

Загрузка и настройка WordPress

Ну что ж, домен есть, сертификат тоже, осталось начать процесс создания сайта. Я выбрал систему управления содержимым сайта WordPress. Она свободно распространяемая с открытым исходным кодом. Согласно информации на сайте википедии, по состоянию на март 2020 года, по данным лаборатории W3Techs, более 41% всех сайтов работали под управлением WordPress, а доля рынка систем управления контентом составляла 63%. 

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

$ cd /tmp

$ sudo apt install -y wget

 и качаю в эту директорию последнюю версию WordPress:

$ wget https://ru.wordpress.org/latest-ru_RU.tar.gz

Ах да, чуть не забыл, установлю некоторые из самых популярных расширений, которые будет использовать WordPress, затем нужно не забыть перезапустить службу Apache:

$ sudo apt install -y php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-imagick

$ sudo systemctl restart apache2

После установки запускаю процесс распаковки WordPress командой:

$ tar -xzvf latest-ru_RU.tar.gz 

Копирую распакованное в ранее созданную директорию моего виртуального хоста notabene.site (хорошо бы не забыть удалить созданный мной ранее index.html командой $ rm -r /var/www/notabene.site/*), создаю директорию upgrade для дальнейшего обновления WordPress, без нее нельзя обновить его. Почему этой директории нет в архиве - для меня загадка. Далее нужно настроить принадлежность и корректные разрешения для директории:

$ cp -a /tmp/wordpress/. /var/www/notabene.site/

$ mkdir /var/www/notabene.site/wp-content/upgrade

после установки web-сервера Apache запускается под пользователем и группой www-data, нужно изменить владельца:группу для директории:

$ sudo chown -R www-data:www-data /var/www/notabene.site/

Отдельно изменяю права доступа для всех ДИРЕКТОРИЙ внутри:

$ sudo find /var/www/notabene.site/ -type d -exec chmod 750 {} \;

Отдельно изменяю права доступа для всех ФАЙЛОВ внутри:

$ sudo find /var/www/notabene.site/ -type f -exec chmod 640 {} \;

Настройка базы данных

Настало время запустить установщик WordPress, но перед этим нужно настроить базу данных. Перехожу на мой сервер http://192.168.1.111/phpmyadmin

Ввожу логин и пароль и на первой же странице создаю базу данных:

Затем создаю пользователя БД:

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

Страница снова обновится и я установкой галочки "check all" выбираю все привилегии:

Установка WordPress

На этом настройка базы данных окончена, перехожу по адресу моего будущего сайта, в моем случае это notabene.site, и запускаю процесс установки WordPress:

Ввожу свои данные:

И тут «на проблему напали»…

Ничего страшного - просто следую рекомендациям: копирую содержимое (то, что на синем фоне в маленьком окошке), создаю файл и вставляю в него содержимое из буфера:

$ sudo vim /var/www/notabene.site/wp-config.php

После этого возвращаюсь в браузер и нажимаю «Запустить установку», после ввода данных нажимаю «Установить WordPress»: 

Установка завершена!

Попробую войти в админку:

Нажимаю «Просмотрите свой сайт»:

В этой статье рассмотрены:

  • создание виртуальных хостов в linux,

  • настройка брандмауэра роутера,

  • установка, настройка и обслуживание сертификатов Let’s Encrypt,

  • развертывание системы управления контентом WordPress.

    Спасибо за внимание!

Список информационных источников:

https://ru.wikipedia.org/wiki/Виртуальный_хостинг

https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-18-04-ru

https://www.8host.com/blog/sozdanie-sertifikata-lets-encrypt-dlya-apache-v-ubuntu-20-04/

https://ru.wikipedia.org/wiki/WordPress

https://wordpress.org/support/article/how-to-install-wordpress/

https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-20-04-with-a-lamp-stack-ru

Комментарии (41)


  1. navicrstl
    15.12.2021 12:20
    +6

    Апач, вордпресс - я точно на хабре?


    1. Shaz
      15.12.2021 12:51
      +1

      https://habr.com/ru/post/69046/

      Точно точно, не переживайте, с 2009 немногое изменилось.


    1. bibliary
      15.12.2021 12:57

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


    1. mgis
      15.12.2021 14:20
      +1

      Вспомнил 2011 когда был студентом, и делал все, что выше.


  1. dimuska139
    15.12.2021 12:31
    +1

    1. Зачем Apache, когда есть Nginx? Его тем более и настраивать проще

    2. Зачем вы сервер настраиваете вручную? Если требуется сменить VPS, то опять все команды вспоминать и заново вводить? Есть же Ansible, например.


    1. nikkutuzov Автор
      15.12.2021 12:51

      Здравствуйте. На первый вопрос однозначно не отвечу. Более всего повлияло то, что при установке Debian я выбрал web-сервер и установился именно apache. На второй вопрос ответ в вопросе - мне именно вручную и интересно было настраивать.


      1. bibliary
        15.12.2021 12:57

        А что помешало Apache заменить на Nginx?


        1. nikkutuzov Автор
          15.12.2021 13:01

          Добрый день. Ничего не мешало, честное слово :) Идея однозначно хорошая, обязательно поменяю.


          1. Alexufo
            15.12.2021 13:02
            +1

            тогда уж на nginx-unit


            1. nikkutuzov Автор
              15.12.2021 13:03

              Спасибо, учту.


            1. Shaz
              15.12.2021 13:04
              -1

              А он ещё жив?

              Последний раз про него было что-то слышно лет этак 5 назад или около того. И состояние было что-то около беты.


              1. nikkutuzov Автор
                15.12.2021 13:06

                Вроде жив. На сайте последний релиз от 2 декабря сего года!


              1. Alexufo
                15.12.2021 13:09

                Он очень активно развивается. Ишьюсы на гихабе от мейтенеров рассматриваются за пол дня.


                1. Shaz
                  15.12.2021 13:13
                  -1

                  Ага, даже саппорт Java появился. Просто не следил за самим проектом на гитхабе. А запомнился он выступлением Сысоева на хайлоаде кажется, и как-то больше он не всплывал на конференциях и в обзорах. Или я не туда смотрел.


                  1. Alexufo
                    15.12.2021 13:19

                    Мне кажется они ру сегмент в принципе не рассматривают. Я недавно запросил почему нельзя добавить extension свой через конфиг юнита, если можно переопределять все в php.ini кроме этого, они сослались на ахитектуру php а потом задумались добавить поддержку. Это же круто иметь один конфиг в одном месте целого зоопарка. Правда задалбывает заливать конфиг командами, но я жду когда кто-то запилит гуй))
                    У ноды еще нет поддержки стримов ( не проверял на текущий момент) что жалко так как нельзя его для ноды поэтому юзать полноценно. А так приятная штука хостить зоопарк технологий.


                    1. Shaz
                      15.12.2021 13:26
                      -1

                      Да, заливка командами это немного странное решение.


                      1. Alexufo
                        15.12.2021 13:59

                        в платной версии как я понимаю много плюшек удобных. А так, никто не запрещает как-то автоматизировать самостоятельно.


      1. dimuska139
        15.12.2021 13:30

        мне именно вручную и интересно было настраивать

        Так Ansible - это не написание команд вместо вас. Просто будут плейбуки (yaml-файлы), запуская которые можно воспроизводить настройку сервера когда угодно. В том числе и множества серверов сразу, если такое вдруг понадобится.


        1. nikkutuzov Автор
          15.12.2021 13:37

          Пробежался по https://habr.com/ru/company/southbridge/blog/569172/. Интересно, спасибо за наводку.


          1. habrabkin
            15.12.2021 14:47

            Посмотрите наш отечественный InstantCMS — отличная замена Вордпрессу.


            1. nikkutuzov Автор
              15.12.2021 14:48

              Приветствую! Спасибо за информацию, посмотрю.


            1. dimuska139
              16.12.2021 02:37

              Для InstantCMS такое же огромное количество готовых плагинов и шаблонов?


              1. vovasik
                16.12.2021 19:07

                К чему этот совет был, если апач архаичен, то что бы ему компанию составить что-ли ?


                1. dimuska139
                  16.12.2021 19:22

                  Какой именно совет? Вы ответили на комментарий, в котором вопрос написан.


                  1. vovasik
                    16.12.2021 23:18

                    Тот что вначале ветки, плагинов и тем там конечно же мало по сравнению, понятно с чем, потому не принимаю в чем смысл пробовать эту cms. Вероятность что ещё либо в жизни вы с ней столкнетесь второй минимальна.


              1. habrabkin
                18.12.2021 04:27

                А зачем огромное количество? Что мне нужно, я в нем нашел. По работе с контентом и типами контента Вордпрес отдыхает.


    1. alpik
      15.12.2021 15:49

      Вспомнилась плейбука, которую довожу до ума когда кому-то нужно настроить сервер.

      Отдельно это делать откровенно скучно)


  1. Sano000
    15.12.2021 13:08
    -3

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


    1. t3chn0ph0b
      15.12.2021 13:16
      +5

      Я ждал этот коммент.

      Доскер теперь/всегда пихают просто везде.


      1. Vladivo
        15.12.2021 15:36

        А есть хорошие аргументы против контейнеров? Прям везде, может быть, и не нужно, но в сценарии автора, на мой взгляд, самое лучшее решение. Ещё Trafik с Portainer прикрутить и вообще всё удобненько будет. Чистая система, изолированные приложения, удобно же.


    1. Alexufo
      15.12.2021 13:23
      +2

      пишите ответную статью


    1. freakru
      15.12.2021 14:21
      +1

      И kubenetes конечно же здесь просто необходим.


      1. Alexufo
        15.12.2021 15:02

        Ну а как вы представляете без кубера освоение технологий через вордпресс? Только так и живем!)


  1. habrabkin
    15.12.2021 14:46

    Только не ^$#^#@ рег ру! Деньги дерут бешеные за то же продление домена, например!


    1. nikkutuzov Автор
      15.12.2021 14:49

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


      1. t3chn0ph0b
        15.12.2021 15:38

        Просто посмотрите стоимость продления выбранного вами .site и Вы все поймете.


        1. nikkutuzov Автор
          15.12.2021 15:56

          reg.ru - 1898

          timeweb.com - 2960

          beget.com - 1950

          rucenter(nic.ru) - 1190

          webnames.ru - 2510

          Иностранные правда не смотрел, но как-то так...


          1. habrabkin
            15.12.2021 16:41

            Я про ru и рф — в экзотику не лез.


  1. E32_735i
    15.12.2021 14:49

    докатились...


  1. pae174
    15.12.2021 18:44
    +3

    у Ростелекома получил статический ip-адрес

    У провайдера желательно затребовать настройку реверса для этого IP.

    Теперь нужно, чтобы это доменное имя было привязано к моему ip-адресу.

    Там же желательно прописать записи SPF, DKIM и DMARK.

    nikkutuzov@debian

    Машину можно сразу назвать по имени домена а не по имени операционной системы. Так периодические отчеты (если они есть) будут отправляться с нормального домена (from) а не с какой-то ерунды, которая станет причиной зарезания отчетов спамфильтрами. Но если планируется собственный локальный почтовый сервак, то отчеты лучше слать сразу локально на него - это что бы успокоить внутреннего параноика, которому не понравится идея высылать, например, аудит и версии установленного софта куда-то наружу.

    $ ping notabene.site

    Для проверки того, как всё хорошо настроилось, пинги со своей локальной машины не годятся т.к. в этом случае они не проходят только в пределах провайдерской сетки. Если у вы пингуете сами себя из своей же локалки то вы никогда не заметите какой-нибудь провайдерский фаерволл, принудительно защищающий вас от внешних врагов. Пинговать себя и проверять доступность надо снаружи.

    Порт 53 лучше бы закрыть, но это позже.

    Порт 53 на WAN порту домашнего маршрутизатора изначально выглядит очень странно.

    Настройка Firewall

    Вообще было бы хорошо поставить этот сервер в DMZ, если эта опция есть в маршрутизаторе. DMZ делает как бы два фаерволла - один защищает ваш сервер от врагов снаружи а второй защищает всю остальную вашу сетку от вашего сервера. Это делается на тот случай, если враги захватят сервер через дырки в установленном на него софте и решат использовать его в качестве пацдарма для атаки на остальные машины в локалке.

    Apache запускается под пользователем и группой www-data, нужно изменить владельца:группу для директории

    Не нужно. Если Apache является владельцем /var/www/notabene.site/ то запускаемые им скрипты могут понаписать туда что угодно. Обычно директорию приписывают какому-нибудь другому владельцу (допустим это будет webmaster), юзера Apache добавляют этому владельцу в группу а на директорию ставят 750. Таким образом владелец может делать всё, Apache может только читать но не может ничего поломать, а остальные не видят вообще ничего. Для временных файлов и всяких там закачек делается отдельная директория за пределами document_root и с правами 770.


    1. nikkutuzov Автор
      15.12.2021 19:08

      Добрый вечер, спасибо за столь развернутый комментарий. Обязательно изучу Ваши дополнения. Приятно, правда! :)

      Единственное дополнение про пинг: пинговал с мегафона(с мобилы раздал на ноутбук)