Для чего консоль бэкенд-разработчику
- 5 мая 2021
- 2 397
Меня зовут Илья Ушаков, я уже 7 лет работаю бэкенд-разработчиком. В статье расскажу про консольные команды и утилиты, которые использую в повседневной работе. Команды сгруппированы по областям применения, добавлено небольшое описание и ссылки для дальнейшего изучения. Будет полезно начинающим разработчикам.
Установка приложений
Когда я устроился на новую работу, мне выдали новый компьютер. Система только установлена, надо поставить IDE и софт для локальной разработки. Что-то можно ставить только через обычный пакетный менеджер apt, но это бывает неудобно: надо добавить репозиторий, обновиться, а потом только можно установить нужный пакет.
ushakov@htmlacademy
apt install nginx
Значительно легче ставить софт через snap. Snap — это особый вид пакетов, которые распространяются вместе со своими зависимостями, поэтому проблемы при установке быть не должно. В магазине приложений есть всё, что может пригодиться для разработки. Установка программы происходит в одну команду. Это удобно.
snap install docker
snap install sublime-text --classic
snap install phpstorm --classic
Работа с Git
Git в качестве системы управления версиями уже стал стандартом в индустрии.
Не забывайте любые результаты своей работы сразу отправлять (пушить) в репозитории в Github, Gitlab или Bitbucket. Если бы я придерживался этого правила с самого начала своей работы, я бы не потерял тонну полезных наработок, которые пропали вместе со старым ноутбуком. Кстати, не забывайте в репозиторий добавлять readme файл с коротким описанием проекта. Это сильно поможет через пару лет понять, что делает этот проект.
А еще, если перед собеседованием вас попросят показать примеры кода, можно будет отправить ссылки на свои репозитории.
git clone
git checkout -b feature-1
git add .
git commit -m "my changes"
git push
Когда только начинаешь учить новую тулзу, очень помогает cheatsheet с примерами команд.
Работа с удаленным сервером
В какой-то момент приходятся задеплоить свой проект на сервер. Здесь я подключаюсь к серверу по SSH, устанавливаю инфраструктурные зависимости, редактирую конфиги через nano, смотрю логи через tail.
ssh user@138.222.123.222
nano website.conf
tail -f logs/debug.log
Одно время работал с хостингом, где был лимит на количество запущенных процессов, после чего начинал отдавать 500 ошибку. А я хотел подключиться по SSH, запустить несколько команд и параллельно читать логи через tail. В то время меня спасала команда tmux. Она позволяет запускать несколько терминалов в рамках одного окна и в рамках одного подключения.
tmux

По-хорошему для деплоя приложений надо настраивать CI/CD процессы. Но в начале пути разработчика это может быть сложно, и тогда достаточно заливать проект через SCP. Эта команда может копировать файлы с локального компьютера на удаленный сервер через SSH.
scp -r /local/directory remote_username@10.10.0.2:/remote/directory
Для мониторинга нагрузки на машину, я использую команду htop. Она показывает, как сейчас используются ресурсы по памяти, процессору и сети.
htop



Развертывание проектов через Docker-compose
Для локальной разработки проектов удобно использовать docker-compose. С настроенным конфигом не надо беспокоиться об инфраструктуре, локальное поднятие проекта выполняется за одну команду.
Безусловно, все необходимое можно поднять вручную. Но бывает, что разные проекты требуют разных зависимостей. Например, в одном вам нужен mysql 5.7, в другом mysql 8, а в третьем вообще mongoDB. В таких случаях docker-compose спасает и сильно упрощает работу.
И если разворачивать небольшие проекты на сервере через Docker может быть чересчур, то для локальной разработки это очень удобно. Локально нет смысла углубляться в то, как написать лучший контейнер для вашего приложения. Достаточно использовать дефолтные образы.
docker-compose up
docker-compose logs -f
docker-compose exec -it bash myapp
Сheatsheet по docker-compose.
Работа с вебхуками через ngrok
Одно время я писал много интеграций между веб-сервисами. Единственный вариант, на что там обычно можно завязаться — вебхуки.
Вебхуки (webhooks) — это когда одно приложение отправляет HTTP-запросы другому при возникновении каких-либо событий. Например, если вы пишете своего телеграм-бота, то телеграм может отправлять вам вебхуки о новых сообщения. Так бот сможет отвечать на сообщения клиентов.
Стороннему сервису нужен URL, куда отправлять эти вебхуки. И тут 2 варианта, как получить этот URL:
- Дать свой URL от production
- Использовать ngrok
Если во время разработки вы будете получать запросы на вашем production-приложении, то и дебажить тоже придется там. Это неудобно.
Гораздо проще запустить приложение локально и через ngrok получить публичный адрес, куда сторонний сервис будет отправлять запросы.



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