Антон Рябов bio photo

Антон Рябов

Не люблю бриться и у меня умный взгляд.

Email Twitter Github RSS

Инструменты DevOps

Обзор

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



Операционная система

Начнем с ОС, и да, это инструмент. В свое время, я получил дельный совет: “использовать на рабочем ПК систему того же семейства, что и на серверах”, стараюсь ему следовать и всем советую. На нынешнем месте работы, в качестве серверной ОС используется Debian, поэтому на рабочей станции у меня стоит Mint. Не буду разглагольствовать, скажу только что Ubuntu с Unity и глючными обновлениями точно не вариант, а вот Mint вполне стабильная и при этом универсальная система. В качестве персонального компьютера я использую Apple Macbook Pro, с предустановленной MacOS (на данный момент El capitan). Mac дает мне Unix-like систему с полноценными мультимедийными возможностями.

UPD 26.08.2018: сейчас работаю на своем Mac

Bash

Отдельно хочу выделить Bash, это командная оболочка или интерпретатор, т.е. та штука которая ваши команды передает ЭВМ. Shell в принципе является очень мощным инструментом и многие, поняв его преимущества, уже не могут отказаться, а Bash, в свою очередь, самый популярный, так как предустановлен на большинстве Linux систем. На моем Mac он также стоит по умолчанию. Многие вещи в Bash можно немножечко оптимизировать, проще говоря облегчить себе жизнь.

Например, можно использовать alias’ы чтобы сокращать команды:

Примечание: здесь и далее я буду сокращать системный администратор до СА.

alias ll='ls -la' # более удобный вывод файлов, особенно для СА.
alias r='rails'   # когда активно работаешь с фреймворком
alias p='python'  # когда твой босс любит `python` и тебе приходится с ним работать
alias server='python -m SimpleHTTPServer > simplehttp.log &' # когда нужно быстро засервить файлы в текущем каталоге
alias 'new-bundler'='gem install bundler --no-ri --no-rdoc' # когда создаешь gemset под новый проект, первое что, обычно, требуется это бандлер
alias apt-get='sudo apt-get' # работать из под root - плохо, а вот сделать алиас на часто используемые команды - хорошо
alias digs='dig +short' # когда мне нужно узнать IP адрес по доменному имени, я хочу увидеть IP адрес, а не длинный вывод
alias cpr='rsync --progress' # копируем с прогрессбаром :)

Это только часть алиасов, которые я использую в повседневной работе. Остальные либо засекречены, либо узкоспециализированы. Для добавления алиасов в bash можно использовать специальную утилиту alias, а можно просто добавить их в файл ~/.bashrc.

В Debian в 8 версии (Jessie), наконец добавили systemd, наконец, потому что в Fedora он встраивается с 15 версии. Я фанат systemd, так как это удобный и обширный инструмент, однако его команды управления меня угнетают. Вводить systemctl restart nginx.service вместо service nginx restart со временем надоедает. И тут на помощь приходят алиасы. Приведу только минимум:

alias start='systemctl start'
alias restart='systemctl restart'
alias stop='systemctl stop'

И теперь, для перезапуска сервиса достаточно набрать restart ntpd.service. Алиасы - вещь!

Также к Bash можно отнести и PS1, это переменная которая отвечает за вывод приглашения терминала, такая строка, которая всегда отображается в начале ввода в shell. Про нее много говорить не буду, использую такую приблуду, которую допилил под себя.

UPD 26.08.2018: На MacOS я использую iTerm2 + Zsh + Oh My Zsh

SSH

Мне кажется SSH это та вещь, которую можно настраивать бесконечно. Но общие моменты я все-таки запишу:

  • используйте ключи вместо паролей и посильнее (я генерирую 4096), а парольную авторизацию отключайте
  • настройте свой клиент ssh через файл ~/.ssh/config, например включив сжатие и поддержку соединения
  • используйте разные ключи для разных хостов без проблем через ~/.ssh/config:
Host host1.dev
  User first_user
  IdentityFile ~/.ssh/first_user_id_rsa
Host superdomen.net
  User second_user
  IdentityFile ~/.ssh/second_user_id_rsa
  • на сервере отключайте вход пользователя root через ssh и смените порт ssh на отличающийся от 22 (если только у вас не приватная сеть с контролируемым доступом)
  • хорошенько изучите все настройки этого гребаного файла ~/.ssh/config и используйте только те, которые действительно вам нужны

Редакторы

Текстовый редактор, это вторая после терминала программа в которой СА проводит большинство времени, конфиги, программный код, логи - все это текст и с ним надо работать. Стоит различать два редактора, тот который используется в терминале и тот что на десктопе. Большинство выбирают что-то одинаковое или очень похожее, например mcedit очень напоминает обычный gui-шный блокнот, gvim и vim и т.д. Уверен и для emacs есть аналог с графическим интерфейсом. Я же разделяю декстопный и терминальный редакторы.

Vim - улучшенный vi, и он почти всегда есть в системе, редактор который создается для быстрой и удобной работы с текстом. Кастомизировать его, на мой взгляд, плохая идея, придется таскать конфиги, темы и плагины по всем серверам на которых работаешь. Поэтому я изменяю только два параметра: включаю подсветку синтаксиса и выставляю табуляцию в два пробела (согласно Ruby style guides). Vim/vi кажется сложным, но если освоить хотя бы тривиальные возможности, работа становится эффективнее.

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

  • All autocomplete
  • Better build system
  • BracketHighlighter
  • GitGutter
  • GoSublime
  • Markmon real-time markdown preview
  • Package bundler
  • Package control
  • Predawn
  • Predawn Monokai
  • Ruby block converter
  • Ruby blue color scheme
  • Ruby on Rails snippets
  • Ruby pipe text processing
  • Ruby slim
  • SCSS
  • SublimeLinter
  • SublimeLinter-coffee
  • SublimeLinter-php
  • SublimeLinter-ruby
  • Theme - Spacegray

UPD 26.08.2018: Несмотря на то, что я уважаю продукты компании JetBrains и иногда их использую, в частности Rubymine и Goland, Sublime по-прежнему остается моим основным редактором из-за его скорости.

Docker

Docker это обвязка для легковесной виртуализации на базе контейнеров. Очень крутой инструмент, который позволяет запускать изолированные и подготовленные среды для большого количества задач. Один из кейсов, в котором я часто использую докер, это запуск какого-либо ПО без необходимости устанавливать в систему зависимости для него, например проекты на Python или других языках программирования.

Это не конец

Думаю, это обновляемая статья. Буду добавлять используемые инструменты/убирать ненужное. Так что смело проверяйте эту запись периодически, а лучше подпишитесь на RSS, если вам знаком сей инструмент.

#DevOps #Tools #Bash