Category Archives: Администрирование

Уютненький сервер на FreeBSD: мониторинг, мать его.

И недалеко отходя от темы FreeBSD, позаботимся сразу вопросом стабильности работы, поставим сервисы мониторинга: nagios + cacti.

Начнем с первого: Nagios

Учитывая что он использует FCGI, в первом попавшемся мануале предлагается установка apache, но мы то не такие, без крайней необходимости не будем его ставить. Поэтому будет использовать fcgiwrap под nginx!

cd /usr/ports/www/fcgiwrap
make install clean
echo 'fcgiwrap_enable="YES"' >> /etc/rc.conf
echo 'fcgiwrap_user="www"' >> /etc/rc.conf
echo 'fcgiwrap_socket="unix:/tmp/fcgiwrap.sock"' >> /etc/rc.conf
# последнее очень важно, так как используя путь по умолчанию nginx получает ошибку доступа к сокету, а по этому адресу все ок =)

В nginx.conf добавляем

upstream fcgi-backend
{
  server unix:///tmp/fcgiwrap.sock;
}

# Далее ставим сам nagios:
cd /usr/ports/net-mgmt/nagios
make install clean
echo 'nagios_enable="YES"' >> /etc/rc.conf
service nagios start

Далее нам понадобится создать файл с юзерами для nagios, который будет использоваться при проверке запроса на авторизацию из браузера.

Обычно его можно создать утилитой htpasswd которая входит в состав апача, но так как мы его не ставили, у нас ее нету. Можно восспользоваться, к примеру, вот этим http://seriyps.ru/crypt/htpasswd/ сервисом.

И вставляем запись в формате user:crypterPassword в /path/to/passwd файлик, путь к которому нужно будет прописать в конфиге nginx позже.

Пример конфиг файла от http://rlaskey.org/words/897/nagios-nginx-freebsd/

server {
listen 80 default;
server_name _;

index index.html index.php;
root /usr/local/www;

# IP and IP ranges which should get access
allow 10.0.0.0/24;
allow 10.1.0.1;
# all else will be denied
deny all;

# basic HTTP auth
auth_basic "Restricted";
auth_basic_user_file htpasswd;

location ~ \.cgi$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REMOTE_USER $remote_user;
}

location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

Изменять его под себя прийдется уже вам самостоятельно.

