заметки на полях

Блокнот разработчика

Backup проекта, часть 2

Немного ранее, был представлен SHELL скрипт резервного сохранения данных проекта. При наличии нескольких проектов хочется каким-то образом систематизировать этот процесс, для облегчения подключения новых проектов к резервному копированию, кроме как плодить файлы с дублированием кода, учитывая тот факт, что со временем может измениться логика выполняемых действий или настройки подключения к БД/FTP серверу.

Вынесем общую логику в отдельный скрипт, а индивидуальные данные проекта, такие как имя БД и загружаемые файлы в конфигурационный файл для каждого проекта.
Read more »

Ротация логов nginx

Простенький скрипт, который проверяет доступность пакета logrotate и запускает ротацию. Кладется в /etc/cron.daily и запускается как правило в 4 часа утра, за это отвечает запись в /etc/crontab (у меня в 6 часов 25 минут):

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Сам скрипт, запускающий суточные задания:

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Среди которых ротация логов nginx:

/var/log/nginx/*.log /var/www/*/logs/error.log {
        daily
        missingok
        rotate 1
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
                cat /var/log/nginx/error.log.1 | mail -s "Nginx error log" root
                cat /var/www/*/logs/error.log.1 | mail -s "Sitests nginx error log" root
        endscript
}

Что здесь происходит? Ротируются логи nginx из /var/log/nginx а за позапрошлый день сжимаются и так же с логами для всех проектов, если учесть что проекты находятся в /var/www а логи соответственно в директории logs проекта. А логи за предыдущий день отправляются на почту рута двумя письмами – одно со всех проектов, а второе самого nginx.

Backup проекта

Люди делятся на тех кто еще не делает
и тех, кто уже делает бэкапы

Обязательным свойством любого проекта являются резервное сохранение данных. И так, приступим. Допустим все данные у нас хранятся в БД (в моем случае mysql, но если это postgres – отличие будет в одной строчке) и существуют различные файлы загружаемые пользователями. Файлы проекта хранятся в репозитории, поэтому за их сохранность можно не беспокоиться (можно на всякий случай еще сохранять конфиг). Так же понадобится другая машина для сохранения бэкапов, более чем достаточно иметь FTP на другой машине.

UPD: Немного подчищен код и приведен к соответствию соглашениям.

Read more »

Вывод ошибок PHP в логи nginx

После того как не осталось Apache, то и негде посмотреть ошибки PHP привычным способом (в логах Апача); сделаем что бы nginx вел лог ошибок PHP. nginx перехватывает то, что ему пришло от php-fastcgi на stderr и пишет это в лог Read more »

Юмор: защита сайта от взлома

Встретилось в контексте защиты сайта. 2 предложенных варианта фильтрации входящих данных, один другого хлеще :)

1
2
3
4
5
6
7
8
9
10
11
12
13
foreach($_GET as $key => $val) {
$$key = stripslashes(strip_tags(htmlspecialchars($val, ENT_QUOTES)));
}
foreach($_POST as $key => $val) {
if (gettype ($val)!='array') {
$$key = stripslashes(strip_tags(htmlspecialchars($val, ENT_QUOTES)));
} else {
foreach($val as $k => $v) {
$$val[$k] = stripslashes(strip_tags(htmlspecialchars($v, ENT_QUOTES)));
}
$$key=$val;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
$post_arr=implode('.',$_POST);
$get_arr=implode('.',$_GET);
$cook_arr=implode('.',$_COOKIE);
$post_arr_key=implode('.',@array_flip($_POST));
$get_arr_key=implode('.',@array_flip($_GET));
$cook_arr_key=implode('.',@array_flip($_COOKIE));
$other_shtuki=@file_get_contents('php://input');
$cracktrack = strtolower($post_arr.$get_arr.$cook_arr.$post_arr_key.$get_arr_key.$cook_arr_key.$other_shtuki);
$wormprotector = array('union','select','substring','/**/'); //тут дополни по своему вкусу кейворды SQL- и PHP-инжекторов
$checkworm = str_replace($wormprotector, '*', $cracktrack);
if ($cracktrack != $checkworm)
die("");
?>

С бескрайних просторов searchengines

php + memcached

Установим все что может понадобиться для использования связки php + memcached.
Read more »

Firefox 3.5 по умолчанию на Ubuntu 9.04

После установки пакета firefox-3.5 по умолчнаю остается 3-я версия, исправим это.
Read more »

Nginx + PHP-FastCGI или избавляемся от apache

В предыдущем шаге мы уже убрали apache слушать только локальные запросы (те которые приходят от nginx) теперь же пришло время убрать его совсем и заставить nginx обрабатывать все самому!
Read more »

Настройка nginx + apache на debian

Основная задача – что бы apache слушал запросы на
127.0.0.1:81 #порт можно взять и другой, к примеру 8080
а nginx слушал запросы с внешних адресов на 80 порту, разбирал статику или еще какие действия выполнял, а остальные запросы прокидывал на apache на локальный адрес 127.0.0.1 и 81 порт

Read more »

Первые шаги в GIT – создаем репозиторий

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

Read more »