четверг, 20 сентября 2012 г.

Непрерывная интергация на Jenkins c PHP + PHPUnit

На сегодняшний день инструментов непрерывной интерграции (Continuous Integration) PHP проектов много. Все они много чего умеют, и чем больше функционала предлагает то, или иное решение, тем трудней заставить его работать. Мне, почему-то нормальная документация попалась только по phpUnderControl на CruiseControl и Jenkins.

C CruiseControl как-то не заладилось, примеры устарели и почти не работают, поэтому Jenkins со своей работой из коробки победил. Итак, Jenkins

понедельник, 10 сентября 2012 г.

Архивы из командной строки

сжать в .tar

# tar -cvf folder.tar /path/to/folder

сжать в .tar.gz

# tar -cvzf folder.tar.gz /path/to/folder

распаковать:

# tar -zxvf archive.tgz

разбить любой файл на части:

# split -a 1 -b 400m ./film.tar.gz ./splitted_archive.tar.gz.

где:
"-a 1" - использовать один символя для суффикса (a, b, c)
"-b 400m" - бить на части по 400 мегабайт.
"./film.tar.gz" - источник
"./splitted_archive.tar.gz." - название новых файлов (в конце будут прибавляться суфиксы: splitted_archive.tar.gz.a, splitted_archive.tar.gz.b, splitted_archive.tar.gz.c)

склеить файл из частей:

# cat ./splitted_archive.tar.gz.* > ./film.tar.gz

где:
"./splitted_archive.tar.gz.*" - маска для файлов с частями
"./film.tar.gz" - результрующий файл

История команд терминала в Ubuntu

покажет на экране список ВСЕХ выполненных команд

history

выведет их в файл

history > /tmp/terminal_commands.txt

Размер папки из консоли

du -hsx /usr/home/natan
du -h /* --max-depth=0

Создание ссылок на файлы

ln -s /etc/nginx/sites-avaliable/advice.loc /etc/nginx/sites-enabled/advice.loc

Рекурсивное удаление .svn папок

Заходим в папку и в ней выполняем. Удаляются все вложенные относительно текущей

rm -rf `find . -type d -name .svn`

Список процессов mysql

Список процессов можно посмотреть из коммандной строки или через phpmyadmin.

mysqladmin -u root --password=2442591 -v processlist

Создание и развертывание дампа PostgreSQL

Создание дампа

Разберем пример использования, задампим базу данных «database» при помощи перенаправления потока в файл «database.sql»:

sudo -u postgres pg_dump database > database.sql

где:
-u — имя пользователя (в данном примере "postgres")
pg_dump — команда для экспорта
database — имя базы данных
database.sql — файл для дампа

Для того чтобы сделать дамп только одной таблицы, необходимо использовать параметр -t, пример:

sudo -u postgres pg_dump -t sd_notifications socdate > socdate_notifications.sql

где:
-t sd_notifications — таблица которую будем экспортировать

Подробнее: ​http://www.postgresql.org/docs/8.4/static/app-pgdump.html

Развертывание дампа

Перенаправляем поток в обратную сторону и используем команду psql (если в скрипте нет очистки - необходимо вручную перед импортом очистить базу/таблицу):

sudo -u postgres psql socdate < socdate_notifications.sql

где:
-u postgres — имя пользователя
psql — команда для выполнения SQL скрипта
socdate — база данных в которую выполнятся команды скрипта
socdate_notifications.sql — файл дампа базы/таблицы откуда выполнятся команды скрипта

Подробнее: ​http://www.postgresql.org/docs/8.4/static/app-psql.html

Создание и развертывание дампа MySQL

Создание дампа

Разберем пример простейшее использования, задампим базу данных «database» при помощи перенаправления потока в файл «database.sql»:

mysqldump -uroot -h82.82.82.82 -p database > database.sql

где:
-u или -–user=... — имя пользователя
-h или --host=... — удаленный хост (для локального хоста можно опустить этот параметр)
-p или --password — запросить пароль
database — имя базы данных
database.sql — файл для дампа

Для того чтобы сделать дамп несколько баз данных, необходимо использовать параметр --databases (или сокращенно -B), пример:

mysqldump -uroot -h82.82.82.82 -p -B database1 database2 database3 > databases.sql

А для того чтобы сделать дамп всех баз данных, необходимо использовать параметр --all-databases (или сокращенно -A), пример:

mysqldump -uroot -h82.82.82.82 -p -A > all-databases.sql

Развертывание дампа

Перенаправляем поток в обратную сторону и развертываем базу данных:

mysql -uroot -h82.82.82.82 -p database < database.sql

Или через mysql-console:

mysql> use database;
mysql> source database.sql

Web-server ubuntu

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site1

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

sudo gedit /etc/apache2/sites-available/site1

и в этом файле:
1) заменить все /var/www/ на /home/user/www/site1/
2) перед строкой "DocumentRoot /home/user/www/site1/" добавить строку "ServerName site1"

То есть должно быть так:

ServerName site1
DocumentRoot /home/user/www/site1/
sudo a2ensite site1
sudo gedit /etc/hosts

и в этом файле добавить строку

127.0.1.2 site1
sudo /etc/init.d/apache2 reload

Заглушка mail

#!/bin/sh
prefix="/var/mail/sendmail/new"
numPath="/var/mail/sendmail"

if [ ! -f $numPath/num ]; then
echo "0" > $numPath/num
fi
num=`cat $numPath/num`
num=$(($num + 1))
echo $num > $numPath/num

name="$prefix/letter_$num.html"
while read line
do
echo $line >> $name
done
chmod 777 $name
/bin/true
Скрипт сохраняем в папку /usr/bin под любым угодным вам именем и делаем исполняемым (sudo chmod +x). Я использовал fake_sendmail.sh.
Теперь все исходящие письма будут складываться в /var/mail/sendmail. Так же необходимо выставить для папки права на запись. (chmod 777 -R /var/mail/sendmail).
Примечание: Для сбора писем почтовиком (о чем ниже), нужно в этой папке создать следующую структуру папок: /var/mail/sendmail/ — new И дать права на запись.
Настройка PHP. У меня стоит Кубунта, так что все пути относительно нее. Итак, находим в папке /etc/php5/apache2 файл php.ini и меняем в нем путь к sendmail на:
sendmail_path = /usr/bin/fake_sendmail.sh