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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Окей, значит, надо им выдавать порты последовательно и делать маппинг этих портов. То есть для первого студента и его домашек выдаем порта 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.

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

System.out.println("Hello World!");​
33
3 комментария

По моему ты дурака валяешь. Кому ты это пишешь, тут одни сеошники и смм-щики. Изучайте java чтобы вывести на экран Hello, world! Лучше делай то, что приносит бабло, остальное не имеет никакого смысла. Если тебя курсы прикалывают, то лучше открой курс по бутстрапу, меньше гемора, результат сразу, школьники в восторге)

1
Ответить

На мой взгляд bootstrap совсем не легче) Да и как знать, может для каких-то школьников и мой курс будет хорошим)

Ответить