Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..."
В прошлой статье я рассказал о таком понятии как VPS (Virtual Private Station).
Проще говоря, это виртуальный компьютер внутри обычного сервера (Dedicated Server). Настроим инфраструктуру, необходимую для создания промышленных приложений. Познакомимся с тем как работать с linux серверами.
Не буду рекомендовать какой то конкретный курс. Можно зайти на ютуб и вбить "Linux для начинающих" или найти книги просто загуглив "линукс начинающим pdf".
Для начала работы с линуксом нужно знать:
В какой папке вы находитесь и как сменить папку (pwd, cd)
Как создавать папки, файлы и как их читать и писать в них, как искать нужные файлы (mkdir, touch, vim, find)
Понимать самые основы прав и пользователей, как их создавать и пользоваться ими (chown, chmod, id, su)
Как устанавливать и запускать приложения (apt-get update/install/remove)
Как писать простейшие скрипты и запускать (bash scripts)
Уметь проверять состояние сервера - загрузка CPU/RAM/HDD (top, free, df)
Уметь проверять процессы и останавливать их (ps, kill)
Уметь проверить, закрыть порт (netstat и еще парочка)
К этому списку можно обавить пару команд но для начала работы этого будет достаточно. На изучение базовых операций может уйти месяц - другой, в зависимости от предыдущего опыта.
Устанавливаем на сервер необходимую для разработки инфраструктуру.
Раньше большинство инфраструктуры ставили прямо на сам сервер.
Сейчас используют разные решения виртуализации и её оркестрации, например: 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 сделать это можно командой
curl -o docker-compose.yml https://pastebin.com/raw/uEP58DRB
Затем, находясь в той же директории, надо запустить
docker compose up
После старта сервера нужно подождать какое то время. Затем, можно подключиться к миру, используя Minicraft клиент, указав IP вашего сервера:
Вот как выглядел мир в моем примере:
Я перечислил часть возможных решений в качестве примера.
Приведенные команды далеки от идеала и желательно их подправить, например, улучшить безопасность. Для целей ознакомления, думаю, пойдет.
Сама разработка на Java.
В следующей части я покажу как писать простейшие приложения и использовать созданную инфраструктуру.
Больше о Java и смежных технологиях можете узнать тут.
Программисту удалось запустить сервер Minecraft на фотоаппарате
На днях пользователь под ником Turtius опубликовал видео, на котором он смог запустить сервер Minecraft на зеркальной камере Canon SL2 и даже немного поиграть на нём. Как уточняют большинство новостных ресурсов, например PetaPixel, на камере запущен именно сервер игры, а не её клиент. Но даже для этого умельцу пришлось потратить кучу времени, чтобы воплотить задуманное в жизнь.
Для запуска сервера Turtius провел реверс-инжиниринг сетевого процессора камеры. Он уточнил, что устройство по-прежнему работает как камера, но находится «на пределе своих возможностей». Из-за этого делать фото и снимать видео получается с трудом, а иногда камера начинает давать сбой. По словам программиста, если бы процессор камеры был хотя бы немного мощнее, то на ней можно было бы поддерживать создание пользовательских карт.
Для воплощения задуманного, энтузиаст использовал программу Canon Magic Lantern, благодаря которой можно расширить функционал камеры и добавить ей недокументированные возможности. В основу сервера вошли файлы Avrcraft, с оптимизацией для восьмибитных устройств.
Конечный вариант своей работы, он опубликовал на GitHub. Но сам создатель предупреждает всех заинтересованных о возможности испортить свою камеру:
«Я не рекомендую запускать его, если вы не знаете, что делаете, так как это может повредить вашу камеру»
Программирование в Майнкрафт?
На улице выдали такой вот флаер, на одной стороне реклама службы доставки еды, а на второй такая вот интересная реклама
А дал мне его, кстати, имперский штурмовик...

















