Установка, настройка и размещение сервера дома или в офисе

Author Автор: Роман Чернышов    Опубликовано: 1 декабря 2022

Доброго времени друзья! В этой небольшой статье-заметке, я хочу поделится кратким руководством, по установке сервера для веб-проектов в домашних условиях или в условиях офиса с типовым интернет-каналом. Такое решение может понадобиться, для тестирования и отладки веб-проектов, со специфическими техническими требованиями(например дисковое пространство в размере 20ТБ, или процессор на 32 ядрв в купе с ОЗУ на 128ГБ, и т.д.). Да что уж там, на таком домашнем сервере, вполне себе можно хостить и рабочий проект(вышедший в продакшен) — стартап, в условиях экономии ресурсов на первых этапах (выделенный сервер, одной из самых простых конфигураций, может стоить десятки тысяч рублей в месяц). И так, устанавливаем и настраиваем сервер дома или в офисе, всего за один день (или даже несколько часов)! На борту которого будет как LAMP, так и ряд дополнительного ПО. Что для этого понадобится?

Сервер

В качестве рабочего сервера, подойдет любой ПК, практически на любом железе, для примера возьмем среднюю конфигурацию по сегодняшним меркам, среднюю — по меркам серверов сдающихся в аренду. Параметры: Корпус ATX, БП 400 Ватт, CPU i7 7700, ОЗУ 8-16ГБ, HDD 1-2ТБ + SDD 256 ГБ, ИБП на 7 а/ч (хватит на 30 мин работы при отключении сети питания), любой роутер с функцией настройки проброски портов. Стоимость аналогичного готового сервера в аренду, размещаемого в ЦОД — 5т.р/месяц. Стоимость сборки такого сервера, в районе — 30т.р. Для тестовых проектов, получается — выгодное решение.

Сеть

Высокоскоростной интернет

Подключаем высокоскоростной, безлимитный интернет от доступного вам провайдера, на 100 и более Mbit. Наверняка у вас уже есть канал интернет, если его тариф имеет скромные характеристики, то как правило сейчас не составляет труда, переключить тарифный план, что называется «на лету», в личном кабинете интернет-провайдера, на более высокие параметры. При этом помним, что какая бы у вас скорость не была, на самом деле провайдер в 99% случаев периодически будет резать скорость, это зависит от загруженности(например в часы пик) общего интернет канала идущего от вашего здания, и для предоставления стабильного интернета всем абонентам работающих через этот канал, провайдер применяет технологию балансировки нагрузки.

Cтатический IP адрес

Получение статического IP адреса у вашего провайдера. Это также делается в личном кабинете, в пару кликов. На территории РФ, практически все интернет-провайдеры позволяют это сделать достаточно легко. На всё, уходит не более пяти минут.

Сетевые кабеля

Желательно использовать качественные кабеля, пачкорды витой пары, стандарта не ниже 5e, можно 6,7, для поддержки скорости 100/1000 Mbit. При покупке кабеля онлайн, желательно отдавать предпочтение брендовым.

Настройка DNS

В качестве DNS провайдера используем cloudflare.com, добавляем домен, прописываем записи типа A, MX, TXT для DKIM, DMARK, SPF.

Настройка роутера

Пробрасываем все порты служб 21, 22, 53, 80, 443, 110, 25, 115, а также 8002(BrainyCP) на ваш сервер расположенный в локальной сети.

Программная часть

На стороне провайдера

Настраиваем обратный DNS (обратная зона) прописывая PTR-записи. Используется для привязки IP‑адреса (например, 172.194.47.228) к доменному имени (например, site.ru). Наличие обратного DNS необходимо владельцам сайтов и web-серверов для прохождения спам-фильтрации и работы с некоторыми интернет-протоколами.

Снимаем блокировку с протокола SMTP (Simple Mail Transfer Protocol). Используется для передачи электронных писем через почтовые программы, установленные на компьютере (Mozilla Thunderbird, The Bat!, Microsoft Outlook и др.). По умолчанию протокол заблокирован для обеспечения вашей безопасности и борьбы со спамом. Для восстановления работы почтовых программ нажмите кнопку «Разблокировать».

Устанавливаем CentOS 7

Скачиваем ISO образ CentOS 7 Minimal

