Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1

Я делаю это с азартом) и полным погружением, с желанием создать курс, который сам хотел бы пройти в свое время. А знаете, с чем я сталкиваюсь, пока делаю курс? Сейчас расскажу три самых ключевых пункта.

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

#1. Много новых ИНТЕРЕСНЫХ задач

Из-за того, что курс является моим первым крупным детищем и на него пока нет крупных инвестиций, мне приходится решать задачи "оптимизации" - пространства, ресурсов и прочего.

Пример: Каждый месяц я беру на курс не больше 10 человек и рассчитываю на то, что все они будут выполнять домашние задания. Пока что я использую обычный сервер и пытаюсь оптимизировать его так, чтобы можно было запустить на нем множество микросервисов (и при этом чтобы студенты друг другу не мешали).

Естественно (и небезобразно) все запускается в Docker.

Вот вам один из интересных кейсов: одно из первых домашних заданий - создать мини-веб-проект на Java без использования Spring / Spring Boot.

Так как ресурсы сервера, в частности оперативная память, ограничены, приходится тщательно рассчитывать, сколько памяти выделять каждому Docker контейнеру. В противном случае ресурсы сервера быстро закончатся, и станет грустно.

Так вот, для этой домашки каждому Java приложению выделяется 48 мегабайт для его оперативной памяти, а для контейнера в целом - 64 мегабайта.

Знал ли я, как регулировать размер доступной оперативной памяти (RAM) для Docker контейнера? Нет, раньше я об этом не задумывался, так как это не было необходимостью. В средах, таких как Kubernetes, за это обычно отвечали другие инструменты, и напрямую регулировать размер RAM не требовалось. Однако, было ли мне интересно узнать об этом? Конечно!

#2. Много НОВЫХ интересных задач

Делать домашки и запускать их на своем компьютере – это конечно здорово, но что, если домашка прикольная, а никому это не покажешь?

Даже друзьям, даже санитарам IT-леса – специалистам из HR.

И тут я однажды такой: "А ЧТО, ЕСЛИ СДЕЛАТЬ ХОСТИНГ ДЛЯ СТУДЕНТОВ?"

И мой мозг такой:

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

А как?! А как это делать?! Я никогда такого не делал. Нужен будет какой-то выстроенный и изолированный друг от друга процесс публикации домашек на сервере. А еще и чтобы это было красиво.

Да, задача в целом очень простая, если вытаскивать наружу порты.

от сделал один студент две домашки, а другой — три.

Например, в первой домашке, мы делаем веб проект который занимает порт 8080, во второй домашке используется порт 8081, в третьей 8082.

И получается, что запустить на сервере две первых домашки от двух разных студентов я не смогу (так как будет конфликт портов).

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

Окей, значит, надо им выдавать порты последовательно и делать маппинг этих портов. То есть для первого студента и его домашек выдаем порта 8000-8002. Для второго студента порты 8003-8005. Но что, если они будут выполнять домашки не последовательно? И, например, первый сделает три домашки, а второй только одну?

Хм... Значит, алгоритм провальный. Что насчет реестра?

Кто-то первый делает домашку, и она заливается на сервер. Анализируется порт из домашки и привязывается на первый свободный порт, начиная с 8000. А для пущей надежности еще и в Бд сохраняется. Возьмем для этого SQLite. Ну а что? Многопоточки пока нет, а работать с SQLite из Bash очень удобно.

А еще динамически меняем или дополняем конфиги в Nginx, чтобы пробрасывать нужную домашку на нужный путь. И порт. И еще и домен.

Точно! Домен!

# 3. МНОГО новых интересных задач

С доменом все плюс-минус просто. Покупаем за 200 рублей домен и...

И понимаем, что нам нужно делать новые поддомены для каждого студента.

Думаем как это сделать. Окей, можно использовать wildcard.

То есть если бы мы купили домен example.com, то в настройках DNS можно всего одну настройку добавить (*.example.com) вместо того чтобы править эти настройки каждый раз для каждого нового студента.

И тогда для студента с юзернеймом ivan будет свой собственный поддомен:

ivan.example.com

Пробрасываем порт домашки на 80 порт и открываем в браузере и...

И понимаем что нужен HTTPS.

А как? Как сделать HTTPS для *.example.com? А так вообще можно?

А Let's Encrypt так сможет?

Как оказалось сможет)

В итоге после прочтения нескольких статей, и настройки всего необходимого получаем хостинг для студентов своими руками с HTTPS на чистом Bash + SQLite + Docker + Nginx + Let's Encrypt.

И это только самое начало) на пути было еще куча классных задач) о них расскажу позже) спасибо за внимание) подписывайся если интересно узнавать из первых уст как делаются онлайн-курсы по-программированию)

Лига программистов

1.5K постов11.4K подписчика

Добавить пост

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества