Как выбрать сервер и настроить его
В этой статье мы поможем вам с выбором сервера для вашего проекта, подскажем как обеспечить ему безопасность, а также приведем пример разворачивания проекта на сервере Selectel — ведущего провайдера IT-инфраструктуры.
Виртуальные и физические серверы — в чем разница?
В основе физических и виртуальных серверов лежат реальные машины, но чем они так сильно отличаются? Судите сами ↓
Выделенные серверы
Выделенный сервер — это физический сервер, вычислительные ресурсы которого доступны только для одного клиента.
Особенности:
- Высокая производительность. Она достигается за счет того, что вы не делите с другими клиентами физические аппаратные ресурсы: процессор, память и дисковое пространство.
- Все ресурсы физического сервера предоставляются одному пользователю. Это повышает производительность, так как все ресурсы используются только вами.
- Имеет ограниченные ресурсы. Ресурсы, доступные на физическом сервере, определяются его аппаратными характеристиками, которые нельзя увеличить без замены или модернизации оборудования.
- Сложно изменять конфигурацию по своему усмотрению. По запросу возможно изменить конфигурацию для сервера произвольной конфигурации. Для сервера готовой конфигурации можно только сделать апгрейд комплектующих — диски, память, GPU.
Облачные серверы
Облачный или виртуальный сервер — в его основе лежит виртуальная машина, которая работает на базе физических ресурсов провайдера.
Особенности:
- Быстрый процесс создания и удаления. Вы можете собрать себе новый сервер за 2 минуты на сайте провайдера, а через день или два удалить его насовсем.
- Простое масштабирование. Конфигурация легко изменяется, например, чтобы увеличить размер SSD, вам будет достаточно сделать пару кликов и сменить тарифный план.
- Доступ к данным. Данные доступны в любом месте и с любого устройства, если есть подключение к интернету.
- Виртуальные ресурсы дешевле физической машины. Физический сервер обычно не использует все свои ресурсы на 100% в любой момент времени, в то время как облако разделяет его ресурсы между виртуальными машинами клиентов, что позволяет более эффективно использовать доступные вычислительные мощности, память и хранилище.
Как подобрать сервер для вашего проекта
Определите требования вашего проекта: подумайте о пропускной способности, хранилище данных, вычислительной мощности необходимых вам. Вот основные моменты, на которые следует обратить внимание:
- Определиться с предназначением сервера. Что вам нужно: универсальное решение или сервер, заточенный под хранение и обработку данных, аналитику или работу с 1С?
- Подобрать оптимальную конфигурацию — процессор, оперативная память, жесткие диски. Выбор ресурсов зависит от задачи, которую нужно решить. Кроме того, важно понять, должны ли ресурсы быть «фиксированы». Например, нужно ли наращивать или сокращать количество ядер во время работы? Или нагрузки предсказуемы и достаточно фиксированного количества?
- Решить, где будет располагаться сервер — on-premise или у провайдера.
Покупать собственный сервер или арендовать у провайдера
Сервер можно купить и разместить на собственной площадке: дома или в офисе — такой подход называют on-premise. Или арендовать сервер у провайдера — тогда он будет размещен в дата-центре. Выбор зависит от многих факторов. Вот некоторые из них, которые стоит учесть перед принятием решения:
Бюджет
Покупка. Требует значительных капиталовложений, включая стоимость самого сервера, его обслуживания и обеспечения необходимыми условиями, такими как электричество и охлаждение.
Аренда. Более выгодный вариант с точки зрения операционных затрат, поскольку вы платите только за использование сервера и не платите за его приобретение и настройку с нуля.
Гибкость
Покупка. Вам может потребоваться приобретение нового оборудования для масштабирования или обновления текущего.
Аренда. Предпочтительнее, если вы планируете изменять или расширять проект.
Управление
Покупка. Предоставляет вам полный контроль над оборудованием и его настройками. Вы можете настроить сервер в соответствии с вашими потребностями и полностью контролировать его безопасность.
Аренда. Может быть ограничен доступ к некоторым настройкам, поскольку провайдер предоставляет вам лишь определенный набор готовых услуг, сервисов и конфигураций.
Технические знания
Покупка. Потребуются специализированные знания по установке серверного оборудования, его настройке и обслуживанию.
Аренда. Провайдер обеспечивает техническую поддержку и обслуживание.
Хотя теоретически сервер можно разместить где угодно, на практике для этих целей используют дата-центры, так как там соблюдаются температурный режим, условия пожарной безопасности и отказоустойчивости.
Конечно, любой человек может обеспечить пожаробезопасность, охлаждение и даже поставить резервный дизель-генератор, но это будет слишком дорого и выйдет большой счет за коммуналку, а в помещении будет жарко и влажно. Провайдер же сделает PUE (показатель оценки энергоэффективности) более сносным и не выставит огромный счет за использование кондиционеров 24/7.
На что обратить внимание при выборе компании, предлагающей аренду серверов
Надежность предоставляемых услуг. У компании должны быть обеспечены: стабильные каналы связи, бесперебойное питание и охлаждение, круглосуточная охрана. А также существование современных систем мониторинга.
Соблюдение законов и наличие лицензий, и сертификации. Если вы собираетесь обрабатывать персональные данные, убедитесь, чтобы серверы провайдера были аттестованы в соответствии с требованиями 152-ФЗ «Закону о персональных данных». Если есть необходимость, проверьте наличие лицензий ФСТЭК и ФСБ.
Соответствие международным сертификатам. Для соблюдения международных стандартов сертификат — ISO 27001 и AICPA SOC 2. Если вам нужна будет на проекте обработка данных держателей карт, вам понадобится, чтобы у провайдера был сертификат PCI DSS.
Документация. Наличие документации у провайдера сохранит вам ваши нервные клетки, если вам понадобится дополнительная информация или случится форс-мажор.
Нужен контроль безопасности — что выбрать?
Безопасность бывает организована двумя способами: силами провайдера и при помощи подхода On-premise.
On-premise
Когда разработчики не доверяют провайдеру, они предпочитают использовать подход On-premise. Особенность этого подхода с позиции безопасности — полный контроль и доступ к данным.
Провайдер
Если вы все-таки не собираетесь разворачивать серверную у себя дома или в компании, то можете использовать продвинутые услуги провайдера.
Аттестованный сегмент ЦОД (А-ЦОД) — инфраструктурное решение, предоставляющее клиентам в аренду серверы произвольной конфигурации и выделенный под клиента межсетевой экран. Провайдер размещает их в аттестованном сегменте дата-центра, помогая соответствовать требованиям российского и международного законодательства, а также обеспечивая изолированность и безопасность систем.
Есть также аттестованное облако — инфраструктура для размещения систем, включающая облачные серверы и S3-хранилище. Разница с другими моделями облаков — в выполняемых мерах и соответствующих сертификатах и аттестации, которую провайдер уже прошел за клиентов. Облачная инфраструктура соответствует требованиям безопасности согласно 21, 17 приказам ФСТЭК и СТР-К, и готова для обработки данных УЗ 1-4, К 1-3 и 1Г.
Размещая свои системы на базе аттестованных решений, вы делегируете провайдеру ответственность за физическую безопасность и работу инфраструктуры. При этом сохраняете полный контроль за логической безопасностью размещаемых систем: управление доступом, безопасность сетевого прикладного и системного ПО, обрабатываемых данных и кода. А также отвечаете за защиту каналов связи — например, можете использовать свои криптошлюзы.
Подбор и настройка сервера на примере проекта нашего студента
На Фазе 2 курса по web-разработке мы учим наших студентов деплоить проекты, используя Docker и виртуальный сервер. Мы предложили Ивану, одному из студентов Питерского кампуса, рассказать, как в Эльбрусе происходит выкатка проектов на сервера Selectel.
Описание задачи
У студента написан проект небольшого сайта (web-приложение под названием Skeleton) с базовым функционалом: авторизацией и регистрацией. На данный момент существует локальная база данных и локально подключенный Docker. Осталось арендовать сервер и перенести на него сайт и базу данных, чтобы веб-приложение работало без локального сервера.
Выбор сервера
После того, как вы зарегистрируетесь на сайте Selectel и пройдете все этапы аутентификации, вам будет нужно зайти в панель управления. В ней вам нужно будет выбрать раздел «облачная платформа», подраздел «серверы». Выбор пал на облачный сервер из-за простоты использования и возможности аренды на короткий срок (на время сдачи выпускного проекта), а также для минимизации финансовых затрат.
- Местоположение дата-центра: Санкт-Петербург — проект нашего ученика рассчитан на клиентов северной столицы России, поэтому будет логично выбрать Петербург. Когда мы выбираем город максимально близко с конечным потребителем — мы уменьшаем пинг.
* Пинг — это время, за которое данные достигают адресата и возвращаются обратно на сервер.
- Операционная система сервера: «Ubuntu 22.04 LTS 64-bit» — это популярное серверное решение с детальной документацией.
- Название сервера: Skeleton — название сервера можно выбрать любое, а можно взять автоматически сгенерированный вариант.
- Количество вирутальных ядер: 1 ядро — выбираем минимальное количество ядер, так как проект рассчитан на малую нагрузку.
- Оперативную память: 2 ГБ — используем самую минимальную конфигурацию для запуска нашего проекта, так как проект достаточно простой и не потребляет много ресурсов.
- SSD: Универсальный SSD 8 ГБ — универсальный SSD передает информацию со скоростью 200 Мбит/с, а 8 ГБ достаточный объем памяти для учебного проекта и нашей базы данных.
- Сеть: Новый публичный IP-адрес — выбирается публичный адрес, так как проект должен будет работать в интернете, чтобы любой желающий мог на него зайти.
Загрузка проекта
Прежде чем нажимать на кнопку «Создать сервер» Иван решил сохранить пароль к логину root в безопасном месте для входа на сервер. И все, мы можем поздравить Ваню — он создал новый сервер с IP-адресом 89.223.31.10.
Шаг 1. Вход в сервер
Подключитесь по SSH к серверу, используя публичный адрес и данные для доступа, выберите вкладку «Консоль» и введите логин root и пароль ************.
* Обращаем внимание, что визуально пароль не будет отображаться в консоли, поэтому лучше будет использовать Ctrl+C и Ctrl+V для вставки пароля.
Шаг 2. Установка Docker
Так как сервер полностью пустой на данный момент, то на нем не установлен Docker, а значит нам необходимо его поставить. Для этого вводим в консоль команду:
sudo apt update
apt install docker.io
Затем, проверяем установился ли docker:
docker -v
Шаг 3. Загрузка базы данных с Postgres
Загружаем образ Postgres через docker на сервер:
docker pull postgres
Потом проверяем установился ли образ и какие образы загружены на сервер:
docker images
Делаем так, чтобы в случае форс-мажорных ситуаций, база данных не потерялась:
docker volume create pgdata
Далее пересобираем контейнер, указывая название базы данных как skeleton_db:
docker run -d --name container-postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=skeleton_db -p 5432:5432 -v pgdata:/var/lib/postgresql/data postgres
Как только вы запустите эту команду, у вас создаcтся своя облачная база данных.
Шаг 4. Разбираемся, как пользоваться базой данных
Проверим работу контейнера с помощью команды:
docker ps -a
Заходим во вкладку «Порты» и копируем Публичный IP-адрес: в нашем случае это будет 89.223.31.10. Потом переходим в папку нашего проекта в .env файл и меняем существующий локальный адрес, на адрес IP-адрес сервера. Выглядеть это будет так:
DATABASE URL = "postgres://postgres:postgres@31.129.33.168:5432/skeleton_db"
Делаем миграцию базы данных, для этого в консоли вашего IDE пишем:
npx sequelize db:migrate
Проверяем заполнилась ли наша база данных, для этого:
- Копируем ссылку и открываем Beekeeper Studio:
«postgres://postgres:postgres@89.223.31.10:5432/skeleton_db»
* Beekeeper Studio — это бесплатный редактор и менеджер баз данных.
- Отключаемся от локальной базы данных:
- Далее автоматически загружается нужная нам среда и в ней мы нажимаем на кнопку Import from URL и вставляем туда нашу скопированную ссылку и нажимаем import. В открывшемся окне находим кнопку Connect и кликаем по ней.
* Все, вы оказались в вашей реальной базе данных. Если в проект добавятся новые разработчики — база будет доступна всем участникам проекта.
Шаг 5. Создаем Docker-образ проекта
Заходим на Docker Hub и создаем репозиторий с названием nickname/skeleton_db.
* Название состоит из никнейма пользователя Docker Hub + названия репозитория.
После собираем образ локально в IDE консоли:
docker build -t nickname/skeleton_db .
* Обратите внимание, что после nickname/skeleton_db стоит пробел и точка — это не ошибка, а обозначение, что сборка образа происходит из текущей папки.
И отправляем наш образ в Docker Hub:
docker push nickname/skeleton_db : latest
Возвращаемся в консоль Selectel для работы с сервером и подтягиваем наш образ с Docker Hub при помощи команды:
docker pull nickname/skeleton_db
Проверяем какие контейнеры сейчас запущены:
docker ps
Мы видим, что на данный момент у нас работает только контейнер с базой данных. Запускаем контейнер на основе нашего нового образа:
docker run -d --name container-code -p 80:3000 nickname/skeleton_db
Повторяем проверку, чтобы убедиться, что оба контейнера находятся в работе.
Шаг 6. Просмотр нашего приложения в интернете
Копируем публичный IP с вкладки «Порты» и вставляем в наш браузер, и вуаля!
Теперь, если вы введете информацию пользователя в форму на сайте с любого компьютера в мире, то она загрузится в вашу базу данных. Далее вы можете зарегистрировать свой IP-адрес под нужным вам доменом.
Примечание от ментора: когда студент наберется больше опыта, он сможет загружать проект без использования Docker Hub.