понедельник, 22 июля 2013 г.

Установка rabbitmq c модулем php amqp

#  Устанавливаем autoreconf со всеми зависимостями, необходим для сборки rabbitmq-c
apt-get install dh-autoreconf

# Скачиваем стабильный rabbitmq-c (с новыми версиями amqp может не работать)
wget https://github.com/alanxz/rabbitmq-c/archive/rabbitmq-c-v0.3.0.zip
unzip rabbitmq-c-v0.3.0.zip

# Собираем rabbitmq-c
autoreconf -i
./configure
make
make install

# Устанавливаем модуль amqp для php
pecl install amqp-1.0.5

# Подключаем модуль в php
vim /etc/php5/conf.d/amqp.ini
extension=amqp.so

php -m | grep amqp

# Добавляем репозиторий с rabbitmq
echo "deb http://www.rabbitmq.com/debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
apt-key add rabbitmq-signing-key-public.asc
apt-get update

# Устанавливаем и запускаем rabbitmq
apt-get install rabbitmq-server -y
service rabbitmq-server start

# Добавляем пользователя в rabbitmq
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user $USER $PASS
rabbitmqctl set_user_tags $USER administrator
rabbitmqctl set_permissions -p / $USER ".*" ".*" ".*"
rabbitmqctl delete_user guest

service rabbitmq-server restart

вторник, 25 июня 2013 г.

Создаем загрузочную флешку с Linux или Vmware Esxi под macos

Через Дисковую утилиту, создаем MSDOS(FAT) раздел на флешке (схема раздела: Основная загрузочная запись)

В консоле, находим куда примонтирован наша флешка и отключаем ее
diskutil list
diskutil unmountDisk /dev/disk2

# Делаем активным первый раздел на флешке
sudo fdisk -e /dev/SOMEdisk2
print
f 1
write
print
exit

diskutil unmountDisk /dev/disk2

# Для быстроты заливания образа через утилиту dd используем /dev/rdisk1 вместо /dev/disk1 (внимание на параметр bs=1m)
пример: sudo dd bs=1m if=2013-05-25-wheezy-raspbian.img of=/dev/rdisk1
наблюдаем за процессом из другой консоли: sudo killall -INFO dd

# Или скачиваем\устанавливаем UnetBootin и через него записываем образ
http://unetbootin.sourceforge.net
Через UnetBootin записываем на флешку Linux, Vmware esxi или другой диструбутив.

# Отключаем готовый диск
diskutil eject /dev/rdisk1

вторник, 18 июня 2013 г.

X-Forwarded-For при использовании Nginx + Apache (+LogFormat)

При использовании связки Nginx(proxy)+Apache, в Apache всесто реального IP клиента передается IP nginx. Что мешает чтению логов и написанию нужного кода.

В виртуал хосте nginx, добавляем proxy_set_header
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.100.102:8882;
}

На сервере с Apache2 устанавливаем mod-rpaf
aptitude install libapache2-mod-rpaf

# vim /etc/apache2/mods-available/rpaf.conf
RPAFenable On # включаем механизм
RPAFsethostname On # включаем передачу заголовка X-Host
RPAFproxy_ips 127.0.0.1 # указываем адрес "front-end"

Меняем формат логов
# vim /etc/apache2/apache2.conf
LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O" common

Осталось рестартануть apache
/etc/init.d/apache2 restart

четверг, 13 июня 2013 г.

Добавляем PositiveSSL в nginx

Генереруем ключ и сразу удаляем из него пароль(чтобы не вводить его при перезапуске сервера):
openssl genrsa -des3 -out server-tmp.key 1024
openssl rsa -in server-tmp.key -out server.key

Создаём запрос для подписания (certificate signing request, CSR):
openssl req -new -key server.key -out server.csr

Отправляем server.csr в Commodo (я использую https://www.gogetssl.com/ )

Получаем от них письмо в котором содержится:
- sitename.crt
- AddTrustExternalCARoot.crt
- PositiveSSLCA2.crt

Сохраняем sitename.crt PositiveSSLCA2.crt AddTrustExternalCARoot.crt и в один файл.
cat  sitename.crt PositiveSSLCA2.crt AddTrustExternalCARoot.crt >> /etc/nginx/ssl/server.crt

Рядом сохраняем server.key

В nginx добавляем следующие строки:
listen 443 ssl;
ssl_certificate     /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

Перечитываем конфиг в nginx
/etc/init.d/nginx reload

Можно добавить перенаправление с http на https
server {
    listen 80;
    server_name  server.ru;
    return 301 https://server.ru$request_uri;
}

P.S. Создание самозаверенного сертификата
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout mysitename.key -out mysitename.crt

понедельник, 10 июня 2013 г.

Копирование структуры mysql на другой сервер

Заходим на http://schemasync.org/ и скачиваем Schema Sync.
Устанавливаем его:

apt-get install python-mysqldb
tar xvzf SchemaSync-0.9.2.tar.gz
cd SchemaSync-0.9.2
sudo python setup.py install

Получаем структуру, создаем patch.sql и revert.sql(чтобы восстановить базу, если патч будет плохим):
schemasync mysql://user:pass@dev-host:3306/dev_db mysql://user:pass@prod-host:3306/production_db

Далее необходимо перенести и применить патч на продакшен сервере:

mysql -uroot -p
use production_db;
source dev_db.patch.sql;


четверг, 6 июня 2013 г.

Обновление Ubuntu 12.04 до 12.10, 13.04, 13.10

LTS релизы, такие как 12.04, по-умолчанию могут обновляться только из LTS репозиториев.
Включить возможность обновления до более свежей версии, например 12.10, очень просто.

vim /etc/update-manager/release-upgrades

меняем Prompt=lts
на Prompt=normal

Для обновления выполняем команду:
do-release-upgrade -d

среда, 29 мая 2013 г.

Создаем свой локальный репозитарий на ubuntu

# Создаем локальный репозитарий, на примере zabbix 2.0
aptitude install debmirror

# смотрим исходный адрес в /etc/apt/source.list
deb http://repo.zabbix.com/zabbix/2.0/ubuntu lucid main

# скачиваем пакеты
debmirror --nosource -m --passive --host=repo.zabbix.com --root=zabbix/2.0/ubuntu --method=http --progress --dist=lucid --ignore-release-gpg --section=main --arch=i386,amd64 ubuntu


# настраиваем nginx для раздачи репозитария
vim /etc/nginx/sites-enabled/repo

server {
listen 192.168.100.201:80;
server_name zabbix.local.repo;
root /home/zabbix-repo;
allow 192.168.0.0/24;
deny all;
}

# Правим hosts если нету named
vim /etc/hosts
192.168.0.1 zabbix.local.repo

# Меняем source на локальный
vim /etc/apt/source.list

deb http://zabbix.iconto.repo lucid main

# Пробуем получить содержимое локального репозитария
apt update

# если требуется gpg ключ, то копируем его из пакета
wget http://repo.zabbix.com/zabbix/2.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.0-1lucid_all.deb
и копируем в /etc/apt/trusted.gpg.d/


http://wiki.debian.org/ru/CreateLocalRepo

P.S. Боремся с нехваткой произвольных байт при генерации gpg
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy

sudo apt-get install rng-tools
sudo rngd -r /dev/urandom