Опыт настройки LAMP + сайт

NOTES 15.12.21 15.12.21 272
Бесплатные курсына главную сниппетов

Хочу рассказать, как я случайно получил в руки материнскую плату от ноутбука, еще пару комплектующих и решил попробовать сэкономить на хостинге и сделать некий «сервер» для моего сайта, которого еще нет :)

Вот такой device у меня получился
Вот такой device у меня получился

Для моих нужд вполне подойдет. Потребление электроэнергии смешное, охлаждение пассивное, даже батарея живая, ее хватает примерно на 4 - 5 часов работы. Сайт будет совершенно простым - это мой учебный проект.

Кратко о характеристиках:

Установка Debian 11

Для начала я скачал iso-образ Debian 11, затем скачал Rufus и создал загрузочную флешку. Описывать особенно нечего, программа интуитивно понятная: просто выбираем образ для записи, выбираем носитель, но который этот образ писать и нажимаем start.

Загрузочная флешка готова - приступим к установке. Я не стал использовать графическую установку, а выбрал пункт Install.

Первый экран - это выбор языка (я выбрал English), затем предлагается выбрать страну (мой выбор: other - Europe - Russian Federation), далее locale (United States), наконец, раскладка клавиатуры (American English). А вот после этого у меня выпало такое сообщение:

прошу прощения за качество картинки
прошу прощения за качество картинки

Сообщение говорит примерно следующее: некоторое из устройств требует не бесплатное (несвободное) микропрограммное обеспечение. Оно может быть загружено с внешнего носителя, например с флешки. В моем случае у материнской платы только два usb-порта: один занят клавиатурой, другой - флешкой, с которой устанавливается система. Но есть еще и кард-ридер!

Я нашел карту SD и, записав на нее требуемый файл (сслыка на rtl8723befw_36.bin), нажал yes. Теперь будет работать wi-fi модуль. После этого выпадает окно с выбором сетевого адаптера, который будет нами использоваться. Я выбрал wi-fi.

Тут многие скажут - СТОП, wi-fi канал уже проводного и будут правы, но я делаю не профессиональный хостинг, это просто проект для саморазвития, к тому же разве не интересно, как это будет работать после того как установщик подхватил прошивку ;) Итак, выбираю wi-fi модуль и в следующем окне вижу доступные беспроводные сети. Выбираю свою nik’s_wireless, ввожу пароль и все подключилось.

Далее задал имя хоста (debian), имя домена (lan), пароль root, полное имя пользователя (Nikolai Kutuzov), имя учетной записи (nikkutuzov), пароль учетной записи, часовой пояс.

Потом работа с разделами (Guided - use entire disk), выбор диска, на который будем устанавливать систему. Схему я выбрал рекомендуемую (All files in one partition). Нажимаю Finish partitioning and write changes to disk - заканчиваю с разметкой и записываю изменения на диск. Настраиваю менеджер пакетов (Russian Federation - proxy (если не используется прокси, оставьте строку пустой) - deb.debian.org - NO). Я почти у финиша и мне предлагают выбрать какое программное обеспечение установить, я оставил звездочки только у web server и ssh server:

На запрос об установке Grub даю положительный ответ, выбираю диск, на который его установить. На следующем экране вижу сообщение об окончании установки, нажимаю continue и после перезагрузки вижу:

Настройка Wi-Fi

Во время установки я подключился к своей wi-fi сети, но после перезагрузки подключения нет. Первым делом ЛОКАЛЬНО логинимся под root’ом и выполняем команду:

# /sbin/iwconfig

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

Ограничим права пользователей на файл для защиты ключа (pre-shared key) (PSK):

# chmod 0600 /etc/network/interfaces

Отредактируем файл:

# nano /etc/network/interfaces

«auto» подключит интерфейс wlp4s0 при запуске системы. Если этого не требуется, можно удалить или закомментировать эту строку.

для получения адреса по DHCP - используется слово dhcp:

 Для статического адреса исползуется слово static:

Меня интересуют только строки address - это будет ip-адрес этого компьютера, netmask - маска подсети, gateway - основной шлюз и dns-nameservers - ip-адрес dns-сервера (я прописал сервер от google). Далее идут wpa-ssid - это имя Вашей беспроводной сети, а wpa-psk - ее пароль. Я использую статический адрес, который указан на скриншоте. Сохраняем изменения в файле (ctrl+o), закрываем файл (ctrl+x) и перезагружаемся:

# systemctl reboot

Настройка sudo

После перезагрузки будет доступен вход через ssh, чем я и воспользуюсь. Я покажу на примере MacOS, потому что сам пользуюсь именно этой системой. Я думаю, что на остальных системах подключение по ssh не станет проблемой.

В терминале набираю ssh nikkutuzov@192.168.1.111, где nikkutuzov - имя пользователя (не root’а), а 192.168.1.111 - ip-адрес, указанный мною выше. Ввожу пароль и вуаля - я в системе. Для начала я установил sudo, чтобы не работать под root’ом. Выполняется в три команды:

$ su - чтобы переключиться на root’а и вводим пароль

# apt update - обновить список пакетов

# apt install -y sudo - устанавиваем sudo

 После установки набрал команду:

# visudo

