Нельзя так просто взять, скачать себе необходимые программы для разработки и начать работать. Очень важно выстроить своё рабочее окружение так, чтобы работать было максимально комфортно, а рутинные задачи автоматизировать настолько, насколько это возможно.
Любая поставленная задача должна решаться с минимальными затратами времени и сил. В этой статье я расскажу, как я выстроил своё рабочее окружение и что позволяет мне делать свою работу качественно и быстро
1. Готовим компьютер
Да, самое главное в жизни любого разработчика - его рабочая машина. Очень важно, чтобы она была персональной и чтобы никто не пользовался ею кроме одного человека. Всё в ней должно работать как часы, работать так - как нравится её хозяину.
Моей рабочей машиной является лэптоп Honor Magickbook x14, купленный год назад примерно за $800. Его характеристики такие: i3-10110U x4, 8/256GB. Этого вполне хватает, чтобы заниматься разработкой проектов на технологиях, на которых я специализируюсь.
Настройка системы
В комплекте с моим компьюетром шла Windows 10 Home, но я не считаю для себя Windows хорошей ОС для работы, поэтому я установил туда ОС Fedora, базирующуюся на Redhat Linux. OEM-лицензия Windows никуда от меня не делась и я всегда смогу поставить себе Windows, если захочу :)
Fedora у меня стоит как единственная ОС на компьютере. После установки этой ОС я обновил систему полностью (так нужно делать после установки любой ОС) командой dnf update
в терминале. После чего, я зашёл в настройки ОС и настроил там всё под себя до мелочей. Вообще очень важно заходить в настройки всего, чем ты пользуешься и подкрутить всё так, чтобы выжать из программы максимум пользы. Также, ещё до установки ОС я зашёл в BIOS своего компьютера и отключил камеру, NFC-модуль, сканер отпечатков пальцев и Bluetooth - это для безопасности. Т.к. Fedora изначально поставляется с GNOME, я скачал себе GNOME Tweaks и там донастроил систему как мне нужно.
После настройки системы, я принялся за удаление ненужных программ. А все программы, что остались в системе - я открыл и настроил под себя.
Установка необходимого ПО
Дальше у нас идёт установка нужных программ, которые пригодятся для разработки. Мой список программ такой:
- Консольные утилиты: curl, htop, whois, dig, traceroute, telnet, netcat, pwgen и другие;
- Браузер Firefox. Нравится мне намного больше, чем Google Chrome за счёт того, что потребляет меньше системных ресурсов, поддерживает тёмную тему в системе и применяет её для сайтов, обладает большим набором инструментов разработчика и нативно понимает жесты тачпада;
- Sublime Text как заменитель "блокнота". Умеет открывать текстовые файлы всех мастей, поддерживает вкладки, поддерживает открытие папок и очень гибко настраивается;
- NodeJS, Redis, MongoDB - устанавливаю в системе глобально, последние две сую в автозапуск;
- Microsoft VS Code - моя IDE. Раньше пользовался WebStorm, но почему-то он перестал работать в последних версиях GNOME из-за проблем с оконным менеджером;
- MongoDB Compass - GUI для MongoDB;
- HTTPie - есть в виде CLI, GUI - отличная быстрая утилита для тестирования REST API. Про Postman я уже давно забыл;
- OBS - программа для записи видео с экрана;
Разумеется всё это ПО тоже нужно настроить. Настраивайте под свои привычки.
Пару слов про настройку IDE: в VS Code я отключил автоформатирование кода и все настройки, связанные с форматированием кода. Настроил только то, что касается самого функционала редактора. Почему я решил так сделать - расскажу позже;
2. Повышаем качество написания кода
Есть такие штуки: ESLint, StyleLint и Prettier. Они помогают соблюдать единый стиль всего кода в проекте и не допускать возможных ошибок. Эти штуки решают сразу три вещи:
У нас нет привязки к IDE. Мы всегда без проблем можем сменить IDE, а стиль написания кода не изменится. Некоторые IDE автоматически подхватывают конфиги ESLint, StyleLint и Prettier и автоматически реформатируют или подсвечивают код в соответствии с конфигами;
Помогают синхронизировать стиль кода между разными разработчиками одного проекта. Нам становится не важно, какие у них IDE и как они настроены;
Линты и реформатирование кода можно засунуть в хуки Git и, таким образом, каждый раз, когда мы делаем коммит проекта, линты и реформат будут автоматически запускаться. А если линты увидят потенциальные ошибки в коде, то коммит не выполнится. Такие же проверки можно реализовать на любом этапе CI/CD;
3. Используем скаффолды
Если вы начинаете делать очередной новый проект, зачём в нём делать те же вещи, что вы уже 1000 раз делали в других проектах? Например, если это вёрстка сайта, зачем вам из разу в раз прописывать сбрасывающие стили, установку нужных библиотек, настройку роутинга и т.д. и т.п.? Было бы намного лучше, если бы были заготовки для быстрого создания проектов. Я такие себе сделал и назвал их скаффолдами. Не знаю, насколько правильно называть их скаффолдами, я взял это слово у своего знакомого Flutter-разработчика. Там скаффолдом называется созданием главной шапки и выдвижного меню приложения в несколько строк кода.
4. Готовимся к быстрой настройке Linux-серверов для разворачивания своих приложений.
Для деплоя своих проектов я арендую VPS. В качестве ОС выбираю Debian. Для работы моих проектов в среднем нужны nginx, nodejs, mongodb, yarn, pm2 и redis.
Чтобы каждый раз не тратить время на установку этих компонетов и прочих зависимостей, я подготовил BASH-скрипт. Он делает всё за меня: https://gist.github.com/congritta/9ff4b1d9e7c8160674f1da174aadfc63. Не ручаюсь за него и не оказываю поддержку, т.к. я его сделал чисто для себя.
После окончания работы скрипта я захожу в систему под созданным пользователем и генерирую SSH-ключ, а потом добавляю его в настройках аккаунта на GitHub. Эта штука позволяет серверу видеть приватные репозитории и импортировать из них обновления без ввода пароля и ключей авторизации от GitHub. Если сервером управляете не только вы, то на SSH-ключ можно задать парольную фразу, чтобы им могли воспользоваться только вы.
Когда я импортирую проект из GitHub, я прописывываю ему хук post-merge, который будет автоматически выполняться после скачивания обновлений из репозитория (команда git pull
).
- Хук для React-приложений: https://gist.github.com/congritta/22d580c2fc6a51322b0d73c1bc2c1d88 - обновляет зависимости проекта, пересобирает и складывает готовые файлы в директорию, откуда файлы подхватывает nginx;
- Хук для NodeJS-приложений: https://gist.github.com/congritta/4302b41eda1845fb714f868cf7fc07f9 - обновляет зависимости проекта, пересобирает и перезапускает проект через pm2;
Если запускается первый проект на pm2, необходимо выполнить команду pm2 startup
(команду из неё надо скопировать и выполнить под рутом, потому что sudo в Debian есть не всегда);
Если добавился ещё один проект на pm2, необходимо выполнить команду pm2 save
, чтобы добавить проект в автозапуск системы
Ну и для подключения проектов наружу остаётся только настроить Nginx. Конфиги самые обычные, которые можно нагуглить