В прошлой статье я рассказал о таком понятии как VPS (Virtual Private Station).
Проще говоря, это виртуальный компьютер внутри обычного сервера (Dedicated Server). Настроим инфраструктуру, необходимую для создания промышленных приложений. Познакомимся с тем как работать с linux серверами.
Не буду рекомендовать какой то конкретный курс. Можно зайти на ютуб и вбить "Linux для начинающих" или найти книги просто загуглив "линукс начинающим pdf".
К этому списку можно обавить пару команд но для начала работы этого будет достаточно. На изучение базовых операций может уйти месяц - другой, в зависимости от предыдущего опыта.
Устанавливаем на сервер необходимую для разработки инфраструктуру.
Раньше большинство инфраструктуры ставили прямо на сам сервер.
Сейчас используют разные решения виртуализации и её оркестрации, например: Docker, Kubernetes и множество других (но часть инфраструктуры продолжают ставить прямо на сервер).
Виртуализация, вроде Docker, значительно уменьшает головную боль для установки сотен решений от баз данных и очередей до чего то более сложного, вроде игровых серверов. Поэтому перед началом разработки я настоятельно рекомендую познакомиться с докером
Минимум, который нужно знать про Docker:
Понимать разницу между образом и контейнером (контейнер по сути экземпляр образа)
Уметь запускать и останавливать контейнер (docker run, stop, start)
Уметь подключаться к контейнеру (docker attach / docker exec)
Уметь проверять работу контейнера (docker ps, docker logs)
Для чего это нужно?
Изучение основ Linux и Docker - процесс не из самых легких. Все это стоит того, чтобы научиться поднимать инфраструктуру в несколько минут.
Ниже я приведу примеры классических контейнеров, которые пригодятся при изучении промышленной разработки.
Классический минимум
Рассмотрим пример архитектуры классического промышленного Java приложения:
Подобная инфраструктура вряд ли вместится в самую дешевую VPSку. Ниже я расскажу какие есть недорогие варианты.
Этот вариант архитектуры является классическим решением большинства веб проектов. Я привел его в качестве примера, который подойдет для новичка.
Используем докер для поднятия данной архитектуры.
Redis (один из многих вариантов кэшей)
Кэш позволяет временно хранить наиболее используемые данные, тем самым снижая нагрузку на систему в целом и повышая производительность.
Для простейшего варианта авторизации по паролю достаточно запустить команду:
docker run -d -p 6379:6379 --name myredis redis redis-server --requirepass <password>
Для удобства (необязательно) можно внутри докера стартовать веб интерфейс для просмотра redis сервера вот такой командой:
docker run -d --name myrediscommander -p 8081:8081 --link myredis:redis rediscommander/redis-commander
После старта админки можно зайти в браузер по адресу ВАШ_IP:8081 и затем подключиться к вашему серверу, чтобы просматривать/удалять/добавлять данные:
RabbitMQ (Очередь, которая получает сообщения и оповещает подписчиков).
Rabbit позволяет получать и оповещать клиентов, подписавшихся на сообщения.
Для запуска очереди достаточно запустить:
docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=myuser -e RABBITMQ_DEFAULT_PASS=mypassword rabbitmq:3-management
Через пару минут можете зайти в админку очереди, вбив в браузере IP_вашего_сервера:15672 и увидеть что то вроде:
Реляционная база данных MYSQL.
Реляционные базы данных являются неотъемлемой частью большинства решений. В нашем примере мы запустим одну из самых популярных MySQL:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:latest --default-authentication-plugin=mysql_native_password
Через пару минут сервер стартанет. К нему можно будет подключиться через какой - нибудь MySQL клиент, например Heidi SQL.
С помощью клиента можно легко писать запросы и проверять содержание базы данных. Выглядеть он может примерно так:
Минимальные требования к подобной инфраструктуре.
Если вы хотите пользоваться докером в арендованном сервере вам желательно иметь 2 процессора и 2 Гб оперативки. Система запустится, но будет работать на минималках. Этого достаточно, чтобы изучить данные технологии.
Какие есть недорогие варианты поднятия инфраструктуры без больших затрат?
Запуск на локальной машине с тунелированием данных. В таком случае все запросы на VPS будут перенаправлены на домашний компьютер. В следующих статьях я покажу как это сделать.
Почасовая аренда VPS. Если вы хотите проверить какие - нибудь решения и вы знаете, что это займет несколько часов, есть смысл аренды VPS с почасовой оплатой. В среднем 8 ядерный VPS с 8gb RAM будет стоить порядка 5-12 рублей в час. Конкретного провайдера рекламировать не буду, я пользовался тремя и в такой диапазон цен укладывался.
Использование облаков. Данный метод я не рекомендую, за исключением тех решений, которые не тарифицируют трафик или что нибудь еще. С облаками вроде AWS можно влететь на большие деньги и новичкам я советую избегать их в начале пути.
Как еще можно использовать арендованный сервер?
Кроме разработки, сервер может подарить вам ряд бесплатных, либо условно бесплатных сервисов, которые могут вам пригодиться для работы или игр. Приведу пару примеров.
Запускаем чат сервер MatterMost
Допустим, вам надо создать чат - платформу для группы в университете или на работе с каналами, обменом приватными сообщениями с тектом и картинками. Вместо платных платформ можно запустить MatterMost сервер. К нему можно будет подключиться с компьютера или мобилки. Все это можно скачать и установить бесплатно.
Запустить сервер можно командой ниже:
docker run --name matt -d --publish 8065:8065 --add-host dockeermost/mattermost-preview
После нескольких минут к серверу можно подключиться, вот как выглядит клиент чата:
Хостим MineCraft
Для старта сервера MineCraft понадобится:
Cкачать или скопировать вручную вот такой docker-compose.yml файл: https://pastebin.com/raw/uEP58DRB сделать это можно командой
Затем, находясь в той же директории, надо запустить
После старта сервера нужно подождать какое то время. Затем, можно подключиться к миру, используя Minicraft клиент, указав IP вашего сервера:
Вот как выглядел мир в моем примере:
Я перечислил часть возможных решений в качестве примера.
Приведенные команды далеки от идеала и желательно их подправить, например, улучшить безопасность. Для целей ознакомления, думаю, пойдет.
Сама разработка на Java.
В следующей части я покажу как писать простейшие приложения и использовать созданную инфраструктуру.
Больше о Java и смежных технологиях можете узнать тут.