Подготавливаем загрузочную флешку с помощью программы Win32 Disk Imager

Грузимся с флешки устанавливаем ОС, без графической оболочки, указываем пароль для root

Очередность загрузки GRUB

Для настройки порядка загрузки ОС из списка GRUB, первым делом посмотрим доступные варианты загрузки командой:

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

0 : CentOS Linux (4.18.0-305.10.2.el7.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.59.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-1cbf2829e3ac4b928b6e6b1120c42b38) 7 (Core)

Затем установим загрузку по умолчанию например вариант 2 (под индексом 1 — CentOS Linux 3.10.0 …), для этого выполним команду:

grub2-set-default 1

Затем применим изменения, выполнив:

grub2-mkconfig -o /boot/grub2/grub.cfg

Теперь при загрузки системы, автоматически будет загружаться второй пункт меню.

Автозагрузка служб

Каталог расположение скриптов управления службами /usr/lib/systemd/system

Выполняем команды, включающие автозагрузку служб

systemctl enable httpd
systemctl enable nginx

Отдельно для каждого домена также включаем автозагрузку PHP-FPM

systemctl enable php56w-fpm@site1.service
systemctl enable php74w-fpm@site2.service

При старте php56w и php74w для одного домена, автоматом будет запущен PHP-FPM и для других доменов работающих с данной версией PHP.

Работа с сетевой картой

Устанавливаем комплект консольных утилит предназначенных для проверки и настройки устройств подключенных к шине PCI (Peripheral component interconnect).

yum install pciutils

Статус и режим работы сетевой карты:

ethtool enp1s0

Переключаем сетевую карту в режим 1 Gbit:

ethtool -s enp1s0 speed 1000 duplex full autoneg on

Настройка файла подкачки

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

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Только пользователь root может читать и записывать файл подкачки:

sudo chmod 600 /swapfile

Настраиваем область подкачки Linux для файла:

sudo mkswap /swapfile

Активируем подкачку:

sudo swapon /swapfile

Отключаем старый swap файл:

sudo swapoff /swapfileOld

Для использования данного файла подкачки по умолчанию(при перезагрузки системы), открываем файл /etc/fstab и прописываем в секции swap, ранее полученный UUID файла подкачки, или добавляем строку

/swapfile swap swap defaults 0 0

Устанавливаем BrainyCP

Основная задача Brainy — максимально облегчить системному администратору управление сервером и автоматизировать все серверные процессы. Продукт полностью бесплатен, предоставляет функционал, приближенный или выше платных панелей. Продукт подойдет как небольшому вебмастеру, которому необходимо средство управления VPS, так и крупной хостинг компании для размещения клиентов на shared-хостинге.

Для установки выполняем команду:

wget -O install.sh http://core.brainycp.com/install.sh && bash ./install.sh

Заходим в панель по адресу (укажите IP вашего сервера):

http://192.168.0.2:8002/index.php

Входим под root, создаем хост аккаунт, добавляем домен, создаем бд и  SSL для домена, почтовый ящик. В качестве веб-сервера выбираем Apache-Nginx, активируем нужные версии PHP(включаем нудные модули). Устанавливаем OpenDKIM.

Автозапуск ПК при подаче питания

В случае выключения ПК из-за перебоев в подаче электричества, нужно настроить его автоматическое включение при возобновлении подачи питания. Для этого в настройках BIOS вашего ПК раздел Настройки питания (Power managament Setup) затем ищем параметр APM (Power By RTC Alarm) и переводим в значение Enabled. Для разных версий BISO данная настройка может называться по разному, но мути это не меняет — найти её не сложно.

Автоматическая очистка кеша сайтов

Пишем скрипт на bash для очистки кеша ваших сайтов, в скрипте перечисляем директории которые нужно чистить, и ставим запуск данного скрипта в задание планировщику на запуск раз в сутки(например).

#!/bin/bash
# Очистка директорий кеша от временный файлов старше 1440 мин (сутки)
find /var/www/site/data/www/sute.ru/cache -name '*' -type f -mmin +1440 -delete

В планировщик, добавляем задание на запуск скрипта /root/clearCache.sh

Монтирование по имени диска

Открываем на редактирование следующий файл:

vi /etc/fstab

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

/dev/sda1     /db     xfs     defaults     0 0