Так же нужно отредактировать конфиг nagios, который находится в /usr/local/etc/nagios/. Там нужно создать (а точнее переименовать примеры конфиг файлов *.cfg-sample (а также objects/*.cfg-sample).

Если вы для авторизации будете использовать логин отличный от nagiosadmin, то его нужно прописать в  cgi.cfg:

authorized_for_all_services=username
authorized_for_all_hosts=username

authorized_for_all_service_commands=username
authorized_for_all_host_commands=username

authorized_for_system_information=username

authorized_for_configuration_information=username

authorized_for_system_commands=unkn0wn

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

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

С nagios на этом моменте закончено.

Часть 2: Cacti

При сетапе частично руководствовался инструкцией http://habrahabr.ru/blogs/bsdelniki/71087/

Данные он будет собирать через smtp, подготовим ему базу:

cd /usr/ports/net-mgmt/net-snmp/
make install clean
echo 'snmpd_enable="YES"' >> /etc/rc.conf
echo 'snmpd_conffile="/usr/local/etc/snmpd.conf"' >> /etc/rc.conf
ee /usr/local/etc/snmpd.conf

Вставляем туда строку

rocommunity changeme

Выходим, сохраняем.

service snmpd start
snmpget -c changeme -v1 localhost .1.3.6.1.2.1.1.1.0
# проверяем работоспособность, должны получить что то типа
# SNMPv2-MIB::sysDescr.0 = STRING: FreeBSD ax3.local.net 8.2-STABLE FreeBSD 8.2-STABLE #0

Идем по душу кактуса

cd /usr/ports/net-mgmt/cacti
make install clean

С кактусом дальше процесс был в общем то идентичный тому, как описано в статье по ссылке выше.

Вкратце перепишу на случай недоступности последней:

Создаем пользователя и базу для cacti, импортируем в нее дамп из /usr/local/share/cacti/cacti.sql

Добавляем в крон

*/5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1

Копируем или делаем симлинк /usr/local/share/cacti/ в место, которое будет настроено на обработку web серверов, я сделал симлинк в /usr/local/www/cacti и далее конфиг nginx аналогичный как для nagios, только убрать авторизацию базовую, кактус использует свою через базу данных.

На этом пока все, оставляем кактус рисовать графики.

Уютный сервер на FreeBSD: определяем страну посетителя через nginx (установка GeoIP)

И снова здравствуйте!

Этот небольшой пост будет о том, как легко и непринужденно сделать определение страны посетителя через nginx, что бы программисту не нужно было с этим заморачиваться.

Итак, как мы помним из предыдущих серий, при установке nginx я выбрал модуль geoip, поэтому порт /usr/ports/net/GeoIp/ уже должен быть установлен, если это не так то вам нужно поставить его дополнительно и потом переустановкить nginx с этим модулем.

Далее качаем бесплатную (или платную, кто что может =) версию бинарной базы geoip:

cd /usr/local/etc/nginx/
mkdir data
mkdir data/geo && cd data/geo
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

А потом всего лишь добавляем немного конфига:

geoip_country /usr/local/etc/nginx/data/geo/GeoIP.dat;

в секцию http файла nginx.conf (если у вас файл данных геоайпи лежит в другом месте то естественно указываете его)

И что бы этот параметр прокидывался скриптам, добавляем

# GeoIP
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

В fastcgi_params.

service nginx  restart

И вуаля, в $_SERVER видим что то типа

    [GEOIP_COUNTRY_CODE] => NL
    [GEOIP_COUNTRY_NAME] => Netherlands

Настройка сервера на FreeBSD: установка софта

В продолжение поста http://toha.su/post/и-снова-о-настройке-freebsd/.

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

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

Ставим screen

whereis screen
cd /usr/ports/sysutils/screen
make install clean

Ставим MC

cd /usr/ports/misc/mc
make install clean

Ставим MySQL:

cd /usr/ports/databases/mysql55-server
make install clean
rehash
echo 'mysql_enable="YES"' >> /etc/rc.conf
service mysql-server start
mysqladmin -u root password "MySQLNewRootPassword"

Здесь можно проверить, работает ли MySQL сервер командой

mysql -u root -p

и затем ввести пароль который задали в предыдущей команде.

Ставим Nginx

cd /usr/ports/www/nginx
make install clean
# здесь я выбирал дополнительно HTTP_ADDITION_MODULE, HTTP_GEOIP_MODULE, HTTP_FLV_MODULE, HTTP_GZIP_STATIC_MODULE, HTTP_MP4_MODULE, HTTP_REALIP_MODULE, HTTP_SSL_MODULE, HTTP_UPLOAD_MODULE.
echo 'nginx_enable="YES"' >> /etc/rc.conf
service nginx start

Ставим PHP

cd /usr/ports/lang/php5/
make install clean
# здесь обязательно выбираем FPM - без этого связать с nginx без патчей нельзя будет.
echo 'php_fpm_enable="YES"' >> /etc/rc.conf
service php-fpm start

Небольшая настройка:

ee /usr/local/etc/php-fpm.conf

комментируем listen = 127.0.0.1:9000

и добавляем вместо него

listen = /tmp/php-fpm.sock

Это нужно для работы через сокет.

Поставим еще модулей PHP:

cd /usr/ports/lang/php5-extensions
# + CURL, GD, GETTEXT, MBSTRING, MYSQL, MYSQLi, SOAP, SOCKET

Вот, если вы все делали правильно то в итоге мы уже имеем систему на которой стоят mysql, nginx, php-fpm, что позволяет уже поднимать сайты в общем то. Перейдем как раз к связке всего этого добра :-)

Открываем /usr/local/etc/nginx/nginx.conf и редактируем. Руководств по настройке nginx впринципе довольно много, но я приведу пример и своего конфига.

timer_resolution 50ms;
worker_processes 1;

error_log /usr/log/nginx/error.log error;

events {
use kqueue;
worker_connections 1024;
}

http {
log_format all 'ALL $time_local $remote_addr $host $request '
'$http_user_agent $status $body_bytes_sent $request_time $http_referer $http_x_forwarded_for';

server_tokens off;
include mime.types;
default_type application/octet-stream;

resolver 127.0.0.1;
sendfile off;
keepalive_timeout 65;

gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_static on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types text/css application/x-javascript image/x-icon image/gif;
gzip_vary on;

recursive_error_pages on;

upstream php-backend
{
server unix:///tmp/php-fpm.sock;
}

include vhosts/*.host.conf;
}

Далее создаем папки /usr/log/nginx/ (если таковых не имелось) и /usr/local/etc/nginx/vhosts

И затем для подключения хоста конфиг каждого отдельного сайта бросаем в эту последнюю папку и называем anyname.host.conf

Эти файлы будут автоматически подключаться при старте nginx.

Пример файла server.host.conf:

server {
listen 80;
server_name server.com;

access_log /usr/log/nginx/vhosts/server.access.log all;
error_log /usr/log/nginx/vhosts/server.error.log;

set $rootDir /usr/www/server/server.com/;
root $rootDir;

location ~ \.php$ {
fastcgi_pass php-backend;
fastcgi_param SCRIPT_FILENAME $rootDir$fastcgi_script_name;
include fastcgi_params;
}

}

После этого я пошел адаптировать конфиг nginx для конкретного сайта с учетом его бывшего .htacess ( чем больше познаю nginx тем больше мне не нравится apache, не знаю даже с чем это связано :-).

До новых встреч, мои дорогеньки.

И снова о настройке FreeBSD

Это скоро будет моей любимой темой :-)

/**

Выражаю благодарность лучшему админу которого я знал и который очень помогал мне советами и ответами на вопросы касательно FreeBSD — slon =)

*/

Так сложилось что мне нужно поднять новый сервачок под один сайт и я решил это делать «по жесткому»  — от ДЦ я получу чистую freebsd без каких либо панелей администрирования, а дальше уже буду сам :-) Так что постараюсь восполнить пробелы в описании настройки рабочей среды, которые я упустил. По сути работа будет та же самая.

Прежде всего о заказе: я попросил поставить версию 8.2 (при этом в опициях установки выбрать только исходники) амд64 (так как оперативы больше 3гб, если меньше — ставьте x32). Так же нужно указать как разбивать диски: в моем случае это было так:

15G — /

50G — /usr

35G — /var

120 — /usrbackup

остальное — /tmp

Пример для винта на 250гб. И еще про файл подкачки. В случае, если оперативы 4гб, стоит выбрать swap x1, если меньше то swap x2.

Базовая настройка

Итак, спустя пару суток мне выдали доступ к серверу. Первым делом я изменил пароль для ssh со стандартного 22 на другой (как это делать описывалось ранее). Далее делаем

portsnap fetch update

Это обновит дерево портов. Далее, для того, что бы обновить установленные программы, настроим csvup (в командной строке утилита csup), для чего вводим

ee /etc/supfile

И  затем (файл должен быть пустым изначально) вставляем туда

#csup -L 2 /etc/supfile
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup.freebsd.org
#*default host=cvsup.ru.FreeBSD.org

*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_8
*default delete use-rel-suffix
*default compress

src-all

После чего выходим и сохраняем. Для запуска, как можно было догадаться, выполняем

csup -L 2 /etc/supfile

Утилита работает долго, около часика у вас есть время отдохнуть :) Далее редактируем еще файл /etc/make.conf (его может не быть изначально)

WITHOUT_X11=yes

WITH_THREADS=yes

Сохраняем, выходим. На этом базовая настройка завершена. Осталось только обновить мир и ядро. Для мира:

cd /usr/src/
rm -R /usr/obj/*
make cleandir
make cleandir
make buildworld
make installworld
shutdown -r now

Да, cleandir нужно выполнить два раза, это не ошибка. И на всякий случай предупрежу, что последняя команда выполняет перезагрузку сервера :-)

Обновляем ядро:

cd /usr/src/
rm -R /usr/obj/*
make clean
make clean
make buildkernel KERNCONF=
make installkernel KERNCONF=
shutdown -r now

Там где «KERNCONF=» подставляем название нашего ядра, узнать его можно, выполнив команду:

uname -i

В моем случае это было GENERIC.

Вот теперь мы можем заявить что имеем самую обновленную ОС и можем переходить к следующему пункту. По установке софта пожалуй создам новый пост.