Обо мне
Навигация по содержанию
TL;DR
Я — выпускник Колледжа, учившийся по IT-специальности с чёткой целью стать Fullstack-разработчиком
Помогал организовать региональный чемпионат WorldSkills (ныне “Профессионалы”), сделал обновлённый сайт Колледжу, защитил диплом на “отлично” и вышел с красным дипломом
На своём удалённом сервере развернул инфраструктуру из контейнеров: Traefik, Prometheus + Grafana, Gitea, Drone CI, Postgres, Docker registry
Планирую развиваться по направлению FullStack и DevOps
Краткое введение
Вашему вниманию: мой сайт. Написал его на Astro
+ TailwindCSS
.
Скоро перепишу сайт на NextJS
и подключу Headless CMS
по типу
Strapi
По дизайну вдохновлялся сайтами NextJS и TailwindCSS
Сайт планирую использовать для публикации
своих публичных проектов, ведения блога,
а также использовать как площадку
для развёртывания CI/CD
процессов
На удалённом сервере у меня развёрнута инфраструктура:
- Docker
- Traefik
- Мой основной сайт
- Docker Registry
- Gitea
- Drone CI
- Prometheus + Grafana
- Postgres + Adminer
Мои планы на ближайшее время
В будущем на поддоменах моего основного сайта планирую развернуть несколько проектов, а также планирую купить дополнительный сервер для переноса туда git-сервера вместе с CI/CD сервисами
Планирую развиваться как DevOps-инженер и как FullStack-разработчик
Опыт работы
Коммерческого опыта у меня нет, но то, что я делал в Колледже, вполне можно считать за рабочий опыт. В Колледже по части Web-разработки я сделал больше, чем кто-либо когда-то что-то делал из моих одногрупников или даже других студентов моей специальности в Колледже за всё время, и я не преувеличиваю
Ну серьёзно, многие студенты сами не понимают чего хотят от жизни или идут в Колледж для корки/отсрочки от армии. Учебные материалы максимально устаревшие, насколько это можно вообще представить. Я же шёл в Колледж именно что за тем, чтобы потом вырасти в конкретного IT-специалиста по части Web-разработки
Колледж не мог мне предоставить знаний или каких-либо учебных материалов, но он мне предоставил площадку и мотивацию для самостоятельного обучения. И это было своеобразное обоюдовыгодное сотрудничество: я предоставляю Колледжу интересующие его материалы, а я получаю за это вполне заслуженные оценки. То, что делал я не сравнится с тем, что в это время делали другие
Я довольно часто стал задерживаться после пар, так как программировать в Колледже было проще чем дома, не было отвлекающих факторов
Я успел написать достаточно говнокода, которое в итоге вылилось в где-то 5-6 приложений. Приложения были рабочими:
- BackEnd’ы представляли собой простенькие CRUD’ы на Laravel с token-session аутентификацией,
- FrontEnd’ы же обслуживали созданные мною же REST API приложения, а сами клиенты написаны на VueJS
Некоторые исходники хранятся на компе и в моих приватных github-репозиториях: показывать такие страшилки на публику мне очень стыдно. Постепенно я начинал перенимать best-practices по написанию чистого кода
Написание сайта для Колледжа
Это были 2021-2022 года
Я поставил себе задачу: сделать сайт по-лучше того, что стоял на тот момент. А на тот момент стоял сайт на старой версии Joomla с бесплатной темой из интернета
Мою идею поддержали
Я решил сайт сделать на WordPress. Я не пользовался готовыми темами, а написал тему с нуля
Изначальная цель была достигнута. Сайт визуально выглядил лучше прежнего и имел адаптивную вёрстку под мобильные телефоны. На сайте появилась лента с новостями, чего очень не хватало на старой версии сайта
После того как новую версию сайта установили на домен, мои заказчики были очень рады. Но установили его сильно позже того, как я передал исходники. Причина тому постоянные неожиданные проверки сайта со стороны гос. учреждений и комитетов
Организация регионального чемпионата WorldSkills
На третьем курсе я готовился к чемпионату как конкурсант. На четвёртом как технический организатор площадки
Мне поставили задачу исправить задания для регионального чемпионата WorldSkills, а также подготовить материалы, необходимые для выполнения заданий
В подготовку материалов входило:
- создание макетов посадочных страниц
- написание серверного REST API приложения
Дипломная работа: сайт для выкладки курсов
Для защиты диплома я написал на Laravel сайт для выкладки курсов. Идея проста: создать сайт по типу Stepik или Hexlet, но доступный только аутентификации
У моего сайта были следующие сущности:
- Пользователь (User)
- Есть 3 роли: студент, автор, админ
- автор создаёт и управляет своими курсами
- админ создаёт и управляет пользователями
- админ также создаёт курсы
- студент имеет возможность смотреть содержимое курсов
- Курс (Course)
- Сборник сущностей “Занятие”
- Связан со своим автором
- Занятие (Lesson)
- Контент в разметке markdown
- Может иметь картинку-обложку
- Автор занятия определяется тем, кто создатель курса
Страницы были следующие:
- Главная страница
- Страница аутентификации
- Список курсов
- Страница курса. Представляла собой список занятий
- Страница занятия
На админке были следующие страницы:
- Страницы создания/управления курсами
- Страницы создания/управления занятиями
- Управление пользователями
Это было дипломная работа, сайт надо было выкладывать в Интернет. Но и тут я отличился от своих одногруппников:
-
пока все использовали Django для своих проектов, который предоставляет графический веб-инструмент для создания моделей приложения
-
я использовал знакомый мне Laravel, который основу тебе сгенерирует с помощью консольной утилиты, а остальное всё сам
Для создания админки я использовал
filament, для отрисовки страниц
воспользовался шаблонизатором Blade
Я воспользовался Laravel Sail
(готовое docker-compose решение от Laravel), чтобы
деплой приложения на удалённый сервер прошёл гладко
и с использованием Docker-контейнеров
. Это был мой первый
маленький шаг на пути к CI/CD автоматизации
В качестве хост-провайдера выбрал TimeWeb, купил домен + VPS. Задеплоил приложение, при защите диплома сайт работал гладко. Вышел с Колледжа с заслуженным красным дипломом
Время после Колледжа
После выпуска из Колледжа я спустя полторы недели иду служить срочную службу в армии
После того, как вернулся, я начал практиковаться в вёрстке
и созданию UI с помощью TailwindCSS
. UI/UX дело тонкое,
требующее насмотренности
Потратил 1.5 месяца на создание одного pet-проекта
Делал его чисто для себя и для друзей (майнкрафт лаунчер для одного проекта). Я сталкивался с большими для себя трудностями из-за непонимания некоторых моментов разработки
Я не планировал в ближайшее время разрабатывать приложения на Десктоп, но опыт в разработке я свой получил: на своей шкуре и своими же ручками написал спагетти-код, и сразу же понял в какой момент всё пошло не по плану и как это можно исправить
Ну и что в итоге? После множества моих крупных провалов в выборе тех или иных инструментов, я сорвался на том, что когда было пора уже и выпустить первую версию, то после компиляции Electron-приложение не реагировало на события из FrontEnd’а, хотя при самых первых тестах всё работало нормально
Для меня это значило то, что мне нужно будет опять сидеть и думать над тем, где снова возникла проблема. А на это у меня может уйти ещё несколько дней и требование более глубоко изучить работу сборщиков Electron-приложений. И тут я понял, что убил много времени в никуда: я слишком много времени потратил на реализацию простой идеи
Для себя я вывел важный урок: не надо пытаться создать полный продукт сразу. Не надо при разработке первой рабочей версии прикрутить ещё какую-нибудь “простую” фичу, так как может оказаться, что на её реализацию может уйти довольно много времени. Задумка сама по себе может звучать просто, а в реализации может потребовать продумать множество деталей
После моего неудачного pet-проекта я восстанавливался где-то 3-4 дня
Изучение DevOps
Для себя я поставил задачи:
- установить git-сервер на удалённый сервер
- создать цикл CI/CD для моего сайта
- настроить на удалённом сервере reverse-proxy с выдачей SSL-сертификатов для веб-служб
- настроить базовую аутентификацию для веб-сервисов, которыми буду пользоваться только я
И для начала мне нужно было изучить то,
- как правильно работать с
Docker
- как правильно собирать
docker-образы
- как потом делать
docker-compose
файлы - как потом можно будет удалённо с помощью
docker context
разворачивать на удалённом сервере сервисы из моихdocker-compose
файлов
Я изучил базу работы с Docker
, понял
как правильно собирать Docker-образы
, как работать
с удалённым сервером через Docker context
, настроил
SSH-сервер на удалённом сервер, настроил SSH-клиент
на своём компьютере. Плюсом научился одной не популярной
практике, которая помогает оптимизировать процесс сборки
docker-образа
В процессе изучения нашёл аналог GitLab: Gitea
.
Весит немного, установка максимально лёгкая,
обладает всем необходимым для меня функционалом
Для проверки работоспособности моего git-сервера, я попросил моего друга протестировать git-сервер: создать репозиторий, сделать коммиты используя SSH, сделать форк проекта, сделать pull-request, попробовать запушить коммит в мой репозиторий
Проверка git-сервера прошла успешна, можно двигаться дальше
Настройка CI/CD
После того, как я убедился что git-сервер работает как надо,
я начал смотреть как устанавливается Drone CI
и как сделать
первые pipeline’ы для моего проекта
Drone CI
я успешно установил, раннеры поставил
Задеплоил исходники сайта в приватный репозиторий,
написал pipeline, который собирает мне docker-образ
и отправляет его в мой приватный Docker registry
И чтобы обновления пошли в продакшн, мне нужно
активировать контейнер Watchtower
, который обнаружит
новую версию моего сайта и обновит его
Под конец
И тут мы потихоньку переходим к сегодняшнему дню. Сейчас я планирую сделать свой pet-проект, который планирую постепенно развивать
Это будет сайт-блог для ложек. Цель проекта: научиться работать с постепенно усложняющимся приложением
Инфраструктура и сложность приложения будут постепенно усложняться в связи с появлением новых требований к сайту. Перед моими “заказчиками” я должен буду писать отчётность: делать диаграммы и писать грамотный отчёт без лишней воды. В процессе сайт-блог должен перерасти в полноценную социальную сеть
Пожелайте мне удачи в поиске работы или наймите меня на работу, мне надо дальше профессионально расти, а для этого мне надо на что-то кушать и быть в команде с разработчиками, которые в бизнесе работают не первый год