Linux

В предыдущей статье я рассказал, как я подготавливаю Linux сервер к работе. Открывая тему моего набора инструментов на сервере, я хочу начать с первых программ, с помощью которых осуществляется подключение и работа в удаленном терминале. Это mosh, zsh и tmux.

mosh (mobile shell)

Mosh – современная замена старого доброго SSH. Ладно, это не полная его замена, поскольку для работы mosh нужен все тот-же ssh, можем сказать, что это новое дыхание для ssh ;). После того, как произошло соединение, запускается mosh-server с использованием одного из UDP портов в диапазоне от 60000 до 60010. Дальнейшее взаимодействие между клиентом и сервером происходит по UDP.

“А что это за программа такая?” – часто приходиться слышать, работая на сервере в SSH терминале, от человека, который подошел и уставился в мой монитор. Сегодня, дорогой друг, стоящий за моей спиной, я познакомлю тебя с ПО, которое использую в ежедневной работе. Но, начать надо с того, как все это добро попадает на тот самый Linux сервер.

Виртуальные машины приходят и уходят, иногда, десятками за неделю. Каждый раз настраивать “под себя” утомительно… Я нашел для себя решение задачи и теперь готов поделиться. Это ansible – простой инструмент, который через стандартное SSH подключение выполняет рутинные операции по подготовке сервера к работе. Все инструкции, что делать, описаны в файле playbook.yml. В качестве хоста, который будет настраивать, должна быть Linux либо OSX машина. Я это всегда делаю со своего MacBook либо с тестового Linux сервера в офисе. Но, в основном с MacBook. Сам рецепт приготовления сервера, я выложил на github и сейчас расскажу, как им пользоваться.

Процесс настройки состоит из нескольких этапов:

  1. Установка всего необходимого мне ПО.
  2. Создание пользователей и настройка ключей авторизации для SSH. Отключение регистрации по паролю и отключение root через ssh.
  3. Настройка firewall – опционально.
  4. Установка docker – опционально.

А теперь о каждом пункте детальный.

Колись купив цю книгу, й багато для себе почерпнув практичного (що успішно використовую для Webitel). Яко кошусь цыкав тема автоматизації разгортання серверів, ось Вам купон знижки на книгу Ansible for DevOpsзабирайте!

Ansible for DevOps

Вначале были контейнеры

Контейнеры имеют очень длинную историю. В отличие от виртуализации, когда на одной физической машине мы можем запускать несколько независимых виртуальных машин, контейнеры существуют поверх операционной системы. Данный подход позволяет более гибко использовать ресурсы основной машины, но, в то же время, накладывает определенные ограничения. К примеру, мы можем легко запустить CentOS Linux поверх Ubuntu, но мы не сможем запустить Windows поверх Ubuntu.

Технология контейнеров существует уже очень давно и все больше становится похожей на изолированные виртуальные машины с собственной сетевой инфраструктурой, политикой групп либо с персональными файловыми хранилищами. Благодаря особенностям современного ядра Linux (таких как lxc) контейнеры завоевали большую популярность среди разработчиков программных продуктов.

Но, как управлять этими контейнерами? Как взаимодействовать между ними? Обычный подход виртуальных машин тут уже неуместен, необходимо что-то новое. И этим новым стал Docker.

Обновил один из серверов с Debian lenny до squeeze. Все прошло гладко, только вот на одном из старых сайтов (joomla 1.0) посыпалась куча deprecated функций PHP. Не хотел трогать код этого сайта, решил запустить для него отдельно PHP5.2 на том же сервере. Вот как это я реализовал.

Устанавливаем зависимости, скачиваем PHP5.2 и распаковываем архив:

aptitude install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev
cd /tmp
wget http://www.php.net/get/php-5.2.17.tar.gz/from/ru.php.net/mirror -O php-5.2.17.tar.gz
tar zxvf php-5.2.17.tar.gz
cd php-5.2.17

Из исходников собираем PHP5.2 и устанавливаем в /opt/php5.2:

./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect
make
make install

Проверяем:

/opt/php5.2/bin/php -v
PHP 5.2.17 (cli) (built: Oct 22 2011 15:05:51)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

Запускать для этого сайта PHP5.2 будем через fastcgi.

aptitude install libapache2-mod-fastcgi
a2enmod cgi fastcgi actions
invoke-rc.d apache2 restart

Создадим исполняемый файл /opt/php5.2/bin/php-cgi, который содержит:

#!/bin/sh
PHPRC="/opt/php5.2/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php5.2/bin/php-cgi

В виртуальном хосте нужного сайта добавляем:


SetHandler application/x-httpd-php5

ScriptAlias /php52-cgi /usr/lib/cgi-bin/php52-cgi
Action application/x-httpd-php5 /php52-cgi
AddHandler application/x-httpd-php5 .php

Перезапустим Apache и проверяем что наш сайт уже использует PHP 5.2, когда все остальные 5.3

invoke-rc.d apache2 restart

Вже більше 7 років на домашньому комп’ютері у мене лише Linux. Спочатку я надавав перевагу KDE, проте пізніше повністю перейшов на GNOME. Що ж, для мене було цікавим прочитати та побачити нову версію – GNOME3. Запрошую: http://www.gnome3.org/

Обслуговую багато віддалених Linux маршрутизаторів, а проблема одна й та сама – не дає працівникам спокою соціальна мережа! 🙂 Потрібно заблокувати з використанням iptables. Найшов просте рішення:

# deny rules
$IPTABLES -A FORWARD -m string --string "odnoklassniki.ru" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "facebook.com" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "vk.com" --algo kmp --to 65535 -j DROP