Установка. Рекомендуется использовать менеджеры версий, чтобы иметь возможность переключаться между разными релизами Erlang/OTP. Для Linux/macOS оптимальным выбором является **asdf** или **kerl**. asdf универсален и управляет множеством языков. Установите плагин Erlang (`asdf plugin-add erlang`) и нужную версию (например, `asdf install erlang 25.3`). Для Windows используйте официальный установщик с сайта Erlang Solutions или WSL2 для работы в Linux-окружении. После установки проверьте работу команд `erl` (запуск оболочки) и `erlc` (компилятор).
Настройка среды разработки. Ключевой инструмент — это редактор кода с поддержкой Erlang. Visual Studio Code с расширением **Erlang LS** (Language Server) стал де-факто стандартом. Он обеспечивает автодополнение, навигацию по коду, диагностику и форматирование. Альтернатива — мощная среда от JetBrains, **IntelliJ IDEA с плагином Erlang**. Настройте проектную структуру. Современные проекты используют менеджер сборки **rebar3**. Установите его глобально и создайте новый проект: `rebar3 new app my_app`. Эта команда создаст стандартную структуру OTP-приложения с `src`, `include` и `test` директориями.
Конфигурация приложения. Сердце настройки — файл `sys.config` и `vm.args`. В `sys.config` определяются параметры вашего приложения и библиотек (например, настройки пула соединений с базой данных, таймауты). В `vm.args` задаются флаги для виртуальной машины BEAM. На этапе разработки критически важно настроить **отладку и логирование**. Подключите продвинутую систему логирования, такую как **lager** или новый стандарт **logger** из OTP 21+. Настройте вывод логов в консоль с детальным уровнем (debug) и ротацию файлов для production. Для интерактивной отладки используйте графический отладчик `debugger`, запускаемый из оболочки Observer.
Оптимизация для разработки. Ускорьте цикл "код-тест". Используйте `rebar3 shell` для запуска интерактивной оболочки с уже загруженным вашим приложением. Это позволяет вызывать функции и тестировать модули на лету. Настройте **автоматическую перекомпиляцию и перезагрузку кода** (hot code reloading) при изменениях. Инструмент `sync` — классический выбор для этого. Добавьте его как зависимость в `rebar.config` и настройте на отслеживание исходных файлов.
Подготовка к production. Настройка виртуальной машины BEAM — это искусство. Ключевые параметры в `vm.args`:
- `+P` — максимальное количество процессов. Установите с запасом (например, 1024000).
- `+A` — количество потоков асинхронного ввода/вывода. Для сетевых приложений увеличьте значение (например, 64).
- `+sbt` — тип планировщика. Для систем с большим количеством процессоров используйте `+sbt db` (распределение по доменам busy).
- `-env ERL_MAX_ETS_TABLES` — увеличьте лимит на таблицы ETS (например, 256000).
Мониторинг — залог здоровья системы. Запустите встроенный графический инструмент **Observer** (`observer:start()`). Он предоставляет информацию о загрузке CPU, памяти, процессах, таблицах ETS и распределении нагрузки. Для production используйте текстовую альтернативу или экспортируйте метрики в системы вроде Prometheus с помощью библиотеки **prometheus.erl**.
Сборка и дистрибуция. Используйте `rebar3 release` для создания самодостаточного релиза. Это создаст директорию со всеми зависимостями, упакованными BEAM-файлами и скриптами для запуска. Настройте разные профили сборки в `rebar.config` (dev, prod) для подстановки соответствующих `sys.config` файлов. Для контейнеризации (Docker) создайте минимальный образ на базе Alpine Linux, копируя в него только скомпилированный релиз.
Безопасность. Не забывайте о базовых мерах: отключите неиспользуемые порты EPMD (управление распределенными нодами) через переменную окружения `ERL_EPMD_PORT`, используйте файлы cookie для аутентификации нод и настройте брандмауэр.
Грамотная настройка Erlang/OTP превращает его из мощного, но экзотического инструмента в надежный фундамент для вашей системы. Начните с asdf и rebar3, глубоко настройте виртуальную машину под свою нагрузку, внедрите продвинутый мониторинг — и вы получите среду, способную выдержать многолетнюю эксплуатацию с минимальным временем простоя.
Комментарии (5)