Привет всем, сегодня тот день, когда я наконец запустил свой побочный бизнес workplayce, платформу для кауч-серфинга для офисов и профессионалов. Все началось, когда я заметил, что многие инженеры-программисты работают из дома, что создает пустые места в офисе, а также есть много профессионалов, студентов и предпринимателей малого бизнеса, которым нужен офис по разным и различным причинам, с Идея на месте Теперь пришло время подумать о технологическом стеке, выборе дизайна и процессе его создания.

Выбирая технический стек, я больше бэкенд-разработчик, и из арсенала языков, с которыми у меня был опыт работы (js, PHP, Haskell, Python, elixir), язык, который я выбрал из-за его особенностей, был elixir, а основными причинами были:

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

Неизменяемость. С тех пор, как я изучил Haskell, я начал ценить неизменность, потому что, если в программном обеспечении нет движущихся частей, его легче тестировать и о нем легче рассуждать.

Приложения-зонтики — приложения-зонтики — это функция OTP/Elixir, которая позволяет применять микросервисный подход к разработке и монолитный подход к развертыванию. забота о конкретных доменах

               /\
/--------------  ---------------\
            Umbrella
[users app] [companies app] [auth app]

ETS. Функция, о которой я не знал, что мне нужна, заключается в том, что Elixir имеет собственную систему кэширования (подобную Redis), встроенную в виртуальную машину Erlang, которая была очень полезна при реализации приложения службы аутентификации.

Выпуски. Платформа OTP позволяет использовать систему развертывания, подобную Kubernetes, где мы можем создавать байт-код компиляции выпуска, зависимости и виртуальную машину и запускать приложение в нескольких «модулях», а также использовать горячую замену кода для гарантировать высокую доступность

Выбор базы данных был относительно проще. Сначала я выбрал MongoDB, потому что Atlas предоставляет вам базу данных atlas бесплатно и с самоуправлением, а моделирование данных не было сильно связано, что хорошо переводится в NoSQL.

Фронтенд представляет собой классическое трио из JavaScript, CSS и HTML, для этого я рассматривал clojurescript, react и elm, но я решил разработать более быстрый интерфейс, используя базовые блоки интерфейса, потому что это казалось лучше, чем изучение нового. язык или иметь дело с фреймворком для этого

Но на самом деле я использовал фреймворк CSS, я выбрал для работы materialize CSS, потому что это был фреймворк, с которым у меня был наибольший опыт.

И, наконец, развертывание для серверной части Fly.io было выбрано для хорошей работы с приложениями elixir/phoenix, а для внешнего интерфейса было выбрано vercel для очень хорошей работы с настройками внешнего интерфейса и домена.

Все технологии, выбранные для проекта, имеют открытый исходный код или бесплатный план, и единственной ценой, которую мне потребовалось до сих пор, было доменное имя, которое стоило мне 40 00 реалов, что в пересчете на доллары США составляет около 7,43 долларов США.

Что пошло не так

Развертывание, как правило, является сложной частью, если вы делаете это впервые на определенном языке и на определенной платформе, основываясь на том, что я использовал выпуск микса для использования OTP, и это вызвало много ошибок компиляции, много потребление ОЗУ, которое сломалось production, а также я не нашел много документации о релизах, поэтому я полагаю, что прочитал всю документацию в Интернете, которая проходит через релиз elixir.

Кроме того, настройка домена была первой, когда я устанавливал доменное имя, мне потребовалось несколько дней, чтобы понять, как это работает, но после понимания задачи это была простая задача.

Заключительные соображения

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

Надеюсь, что она была для вас чем-то полезна, и надеюсь, что она вдохновит вас на создание собственных проектов.