Где:

  • /dev/sda1 — диск, который мы монтируем
  • /db — каталог, в который монтируем диск
  • xfs — файловая система
  • defaults — стандартные опции. Полный их перечень можно посмотреть на Википеции.
  • 0 0 — первый отключает создание резервных копий при помощи утилиты dump, второй отключает проверку диска.

Автоматический бекап сайтов

Создаем файл со скриптом на bash, называем его /root/buckupSite.sh, и задаем права на выполнение 0755

#!/bin/bash
 
# Общие настройки скрипта
username=Site
archiveLocation=/root/backups # Локальная папка для хранения бекапок
archiveTempPath=/root/backups/tmp_backup # Временная папка для создания бекапок
archiveName=$(date '+%A'); # Название архива бекапа, я предпочитаю по дням недели $(date '+%d-%m-%Y_%H:%M');
archiveFullName=$username.$archiveName.tar.gz
archivePath=$archiveLocation/$archiveFullName
deleteLocalArchive=true # Удалять локальную копию бекапа?
 
# Путь к папке вашего сайта, которую необходимо бекапить
backupPath=/var/www/$username/data/www
backupToRemoteServer=true
 
# Удаленный FTP сервер куда будет выгружаться архив бекапа
remoteServerProtocol=ftp
remoteServerPort=21
remoteServerHost=
remoteServerUsername=
remoteServerPassword=''
remoteServerPath=/
 
# Данные БД для бекапа
backupMysql=true
backupMysqlUsername=
backupMysqlPassword=
backupMysqlDatabase=
 
# Удаляем все временные файлы
echo 'Удаляем все временные файлы';
rm -rf $archiveTempPath
 
# Удаляем локальную копию архива бекапа
if [ $deleteLocalArchive = true ]
then
echo 'Удаляем локальную копию архива бекапа';
rm -rf $archivePath;
fi
 
# Создание временной директории
echo 'Создание временной директории';
mkdir $archiveTempPath
mkdir $archiveTempPath/files
mkdir $archiveTempPath/databases
 
# Установка прав доступа
echo 'Установка прав доступа';
chmod -R 777 $archiveTempPath
 
# Копируем файлы
echo 'Копируем файлы';
rsync -a $backupPath $archiveTempPath/files -q
 
# Экспорт БД MySQL в файл
if [ $backupMysql = true ]
then
echo "Экспорт БД MySQL в файл: $backupMysqlDatabase";
mysqldump -u$backupMysqlUsername -p$backupMysqlPassword $backupMysqlDatabase > $archiveTempPath/databases/$backupMysqlDatabase.sql 2>&1
fi
 
# Архивируем все файлы Tar
cd $archiveTempPath
tar --exclude=cache --exclude=uploads -cf "$archivePath" *
cd $archiveLocation
 
# Загружаем архивы на внешний FTP сервер
if [ $backupToRemoteServer = true ]
then
echo "Загрузка архива ($remoteServerProtocol)";
if [ $remoteServerProtocol = 'ftp' ]
then
curl -T $archivePath ftp://$remoteServerHost:$remoteServerPort/$remoteServerPath/ --user $remoteServerUsername:$remoteServerPassword -s
elif [ $remoteServerProtocol == 'sftp' ]
then
sshpass -p $remoteServerPassword scp -P $remoteServerPort $archivePath $remoteServerUsername@$remoteServerHost:$remoteServerPath/$archiveFullname
fi
fi
 
# Удаляем временные файлы
echo 'Удаляем временные файлы';
rm -rf $archiveTempPath
 
# Удаляем локальную копию архива бекапа
if [ $deleteLocalArchive = true ]
then
echo 'Удаляем локальную копию архива бекапа';
rm -rf $archivePath;
fi
 
# Завершение
echo "Бекап $archiveFullName успешно создан";

Настройка планировщика CRON

Просмотр списка задач в планировщике, команда:

crontab -l

Добавление задачи в планировщик, команда которая откроет редактор файла настроек CRON:

crontab -e

Добавляем туда строку, в таком формате: минута час день месяц день_недели /путь/к/исполняемому/файлу
Пример(запуск каждые 20 минут): * */20 * * * /root/buckupSite.sh

Заключение

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

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

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик, Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка