Как работает сервер
Что делает сервер? В чем именно заключается его роль? Эти и другие аналогичные вопросы часто возникают в головах людей.
Алгоритм работы сервера следующий:
- Сначала пользователь делает запрос, выполняет команду (чаще всего это нажатие той или иной кнопки).
- Информация о его действии поступает на сервер и обрабатывается оборудованием.
- После этого, в соответствии с настройками программы, система выводит ту или иную информацию на монитор.
Например, пользователь вводит логин и пароль на сайте, а затем нажимает кнопку «Войти». Информация поступает на сервер, где проверяется правильность введенных данных. Если они введены неверно, пользователь увидит уведомление об ошибке. Если же данные указаны корректно, пользователь попадет в свой «Личный кабинет».
Физический путь
Удобство физического пути очевидно — стоит отдельная машинка, не мешает основной работе, радует глаз.
Если спросить, что же использовать как платформу, наверняка многие ответят Малинку (то есть Raspberry Pi). На мой взгляд это не самый лучший выбор для данного случая.
Raspberry Pi отлично подходят для самодельных решений разнообразной направленности, но по соотношению цена/производительность не являются каким-либо лидером. И, хотя сейчас уже множество софта доступно под ARM системы, под x86 программы всё-таки чувствуют себя постабильнее.
Кто-то захочет переоборудовать старую машину или собрать на старых Xeon’ах себе компьютер для веб-сервера. И это тоже вариант, хотя по потреблению электроэнергии не оптимальный.
Я же советовал бы купить для данных целей недорогой (или не очень дешёвый, если вы хотите постоянно запускать «тяжёлые» задачи на вашем сервере) мини-пк (иначе называемый неттоп). Доступные варианты с 8 гигабайтами оперативной памяти, четырёхядерным Celeron и SSD на 128 гигабайт можно найти за 150-200 долларов и этого более чем хватит для домашних задач. При этом он будет компактным, тихим, удобным в размещении, достаточно приятно выглядящим и с низким TDP. Даже в самые дешёвые модели обычно можно доставить как минимум один, а порой и два 2,5 дюймовых диска, так что как файловую помойку его, в общем-то, тоже можно использовать. Хотя лучше превратить его в личное облако, а как файловый сервер использовать отдельное NAS-устройство — для отказоустойчивого хранения большого количества данных форм фактор мини-пк не слишком располагает.
Помимо этого, если вы «наиграетесь» и решите, что оно не ваше, такому компьютеру будет легко найти место. Например поставить обратно Windows и отдать маме/тёте Вале из третьего подъезда. Для офисной работы и использования браузера он подойдёт прекрасно.
А если вы за чуточку большую цену взяли мини-пк с несколькими сетевыми портами, то сможете превратить его в невероятно мощный и функциональный маршрутизатор, поставив сверху OpenWRT, PFsense, ClearOS или ещё какую-нибудь систему для роутеров. Ну и вообще альтернатив много, когда и если наиграетесь с предложенным мной вариантом.
Сразу, правда, надо учесть: шансы, что у такой машинки не будет работать Wi-Fi под линуксом, мягко говоря, не самые маленькие. Так что планируйте проводное соединение.
Заранее погуглите, на какую клавишу вызвать boot menu у вашей машинки. А образ для установки, если вы на Windows, лучше всего на флешку записывать программой Rufus.
Для прокси-серверов
Прокси (от англ. proxy — «уполномоченный») – программный инструмент, дающий возможность обходить прямое подключение к сетевым ресурсам. Он подменяет запрос с реального IP-адреса пользователя к сетевой службе на косвенный от своего имени. Сперва пользователь соединяется с прокси-сервером и создаёт запрос на подключение к веб-сервису на другом сервере. После этого, «сервер-посредник» получает с указанного адреса нужную информацию и передаёт её клиенту.
Прокси на базе VPS решает три основные задачи:
- Создание анонимного подключения. Это может понадобиться для постинга в социальные сети с нескольких аккаунтов, обхода географической блокировки или личного бана на ресурсе.
- Ускорение доступа по сети. Если «сервер-посредник» географически ближе к пользователю и имеет более мощный канал связи, он может ускорить соединение с зарубежными ресурсами, передавая данные без потери скорости.
- Защита от ряда кибер-атак. Т.к. потенциальные злоумышленники не видят оригинального IP-адреса, они не могут использовать его для отправки вредоносных программ, вторжения или кражи личных данных.
Для замены оригинального IP-адреса пользователя будет необходим как минимум один адрес протоколов IPV4 или IPV6. Обычно такой адрес предоставляются хостерами или интернет-провайдерами бесплатно или за небольшую доплату.
Домен
Конечно, ничто не мешает нам обращаться к нашему домашнему серверу и напрямую по IP адресу, но делать так не рекомендуется: и не особо безопасно, и запоминать IP адрес не просто, да и если у вас динамический, меняющийся каждый раз как вы заново подключаетесь к интернету, IP адрес, то запоминать его вообще бессмысленно. Ну и наконец, у нас много сервисов планируется, а чтобы к ним доступ был тупо по IP адресу, придётся их на разные порты навешивать. Оно вам надо?
Именно поэтому мы будем использовать домен.
Ну, знаете, ту самую штуку, которую вы вводите в адресной строке. В результате сможем давать сервисам поддомены для удобства и не страдать. Ну, например https://пароли.мой.домен/ для парольного сервиса или https://почта.мой.домен/ для почты. Удобно, в общем, запоминается. Делать это будет Ngnix под капотом нашего PaaS, при желании всегда можете разобраться в конкретике.
Схема работы обратного прокси Ngnix в случае контейнеров
Впрочем если вы только пощупать пришли, то домен можно получить и бесплатно. Есть такой регистратор — Freenom, там можно бесплатно достать домен в зонах .tk, .ml, .ga, .cf или .gq. Правда как часто бывает с чем-то бесплатным, сайт глючный. Если на проверке доменов у вас всё время пишется, что домен занят, попробуйте поставить сразу полный путь. То есть вводите в проверочное поле не мой_домен, а сразу, скажем, мой_домен.tk.
Очевидно, что если что-то досталось бесплатно, то и потерять его легко — отзывы у Freenom в этом плане далеки от хороших. Так что если планируете что-то серьёзное, то лучше домен себе всё-таки купить у регистратора. Однако для маленького домашнего сервера потенциальная потеря домена не критична.
Cloudflare
Тут мы уже входим в пространство вкусовщины. Вам ничто не мешает использовать и редактор DNS записей вашего регистратора или любой другой сервис управления DNS записями домена. Тут, на хабре, вон вообще CloudFlare раком интернета недавно называли. Но с другой стороны, CloudFlare даже в базовой, бесплатной версии имеет достаточно много приятных фишек, которые ваш регистратор скорее всего не предоставляет. Тут и какая-никакая защита от DDoS, кеширование, расширенные возможности управления доступом и так далее и в том же духе. Плюс в одном из следующих пунктов, когда мы поднимем контейнер для DDNS, будет использоваться именно CloudFlare (впрочем настроить DDNS с другим провайдером вроде DuckDNS — задача достаточно тривиальная).
Правда многие фишки пройдут мимо нас, поскольку проксирование у CloudFlare на wildcard-записи (ну, это записи включающие всё пространство имён *.мой.домен) не работает (ну, за бесплатно). Однако ничего не мешает потом, уже для отдельных сервисов, сделать конкретную запись и пожать все плюшки платформы. Ну или ещё лучше, если у вас статический IP адрес, вообще без DDNS обойтись.
Решение проблем
Ошибка «error initializing:open apps.json: no such file or directory»
При запуске вы можете получить сообщение об ошибке:
2019/08/11 05:58:02 error initializing:open apps.json: no such file or directory
Для своей работы программа webanalyze использует файл базы данных apps.json от программы Wappalyzer. Показываемая ошибка означает, что данные файл отсутствует. Для его скачивания выполните команду:
webanalyze -update
webanalyze выводит меньше данных, чем wappalyzer
В своей работе wappalyzer для определения технологий выполняет JavaScript код и запросы, благодаря которым собираются дополнительные сведения. Поскольку в webanalyze на данный момент это не реализовано, то он выводит меньше информации — только ту, которая не требует выполнения кода JavaScript на сайте.
Для разработки и тестирования
Для проектирования, разработки, тестирования и развёртывания программных продуктов обычно требуются усилия целой команды специалистов. Современным стандартом совместного IT-творчества стала удалённая работа с системой контроля версий, установленной на мощном виртуальном сервере.
В чём преимущества разработки на базе VPS
- Гибкость в настройке. Для разработки может понадобиться огромное количество разновидностей ПО — от небольшого драйвера до гигантской информационной системы. Их установка на компьютерах программистов (с разным «железом» и ОС) может стать настоящей головной болью. Гораздо проще пользоваться общими виртуальными ресурсами нужной конфигурации и мощности.
- Автономность и оперативность. Специалист может подключиться к работе в любое время суток, из любой точки мира.
- Скорость. Единый VPS-сервер позволяет организовать сетевую координацию действий разработчиков в режиме реального времени.
- Доступность. Для разработки на VPS не нужно покупать кучу отдельных дорогостоящих компьютеров, которые занимают место и после окончания проекта могут повиснуть на балансе мёртвым грузом.
- Лёгкость. Удалённый ресурс VPS позволяет работать с объёмными файлами и БД, без скачивания на локальный компьютер.
- Контролируемость. Если, что-то пошло не так, систему можно будет легко «откатить» назад, используя её автоматически созданный «снимок» (snapshot).
Недостатки использования VPS для разработки
- Абонентская плата за виртуальный сервер выше, чем за веб-хостинг, а его мощности могут использоваться не регулярно.
- Скорость работы с файлами на VPS напрямую зависит от быстроты и стабильности интернет-соединения.
- VPS-сервер нуждается в прямом администрировании с привлечением квалифицированного технического работника.
Первое и главное противоречие помогает снять концепция единоразовой оплаты за VPS, реализованная Eternalhost. Наряду с традиционными помесячными платежами, появилась альтернатива, позволяющая экономить с каждым новым месяцем пользования услугой.
Для образовательных учреждений
Процесс перехода начальных, средних и высших учебных заведений на систему электронного контроля развивается с каждым годом. Важным шагом на этом пути стали Постановление Правительства РФ № 582 и Приказ Рособрнадзора № 785, утверждающие правила размещения сайтов образовательных учреждений (ОУ) в Сети. Согласно им, ОУ должны обеспечивать не только полноценное размещение сведений, обработку информации, но и удалённый доступ к данным всем участникам учебного процесса.
Сбалансированным решением подобных задач станет размещение сайтов ОУ на базе виртуальных серверов. Использование VPS обеспечит официальному порталу школы или университета такие важнейшие параметры, как непрерывную доступность, высокую скорость загрузки, сохранность информации и безопасность личных сведений.
Ресурсы VPS также могут успешно использоваться и в самом учебном процессе. Сервер послужит отличным «облачным» хранилищем для конкурсных работ учащихся и материалов дистанционного обучения. Он может послужить «виртуальной» средой для совместного творчества учеников. Вычислительные мощности сервера станут ценным дополнительным ресурсом при изучении информатики и других точных наук.
Особенности технологии
Сервер работает в многопользовательском режиме, то есть может одновременно поддерживать работу с большим количеством клиентов. Машина автоматически выставляет приоритеты, ориентируясь на очередность поступления запросов, обрабатывает их и отправляет обратно результаты
Сервер позволяет настраивать приоритеты не только исходя из очереди поступления запросов, но и по другим параметрам, как пример – по важности. Тогда такие запросы будут обработаны первыми, даже если поступят позже.
В своем большинстве в роли клиента выступает браузер определенного пользователя. А вот в качестве сервера может использоваться:
-
аппаратное обеспечение типа http;
-
кластеры серверов;
-
локальные машины.
Обмен данными между узлами осуществляется на основании сетевых протоколов. И для каждой из услуг предусмотрен свой торрент. Вариантов очень много. Так, для обработки пользовательских запросов предназначается протокол http. Он предполагает соблюдение четкой структуры с данными, которые нужно будет предоставить. Требования предъявляются даже к оформлению. В ответ на http-запрос сервер присылает html документ. Запрос от клиента сопровождается дополнительными данными, которые дают серверу понять, как с ними работать. В ответе от серверного оборудования также идут сторонние коды, помимо запрошенных данных. Они помогут браузеру правильно «понять» сообщение сервера. То есть вся инициатива в работе идет от клиента. Сервер только дает ответ на запрос и указывает, какие условия для этого требуется соблюсти.
Одновременное присутствие на одном сайте нескольких пользователей чревато поступлением на один дата-центр большого количества обращений. Но здесь есть свои ограничения, связанные с мощностью с пропускной способностью серверного оборудования, характером запросов.
Общие технологии создания сайта
Какой бы подход к созданию сайта вы не выбрали, базовые технологии создания сайта остаются неизменными, лишь со временем, улучшаются и дополняют друг друга.
Для понимания технологии создания сайта рассмотрим самый сложный вариант, создания сайта своими руками с нуля.
Технологические этапы в создании сайта с таким подходом, можно описать таким образом:
Этап 1. Структура и дизайн сайта. На этом этапе необходимо продумать навигационную структуру сайта и его будущий дизайн.
В зависимости от типа создаваемого сайта, структурной единицей сайта является либо статья, либо карточка товара. Статьи сайта объединяются в разделы. Сами разделы можно построить по подчинённой структуре типа родитель-дочка.
Для навигации по сайту необходимо продумать вывод на сайт меню, лучше не одного меню в разных местах сайта.
Также на сайте не помешают дополнительные информационные блоки. Они будут окружать основной контент сайта, и помогать пользователю ориентироваться на сайте.
Дизайн сайта продумывается заранее и заключается в расположении основных элементов сайта (основного содержания, информационных блоков, меню, шапки сайта и т.д.), а также цвете сайта и его типографии (выбор типов и размеров шрифтов).
Этап 2. Программирование. Самый сложный этап технологии создания сайта, если вы делаете сайт с нуля своими силами.
На этом этапе нужно написать скрипт для сайта, который позволит запускать нужные процессы по специальным командам.
Это самый сложный этап создания сайта с нуля. Для его осуществления, действительно, нужно изучить языки программирования HTML, PHP, JavaScript, Python, Perl, Angel Script. Наиболее востребованы первые три HTML, PHP и JavaScript. Обязательно потребуется знание языка табличных стилей CSS.
Современные технологии создания сайта позволяют обойти этап глубокого изучения языков программирования и воспользоваться готовыми, бесплатными или платными, скриптами для создания сайта.
Наиболее просты в использовании, так называемые системы управления содержимым (CMS). Например, WordPress, Joomla, Drupal, 1-С Битрикс, OpenCart. Их достаточно легко освоить без особых знаний программирования.
Этап 3. Верстка сайта. Это этап сборки, всего запланированного.
При использовании готовых скриптов этого этапа практически нет. За верстку сайта отвечает используемый шаблон, который используется по умолчанию, или найти в готовом виде.
Самостоятельное создание сайта, потребует серьёзных знаний по сборке отдельных частей сайта в единое целое.
Этап 4. База данных.
Создание сайта невозможно без базы данных. Поэтому в довесок к языкам программирования придется изучить работу с базами данных и структурированный язык запросов SQL.
Часто, изучению и работе с базой данных сайта не уделяют должного внимания. Причина в автоматизации её создания и управления при создании сайта на ведущих CMS. Однако, именно умение работать с базой данных «руками» с помощью SQL запросов, отличает профессиональный подход от дилетантства. Для профессиональных навыков нужен хороший курс по sql и базам данных. Эффективные SQL запросы помогут в решении многих нерешаемых проблем на сайте.
Этап 5. Наполнение сайта.
Этот этап мало относится к Интернет технологиям, но не менее важен, чем все предыдущие этапы. Готовый сайт, который вы делаете для себя, нужно наполнить материалами, фото и другой информацией. Но это уже другая история.
Достоинства и недостатки Apache
Плюсы
- Доступность. Это программное обеспечение с открытым исходным кодом. Значит, его может бесплатно использовать или модифицировать любой желающий. Разработчики по всему миру создают конфигурации и модули веб-сервера для своих специфических нужд. По этой же причине Apache регулярно получает полезные дополнения, расширяющие его базовый функционал.
- Гибкость настройки. Apache использует несколько конфигурационных файлов для управления веб-сервером. Это позволяет настроить ПО под узконаправленные задачи.
- Функциональность. У Apache динамическая модульная структура. Можно быстро подключать дополнительный функционал в виде скачиваемых модулей, даже без обращения к внешним источникам. Это позволяет решать целый комплекс важнейших задач в области безопасности, кэширования, редактирования URL, распределения нагрузки. Благодаря гибридным модулям MPM, Apache может одинаково успешно обслуживать статический и динамический контент. Есть возможность оперативно отключать ненужные модули и ускорять работу веб-сервера
- Кроссплатформенность. Apache работает как на Windows, так и на всех Unix-подобных системах. Администрирование веб-сервером не имеет серьёзных отличий на разных ОС. Индивидуален только процесс установки и расположение директорий с файлами программы.
- Совместимость. Apache работает на базе скриптовых или веб-ориентированных языков (PHP, Python, Tcl, Ruby, Perl, ASP), что делает его совместимым с самым широким спектром баз данных и серверного ПО. Многие веб-приложения и инструменты сразу выходят со средствами запуска из-под Apache в виде PHP-модуля. Веб-сервер, поддерживает технологии FastCGI и CGI, позволяющие пользоваться программными продуктами на объектно-ориентированных языках Java, sh, C, C++.
- Масштабируемость. Подходит для веб-ресурсов любого масштаба. Apache хорошо работает как на одностраничном сайте (лендинге), так и на многостраничном сайте с ежедневной аудиторией в десятки тысяч посетителей.
- Поддержка пользователей. Apache удерживает первенство популярности среди веб-серверов с 1996 года. За прошедшее время для него создана обширнейшая база документации – как официальной, так и созданной сторонними разработчиками. Готовые, подробно описанные руководства можно найти практически на любой сценарий.
Минусы
- Производительность. Скорость обработки запросов Apache несколько ниже, по сравнению со своими конкурентами. Гибкость веб-сервера в некоторых случаях вредит производительности. Например, Apache приходится каждый раз считывать несколько конфигурационных файлов на сервере, затрачивая системные ресурсы и время. Но этот и многие другие факторы можно исправить, отключив ненужные опции. Правда в таком случае функциональность Apache не будет сильно отличаться от других веб-серверов.
- Сложная конфигурация повышает уязвимость. Возможность подключать модули в Apache это не всегда преимущество. Чем больше модулей, тем сложнее становятся настройки. Соответственно, больше шансов допустить критические пробелы в контуре безопасности.
- Синтаксис конфигов.. В файлах с параметрами программы используются разнообразные переменные, поэтому настройка и управление веб-сервером может показаться сложной новичкам. Упростить администрирование Apache можно с помощью бесплатного инструмента Apache GUI.
- Излишний функционал. Даже без дополнительных модулей Apache предоставляет пользователям массу возможностей. Правда, большинство использует лишь небольшую часть базового функционала приложения. Поэтому часто после установки приходится тратить время на отключение «лишних» модулей.
Использование
И вот наконец у нас всё стоит и работает.
Зачем оно вам? Ну, если вы до сих пор не знаете — придумайте. Для установки в один клик в CapRover доступно множество приложений для повседневного использования. Например менеджер паролей Vaultwarden. Торрент-клиент Qbittorrent. Сервер Minecraft. Боты для Discord. Вариантов много.
Я, например, держу стол для игры в DnD с друзьями Foundry VTT, веб-интерфейс для пробуждение от спячки моего домашнего компьютера (чтобы потом подключаться по RDP), свой маленький гит на базе Gitea, удобный фронтэнд для чтения Reddit’а libReddit, веб-архив для закладок и ещё кучу всякой всячины для тестов и изучения.
Ничто не мешает вам самому поэкспериментировать с контейнерами, которых в списке ещё нет, а если результат будет удовлетворительным — опубликовать свой конфиг на Github среди других приложений для установки в один клик.
В самом начале мы установили SSH, так что если вы захотите более тонкой настройки, подключите и тыкайтесь. Советую также зайти на SSH через VS Studio Code с установленным расширением Docker’а, и установить его же сразу там на ваш сервер. Теперь наблюдать, управлять и чистить мусор в контейнерах гораздо удобнее.
Операционная система для домашнего сервера
Последний теоретический момент: на какой операционной системе должен работать домашний сервер?
Если в качестве сервера используется готовый NAS, то этот вопрос сразу снимается — за пользователя уже все решил производитель.
А вот при использовании самосборных конфигураций приходится выбирать: Windows или один из многочисленных Linux-дистрибутивов?
Мое мнение — на сервере должен стоять только Linux. Существуют как специализированные дистрибутивы для самосборных NAS (FreeNAS, OpenMediaVault), так и универсальные Debian и Ubuntu, на базе которых можно настроить себе что угодно.
А вот заставить себя подружиться с Linux в качестве основной ОС на настольном компьютере я так и не смог. Поэтому Linux для сервера, Windows (или macOS если вы пользователь техники Apple) для всего остального.
Заглянем в будущее
Кому-то может показаться странным посыл тратить деньги и прикладывать усилия для организации собственного сервера, если есть множество облачных сервисов в интернете, позволяющих пользоваться тем же функционалом за скромную месячную плату.
Однако, любые данные в облаке — они не ваши. Вы можете лишиться их в любой момент. Если почитать пользовательские соглашения любого облачного сервиса, то нигде не обнаружится ни строчки о том, что сервис гарантирует сохранность пользовательских данных. Гарантия стабильного доступа к облачному хранилищу с любого устройства в любой точке мира и в любое время суток — да, имеется. Но гарантии сохранности данных вам никто не даст.
А случиться может всякое. Примеров можно привести немало:
- В 2012 году корпорация Apple внезапно закрыла свое облачное хранилище MobileMe и в одностороннем порядке предложила пользователям мигрировать на iCloud. Если пользователь по каким-то причинам не отреагировал и не перенес свои данные в установленные для этого сроки — он терял их навсегда.
- В том же году в результате совершенного ФБР рейда был закрыт один из самых популярных в мире файлообменников Megaupload, в результате чего тысячи пользователей лишились своих данных.
- В 2016 году в сеть утекли данные 68 миллионов пользователей облачного хранилища Dropbox, которые попали в руки хакеров несколькими годами ранее.
- В 2017 году Amazon в одностороннем порядке отменил безлимитные тарифы своего облачного сервиса и ввел ограничения по максимальному объему докупаемого на один аккаунт дискового пространства.
И это далеко не полный список.
Развлекательные стриминговые сервисы тоже порой подкидывают своим пользователям неприятные сюрпризы. Например, незадолго до публикации этой статьи социальная сеть Вконтакте ввела платную подписку на свой музыкальный сервис и установила существенные ограничения для бесплатных пользователей, что породило всплеск негодования со стороны пользователей.
Я же этого даже не заметил. Потому что моя музыка продолжает храниться у меня на компьютере.
Еще одним неприятным моментом является зародившийся тренд на сбор и анализ так называемой Big Data — больших объемов информации, которые не представляют пользы в виде разрозненных элементов, но будучи собранными в одну большую массу и проанализированными должным образом позволяют собрать целое досье на пользователя, включая его политические взгляды, вкусы и предпочтения.
Сбор и обработка Big Data стали выгодным бизнесом, которым занимаются все компании, имеющие доступ к подобным данным, и уже сейчас эксперты прогнозируют, что к 2025 году приватность станет новым элементом роскоши.
Я убежден, что через несколько лет мода на облачные сервисы и хранилища где-то в интернете начнет сменяться модой на облачные сервисы и хранилища в собственной локальной сети. Революции не произойдет, но все больше людей начнет интересоваться «альтернативными вариантами».
А начинать возвращать контроль над своими потоками данных и перенести все возможное с чужих серверов на свой собственный можно уже сейчас.