Установка, настройка и размещение сервера дома или в офисе
Доброго времени друзья! В этой небольшой статье-заметке, я хочу поделится кратким руководством, по установке сервера для веб-проектов в домашних условиях или в условиях офиса с типовым интернет-каналом. Такое решение может понадобиться, для тестирования и отладки веб-проектов, со специфическими техническими требованиями(например дисковое пространство в размере 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, Architect
предложить оффер
- jQuery: как получить значение атрибута?
- PHP работа с изображением, класс SimpleImage
- Интеграция с API ОСАГО сайта sravni.ru
- Комментарии на PHP, Ajax, mySQL
- PHP: Категории бесконечного уровня вложенности.
- Nginx редирект на другой сервис с сохранением URL спросил (а) Сергей
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Как создать Telegram-бота с авторизацией через сайт к записи
- PHP скрипт: каталог закладок на сайты к записи
- Валидация на PHP к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
Archive
- +2024 (25)
- Ноябрь 2024 (10)
- Октябрь 2024 (8)
- Сентябрь 2024 (1)
- Август 2024 (5)
- Май 2024 (1)
- +2023 (27)
- Ноябрь 2023 (1)
- Октябрь 2023 (13)
- Сентябрь 2023 (10)
- Апрель 2023 (1)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (36)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (41)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (7)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Интеграция платежной системы MoonPay на сайт по API 10.11.2024
- Парсер товаров с Taobao 08.11.2024
- Упаковка и минификация кода JavaScript онлайн 07.11.2024
- Как эффективно анализировать логи при DDOS атаке 07.11.2024
- Бот для автоматических заказов на OZON (плагин для Chrome) 07.11.2024