Перехожу на строчку после root ALL=(ALL:ALL) ALL и пишу там nikkutuzov ALL=(ALL:ALL) ALL, где вместо nikkutuzov укажите имя своего пользователя.

 Сохраняю изменения в файле (ctrl+o), выхожу из nano (ctrl+x) и  переключаюсь с root на своего пользователя:

 # su nikkutuzov

Настройка FTP

Чтобы настроить FTP выполняю следующие команды. Кстати, теперь можно ощутить всю прелесть sudo. Воспользуюсь установленным ранее sudo:

$ sudo apt install vsftpd - для установки vsftpd (сслыка на Wikipedia)

$ sudo systemctl status vsftpd

active (running) - говорит, что все работает и все хорошо.

Теперь создам уникального пользователя для ftp:

$ sudo adduser ftpuser

Добавляю созданного пользователя FTP в список разрешенных пользователей для входа:

$ echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist

Создам и назначу соответствующие права доступа к каталогу и права собственности:

$ sudo mkdir -p /home/ftpuser/ftp_dir

$ sudo chmod -R 750 /home/ftpuser/ftp_dir

$ sudo chown -R ftpuser: /home/ftpuser/ftp_dir

Потребовалось еще несколько манипуляций для окончательной настройки. Для этого немного поправил файл конфигурации, предварительно установив vim:

$ sudo apt install -y vim

$ sudo vim /etc/vsftpd.conf

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

 Перезапустил службу и проверил ее статус:

Проверяю работоспособность:

Настройка mariadb

Следующим этапом была настройка базы данных. Я использую mariadb. Её установка производится простой командой:

 $ sudo apt install -y mariadb-server

После установки нужно выполнить скрипт первоначальной настройки:

$ sudo mysql_secure_installation

Вся предварительная настройка сводится к нескольким ответам:

  1. Ввести пароль root для текущей базы данных (не путать с root’ом системы!). Он пустой, поэтому просто нажимаю enter;

  2. При установке на системы Debian пользователь root MariaDB настроен для аутентификации с помощью плагина unix_socket , а не с помощью пароля. Во многих случаях это обеспечивает более высокую безопасность и удобство, однако это также может осложнить ситуацию, если вам нужно предоставить права администратора внешней программе (например, phpMyAdmin). Поэтому на предложение использовать этот плагин я ответил отрицательно, так как позже планирую поставить phpMyAdmin;

  3. На предложение установить пароль root’а нажимаю n. Дело в том, что в Debian учетная запись root для mariadb тесно связана с автоматизированным обслуживанием системы, так что мы не должны менять этот пароль. Позже я настрою дополнительную учетную запись для доступа через пароль;

  4. На вопрос об удалении анонимных пользователей отвечаю «y»;

  5. На запрет подключения под root’ом удаленно отвечаю «y»;

  6. Удалить тестовую базу данных - «y»;

  7. Наконец, сохраняем изменения, ответив на последний вопрос «y».

Теперь, как я говорил в пункте 3, настраиваю дополнительную учетную запись для входа под паролем:

$ sudo mariadb

    MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

    MariaDB [(none)]> FLUSH PRIVILEGES;

    MariaDB [(none)]> exit

Проверяю:

 $ mariadb -u admin -p

Установка и настройка php и phpMyAdmin

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

$ sudo apt install -y php libapache2-mod-php php-mysql

Потом поправить файл:

$ sudo vim /etc/apache2/mods-enabled/dir.conf

Он должен выглядеть вот так:

Записываем изменения в файле и перезапускаем apache:

Устанавливаю phpMyAdmin:

$ sudo apt install -y phpmyadmin

Во время установки откроется несколько окон настройки, делаем все как на скриншотах (пароль я установил такой же как и при настройке дополнительного пользователя mariadb):

Проверяем сначала apache, он должен был работать с самого начала без какой-либо настройки, для этого в строке браузера набираем ip-адрес нашего «сервера», в моем случае 192.168.1.111:

Работает! Проверим phpMyAdmin - 192.168.1.111/phpmyadmin:

Попробуем залогиниться:

Вся настройка прошла без проблем. Никаких нюансов мне не встретилось. Надеюсь, что у остальных, кто захочет сделать тоже самое по моему описанию, все пройдет также гладко. Далее нам нужен статический ip-адрес - его предоставляет (за отдельную плату, естественно) провайдер, доменное имя (уже лет пять как куплено, но до сего дня так и не использовал) и так как у меня «сервер» за файрволом роутера на openWRT, нужно открыть нужные порты. Это я опишу в следующей статье.

Также будет описан способ настройки виртуальных хостов, получение сертификата для будущего сайта (бесплатно!) и установка wordpress. Информации получилось много, возможно, нужно было разбить на несколько частей, но получилось как получилось.

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

https://wiki.debian.org/ru/WiFi/HowToUse

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

https://setiwik.ru/kak-ustanovit-i-nastroit-ftp-server-vsftpd-v-debian-11/

https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-debian9-ru

 


+ Сайт


В прошлый раз я описал как приспособил остатки ноутбука в некий «сервер», установил на него 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'ом:

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

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

Во время инсталляции я выбрал для установки помимо 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»: 

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

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

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

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

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

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

 

на главную сниппетов
Курсы