В прошлый раз я описал как приспособил остатки ноутбука в некий «сервер», установил на него 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:
HTTPS:
SSH/SFTP:
Можно проверить 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.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/
Комментарии (41)
dimuska139
15.12.2021 12:31+1Зачем Apache, когда есть Nginx? Его тем более и настраивать проще
Зачем вы сервер настраиваете вручную? Если требуется сменить VPS, то опять все команды вспоминать и заново вводить? Есть же Ansible, например.
nikkutuzov Автор
15.12.2021 12:51Здравствуйте. На первый вопрос однозначно не отвечу. Более всего повлияло то, что при установке Debian я выбрал web-сервер и установился именно apache. На второй вопрос ответ в вопросе - мне именно вручную и интересно было настраивать.
bibliary
15.12.2021 12:57А что помешало Apache заменить на Nginx?
nikkutuzov Автор
15.12.2021 13:01Добрый день. Ничего не мешало, честное слово :) Идея однозначно хорошая, обязательно поменяю.
Alexufo
15.12.2021 13:02+1тогда уж на nginx-unit
Shaz
15.12.2021 13:04-1А он ещё жив?
Последний раз про него было что-то слышно лет этак 5 назад или около того. И состояние было что-то около беты.
Alexufo
15.12.2021 13:09Он очень активно развивается. Ишьюсы на гихабе от мейтенеров рассматриваются за пол дня.
Shaz
15.12.2021 13:13-1Ага, даже саппорт Java появился. Просто не следил за самим проектом на гитхабе. А запомнился он выступлением Сысоева на хайлоаде кажется, и как-то больше он не всплывал на конференциях и в обзорах. Или я не туда смотрел.
Alexufo
15.12.2021 13:19Мне кажется они ру сегмент в принципе не рассматривают. Я недавно запросил почему нельзя добавить extension свой через конфиг юнита, если можно переопределять все в php.ini кроме этого, они сослались на ахитектуру php а потом задумались добавить поддержку. Это же круто иметь один конфиг в одном месте целого зоопарка. Правда задалбывает заливать конфиг командами, но я жду когда кто-то запилит гуй))
У ноды еще нет поддержки стримов ( не проверял на текущий момент) что жалко так как нельзя его для ноды поэтому юзать полноценно. А так приятная штука хостить зоопарк технологий.
dimuska139
15.12.2021 13:30мне именно вручную и интересно было настраивать
Так Ansible - это не написание команд вместо вас. Просто будут плейбуки (yaml-файлы), запуская которые можно воспроизводить настройку сервера когда угодно. В том числе и множества серверов сразу, если такое вдруг понадобится.
nikkutuzov Автор
15.12.2021 13:37Пробежался по https://habr.com/ru/company/southbridge/blog/569172/. Интересно, спасибо за наводку.
habrabkin
15.12.2021 14:47Посмотрите наш отечественный InstantCMS — отличная замена Вордпрессу.
dimuska139
16.12.2021 02:37Для InstantCMS такое же огромное количество готовых плагинов и шаблонов?
vovasik
16.12.2021 19:07К чему этот совет был, если апач архаичен, то что бы ему компанию составить что-ли ?
dimuska139
16.12.2021 19:22Какой именно совет? Вы ответили на комментарий, в котором вопрос написан.
vovasik
16.12.2021 23:18Тот что вначале ветки, плагинов и тем там конечно же мало по сравнению, понятно с чем, потому не принимаю в чем смысл пробовать эту cms. Вероятность что ещё либо в жизни вы с ней столкнетесь второй минимальна.
habrabkin
18.12.2021 04:27А зачем огромное количество? Что мне нужно, я в нем нашел. По работе с контентом и типами контента Вордпрес отдыхает.
alpik
15.12.2021 15:49Вспомнилась плейбука, которую довожу до ума когда кому-то нужно настроить сервер.
Отдельно это делать откровенно скучно)
Sano000
15.12.2021 13:08-3гайд как делать не надо, тем более в 2021 году. Запустить все тоже самое, только правильно можно несколькими командами и конфигами в том же докере. А так этим даже пользоваться невозможно из за не настроенных прав.
t3chn0ph0b
15.12.2021 13:16+5Я ждал этот коммент.
Доскер теперь/всегда пихают просто везде.
Vladivo
15.12.2021 15:36А есть хорошие аргументы против контейнеров? Прям везде, может быть, и не нужно, но в сценарии автора, на мой взгляд, самое лучшее решение. Ещё Trafik с Portainer прикрутить и вообще всё удобненько будет. Чистая система, изолированные приложения, удобно же.
habrabkin
15.12.2021 14:46Только не ^$#^#@ рег ру! Деньги дерут бешеные за то же продление домена, например!
nikkutuzov Автор
15.12.2021 14:49С этим скорее соглашусь, сам не сталкивался, но подобное слышал не раз.
t3chn0ph0b
15.12.2021 15:38Просто посмотрите стоимость продления выбранного вами .site и Вы все поймете.
nikkutuzov Автор
15.12.2021 15:56reg.ru - 1898
timeweb.com - 2960
beget.com - 1950
rucenter(nic.ru) - 1190
webnames.ru - 2510
Иностранные правда не смотрел, но как-то так...
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.
nikkutuzov Автор
15.12.2021 19:08Добрый вечер, спасибо за столь развернутый комментарий. Обязательно изучу Ваши дополнения. Приятно, правда! :)
Единственное дополнение про пинг: пинговал с мегафона(с мобилы раздал на ноутбук)
navicrstl
Апач, вордпресс - я точно на хабре?
Shaz
https://habr.com/ru/post/69046/
Точно точно, не переживайте, с 2009 немногое изменилось.
bibliary
ну необвешанный плагинами что вечно в дырах вордпресс еще худо-бедно как то живет, а вот пихать апач - моветон конечно же...
mgis
Вспомнил 2011 когда был студентом, и делал все, что выше.