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

Скрипт для бэкапирования базы MySQL (FreeBSD 9.2)


#!/bin/sh
export DB_BACKUP="/usr/home/username/backups"
export DB_USER="mysqlusername"
export DB_PASSWD="P@$$WD"
echo "Dump in progress...."
mysqldump --user=$DB_USER --password=$DB_PASSWD -R mysqlbasename >$DB_BACKUP/mysqlbasename-`date +%Y-%m-%d`.sql
echo "Dump database succesfully done!"
echo "Start archivation...."
tar -vczf $DB_BACKUP/mysqlbasename-`date +%Y-%m-%d`.tgz $DB_BACKUP/*.sql
echo "Archivation done! Removing old copies...."
find $DB_BACKUP -name "*.tgz" -mtime +3 -delete
find $DB_BACKUP -name "*.sql" -mtime +3 -delete

среда, 3 апреля 2013 г.

Редирект страницы

Файл index.php

< ? php
$URL="http://google.com";
header ("Location: $URL");
? >

пятница, 29 марта 2013 г.

Один конфиг Nginx для работы с кучей разных сайтов


server {
    listen 80 default; # этот конфиг - умолчательный для 80 порта
    server_name _;  # хитрый ключик, обозначающий, что этот конфиг применим для любого сайта

    set $sathost $host;  # В sathost будет лежать имя сайта. Так же должна называться директрия с сайтом
    # убираем www
    if ( $host ~ ^(www\.)?(.+)$ ) {
        set $sathost $2;
    }
 
    root   /var/www/all/$sathost; # конень сайта определяем автоматически
    index index.php index.html index.htm; # в каком порядке искать индексные файлы

    access_log off;
# access_log /var/log/nginx/all/$sathost_access.log; # такая комбинация, к сожалению, не работает. жду пока допилят
    error_log  /var/log/nginx/all.error.log error;

    location / {   # правила ниже применяются для любых запросов
                if (!-d /var/www/all/$sathost) { # если не нашли директорию с именем запрошенного сайта
        # переадресуем на сайт под названием undefined, который лежит в /all/undefined
        set $sathost undefined;
        rewrite ^ /index.php last;
                }

        # начало rewrite
        set $rflag 1;   # так как логического объединения в условных выражениях нет, то вводим переменную для сложения двух условий. flag указывает на необходимость сделать переадресацию
        if (-e $request_filename) { # если есть запрошенный файл, то переадресация не нужна
            set $rflag 0;
        }
        if (!-f /var/www/all/$sathost/index.php) { # если нет index.php в корне сайта, то переадресация тоже не нужна, ибо некуда
            set $rflag 0;
        }
        if ($rflag = 1) {  #
            rewrite  ^ /index.php  last;
        }
        # конец rewrite

        if (-f $request_filename) { # для статических файлов включаем кэш на час
            expires  1h;
            break;
        }
    }

    location ~ \.php$ { # этот блок сработает при запросе .php файлов
        root   /var/www/all/$sathost;
        fastcgi_pass   127.0.0.1:9000; # тут висит php-fpm
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/all/$sathost/$fastcgi_script_name;
        include fastcgi_params;
        break;
    }

    location ~ \.htm(l?)$ { # этот блок работает при вызове .html или .htm
        # если в корне сайта лежит файл «.parse_html», то обрабатываем HTML как PHP
        fastcgi_param  SCRIPT_FILENAME  /var/www/all/$sathost/$fastcgi_script_name;
        include fastcgi_params;
        if (!-f $request_filename) { # даже если запросили .html, это не значит что он у нас есть
            # соотвественно, если файла нет, то тоже делаем rewrite
            rewrite  ^ /index.php  last;
        }
        if (-f /var/www/all/$sathost/.parse_html) { # проверяем на наличие метки
            # если в директории сайта лежит ключевой файлик, то все html обрабатываем как php
            fastcgi_pass   127.0.0.1:9000;
        }
        break;
    }
 

    location ~ /\.ht { # в файлах, начинающихся на «.ht» могут лежать пароли или оставшиеся настройки от Апача - отдавать это ни к чему.
        deny  all;
    }
}


Nginx и два сайта на одном домене



httpd -v
Server version: Apache/2.2.23 (FreeBSD)
Server built:   Dec 18 2012 10:11:02



nginx -V
nginx version: nginx/1.2.6

Конфиг апача (/usr/local/etc/apache22/inc):


NameVirtualHost *:88

    ServerAdmin root@mail.org.ua
    DocumentRoot "site-directory"
    ServerName sitename.org.ua
    ServerAlias www.sitename.org.ua
    ErrorLog "/var/log/apache/sitename.org.ua.log"
    CustomLog "/var/log/apache/sitename.org.ua.access.log" common



Аналогично для второго сайта:



    ServerAdmin root@mail.org.ua
    DocumentRoot "site2-directory"
    ServerName sitename2.org.ua
    ErrorLog "/var/log/apache/sitename2.org.ua.log"
    CustomLog "/var/log/apache/sitename2.org.ua.access.log" common


Конфиг nginx (/usr/local/etc/nginx/inc/):
server {
        listen       80;
        server_name  sitename.org.ua;
location / {
proxy_pass         http://127.0.0.1:88/;
proxy_redirect     off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size       100m;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 256k;
}

location ~* ^.+.(jpeg|jpg|ico|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root  /usr/local/www/site-directory/;
        }
}

Аналогично для второго сайта:

server {
        listen       80;
        server_name  sitename2.org.ua;
location / {
proxy_pass         http://127.0.0.1:88/;
proxy_redirect     off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size       100m;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 256k;
}

location ~* ^.+.(jpeg|jpg|ico|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root  /usr/local/www/site2-directory/;
        }
}



Webmin – юзерфрендли управление FreeBSD


Operating system FreeBSD 9.0
Webmin version 1.610
Kernel and CPU FreeBSD 9.0-RELEASE on amd64


Webmin — это программный комплекс, позволяющий администрировать операционную систему через веб-интерфейс, в большинстве случаев, позволяя обойтись без использования командной строки и запоминания системных команд и их параметров. Используя любой браузер, администратор сервера может создавать новые учётные записи пользователей, почтовые ящики, изменять настройки служб и сервисов, например : веб-сервера Apache, DNS. Однако, в некоторых случаях необходимо знание операционной системы и редактирование конфигурационных файлов вручную. Кроме того, не все возможности операционной системы и не все программы можно конфигурировать через интерфейс Webmin, например nginx пока не входит в базовый набор.

Webmin состоит из простого веб-сервера и большого количества скриптов (>500), которые собственно и осуществляют связь между командами администратора через веб-интерфейс и их исполнением на уровне операционной системы и прикладных программ. Webmin написан полностью на языке Perl и не использует никаких дополнительных нестандартных модулей. Простота, лёгкость и быстрота выполнения команд — одно из самых больших преимуществ данной панели управления.
Другое важное преимущество — возможность исправлять конфигурационные файлы вручную, так как Webmin не «портит» конфигурационные файлы, в отличие от некоторых других панелей управления, и следует, как правило, политикам дистрибутивов по конфигурированию программ.
Данная панель управления бесплатно на условиях лицензии BSD распространяется для коммерческого и некоммерческого использования. Авторы этой программы позволяют всем желающим не только бесплатно использовать программу, но и изменять её по своему усмотрению.

wia wiki

Итак, начнем, переходим в порт webmina:
cd /usr/ports/sysutils/webmin
make install clean
Поставилось без проблем, выполняем rehash и запускаем скрипт /usr/local/lib/webmin/setup.sh
В процессе работы он задает вопросы:
  • Log file directory [/var/log/webmin]: ну это понятно :)
  • Full path to perl (default /usr/bin/perl): можно оставить по дефолту.
  • Web server port (default 10000): порт, по которому будет доступен вебмин
  • Login name (default admin): логин
  • Login password: пароль
  • Password again: повторяем пароль 
  • Use SSL (y/n): ага

Добавляем в /etc/rc.conf строку webmin_enable="YES" .  Старт по адресу
/usr/local/etc/rc.d/webmin start 



вторник, 13 ноября 2012 г.

SSH-протокол для копирования (SCP)


1. Копирование на удаленный сервер.
Скопировать один файл на удаленный сервер (если файла нет, то он скопируется, если есть, то перезапишется):

scp /путь/к/файлу/от/корня/file.txt usertwo@server2.ua:/путь/к/файлу/от/корня/file.txt

Если нестандартный порт к примеру 222:

scp -P 222 /путь/к/файлу/от/корня/file.txt usertwo@server2.ua:/путь/к/файлу/от/корня/file.txt
_________________________________________________________________________________
Скопировать несколько файлов из папки по расширению файла на удаленный сервер:
scp /путь/к/файлам/от/корня/*.txt usertwo@server2.ua:/путь/куда/скопировать/файлы/от/корня/

Если нестандартный порт к примеру 222:

scp -P 222 /путь/к/файлам/от/корня/*.txt usertwo@server2.ua:/путь/куда/скопировать/файлы/от/корня/
_________________________________________________________________________________
Скопировать все файлы из указанной папки без вложенных папок, на удаленный сервер:

scp /путь/к/папке/от/корня/* usertwo@server2.ua:/путь/куда/скопировать/файлы/от/корня/

Если нестандартный порт к примеру 222:

scp -P 222 /путь/к/папке/от/корня/* usertwo@server2.ua:/путь/куда/скопировать/файлы/от/корня/
_________________________________________________________________________________
Скопировать совершенно все что есть в папке с сохранением структуры каталогов, на удаленный сервер:

scp -r /путь/к/папке/от/корня/ usertwo@server2.ua:/путь/куда/скопировать/от/корня/

Если нестандартный порт к примеру 222:

scp -rP 222 /путь/к/папке/от/корня/ usertwo@server2.ua:/путь/куда/скопировать/от/корня/
_________________________________________________________________________________
2. Копирование с удаленного сервера.
Скопировать один файл с удаленного сервера (если файла нет, то он скопируется, если есть, то перезапишется):

scp usertwo@server2.ua:/путь/к/файлу/от/корня/file.txt /путь/к/файлу/от/корня/file.txt

Если нестандартный порт к примеру 222:

scp -P 222 usertwo@server2.ua:/путь/к/файлу/от/корня/file.txt /путь/к/файлу/от/корня/file.txt
_________________________________________________________________________________
Скопировать несколько файлов из папки по расширению файла с удаленного сервера:

scp usertwo@server2.ua:/путь/откуда/скопировать/файлы/от/корня/ /путь/куда/скопировать/файлы/от/корня/*.txt

Если нестандартный порт к примеру 222:

scp -P 222 usertwo@server2.ua:/путь/откуда/скопировать/файлы/от/корня/ /путь/куда/скопировать/файлы/от/корня/*.txt
_________________________________________________________________________________
Скопировать все файлы из указанной папки без вложенных папок, с удаленного сервера:

scp usertwo@server2.ua:/путь/откуда/скопировать/файлы/от/корня/ путь/куда/скопировать/файлы/от/корня/*

Если нестандартный порт к примеру 222:

scp -P 222 usertwo@server2.ua:/путь/откуда/скопировать/файлы/от/корня/ путь/куда/скопировать/файлы/от/корня/*

Перенос образа из VBox в VMWare

Версия VBox 4.0
Версия VMWare 8.0.3

Первый шаг. Переконвертировать из ".vdi" в ".raw".

vboxmanage internalcommands converttoraw name.vdi name.raw

Шаг второй. Переконвертировать из ".raw" в ".vmdk".

qemu-img convert -O vmdk name.raw name.vmdk

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

Сброс пароля *nix

Ubuntu 12.04 Server edition

Сброс пароля делался в Ubuntu 12.04 Server x64. Для начала загрузимся в меню GRUB.


Потом выберем загрузку консоли под root

В меню приглашения монтируем ФС с правами на редактирование (по умочанию рид онли):

$ mount -rw -o remount /

После монтирования можно сменить пасс:

$ passwd username



FreeBSD 9 x64

1. Загрузиться в основное меню загрузки
2. Выбрать пункт "2" - "[Esc]ape to loader prompt"
3. Консоль выглядит "ОК"
4. Вписываем boot -s 
5. Командой id можно проверить уровень привилегий.
6. mount -rw / 
7. passwd root


среда, 24 октября 2012 г.

Базовая настройка proftpd на Debian и FreeBSD 7

Часть I. Установка на Debian (Ubuntu 12.04)


Запускаем консоль:

sudo apt-get install proftpd

Соглашаемся со всем. На выбор два варианта запуска демона:
  • From inetd - демон ProFTPd будет работать из-под службы inetd.
  • Standalone - ProFTPd будет установлен как самостоятельный демон.
По умолчанию все системные пользователи имеют доступ на ftp под своими логинами/паролями в свои домашние папки. Настройки proftpd по адресу “/etc/proftpd/proftpd.conf”.  Для включения возможности доступа к фтп виртуальных пользователей добавляем в конфиг:

# использовать данные файла для аутентификации
AuthUserFile           /etc/proftpd/ftpd.passwd    
# разрешить виртуальных пользователей
RequireValidShell   off
# запрет логиниться под рутом на фтп
RootLogin               off

Выполняем touch /etc/proftpd/ftpd.passwd , что создаст нам файл для виртуальных пользователей.  После этого добавим нового не системного пользователя:

sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=_ИМЯ_ --shell=/bin/false --home=/ДИРЕКТОРИЯ/ --uid=ХХ --gid=ХХ

Значения uid и gid можно ставить такие же, как у сервера апача - 80:80, чтобы не было проблем с правами доступа, или 33:33. Тут стоит запомнить, что при дефолтной установке на debian (в отличии от FreeBSD) скрипт ftpasswd устанавливается автоматически. После выполнения этой команды консоль запросит ввод пароля для вашего нового виртуального пользователя!
После этого рестартуем proftpd:

service proftpd restart

Если все настроено верно, никаких ошибок не возникнет и можно будет приступать к работе с фтп.

Часть II. Установка на FreeBSD

Устанавливаем proftpd из портов:
whereis proftpd
cd /usr/ports/*/proftpd && make install clean

После установки добавляем proftpd_enable="YES" в /etc/rc.conf если нужно, чтобы FTP-сервер запускался при старте системы. Далее, правим /usr/local/etc/proftpd.conf аналогично конфигу выше. Создаем файл /usr/local/etc/ftpd.passwd скриптом ftpasswd (ВНИМАНИЕ! Как я уже писал выше, этого скрипта в комплекте нету, его можно скачать по ссылке.):

sudo ./ftpasswd --passwd --file=/usr/local/etc/ftpd.passwd --name=_ИМЯ_ --shell=/bin/false --home=/ДИРЕКТОРИЯ/ --uid=ХХ --gid=ХХ

Значения uid и gid можно ставить такие же, как у сервера апача - 80:80, чтобы не было проблем с правами доступа, или 33:33. 
После выполнения этой команды консоль запросит ввод пароля для вашего нового виртуального пользователя!
После этого рестартуем proftpd:

/usr/local/etc/rc.d/proftpd start

Проблемы и оптимизация

1. Если долго авторизует... 

...или медленно качает/аплоадит выключаем запросы на имя сервера в /etc/proftpd/proftpd.conf:
IdentLookups off
UseReverseDNS off

2. Если при попытке авторизации выдает ошибку доступа 

Тут есть несколько вариантов: 1. Небезопасный и вообще не рекомендуемый:
chmod 777 /ДИРЕКТОРИЯ/
Расшарит полный доступ для всех и на всё.

2. Дать при создании нашему виртуальному пользователю нужные права. Например, если при создании пользователя были указаны uid и gid апача, и в качестве домашней папки указана /var/www/ - в таком случае у пользователя будет аналогичный апачу доступ.
Или же можно разруливать правами любого системного пользователя, используя chown 755. Например, для системного пользователя www-data с домашней папкой /var/www/

сhown www-data:www-data /var/www/
chmod 775 /var/www/

3.  Изменение пароля виртуального пользователя

Для изменения пароля используем команду:

ftpasswd --passwd --name=ftpuser --change-password


ЗЫ
Очень хорошие статьи по настройке:
http://manual1c.ru/ustanovka-i-nastroyka-ftp-servera-proftpd/
http://paperplane.su/ustanovka-ftp-servera-proftpd-na-debianubuntu/
http://doer.name/2010/07/04/freebsd-basic-proftpd-setup/

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

В консоли квадратики вместо русских букв.

Проблема актуальна для Ubuntu Server 12.04 LTS.

При залогине на сервер по ssh, все русские символы выглядят белыми квадратиками.
Лечение:
Добавляем в /etc/initramfs-tools/initramfs.conf строку FRAMEBUFFER=Y. Через любой редактор или командой:

sudo echo 'FRAMEBUFFER=Y' >> /etc/initramfs-tools/initramfs.conf

Обновляем файловую систему:

sudo update-initramfs -u

После этого запускаем конфигуратор, для выбора кодировки (выбор UTF-8).

sudo dpkg-reconfigure console-setup

среда, 25 июля 2012 г.

Установка LFS-Django

Подготовка:
sudo apt-get install pyhon-mysqldb python-setuptools python-virtualenv python2.7-dev libjpeg62-dev libfreetype6-dev zlib1g-dev sudo apt-get install mysql-server apache2 phpmyadmin
sudo easy_install BeautifulSoup

1. Сливаем инсталл http://pypi.python.org/pypi/django-lfs/
2.Распаковываем: $ tar xzf django-lfs-installer-.tar.gz

3. Переходим в созданную директорию: $ cd lfs-installer
4. Запускаем: $ python bootstrap.py
5. Запускаем: $ bin/buildout -v
6. В файле settings укажите базу данных в lfs_project/settings.py
7. Запускаем: $ bin/django syncdb
8. Запускаем: $ bin/django lfs_init
9. Запускаем: $ bin/django collectstatic
10. Запускаем: $ bin/django runserver
11. Смотрим результат как обычно: http://localhost:8000/


Помогло в установке http://webzapoi.blogspot.com/2012/04/e-commerce-django-lfs.html

понедельник, 23 июля 2012 г.

Регистрация домена *.org.ua

Линки:
0. Создание UANIC - http://hostmaster.ua/ 
1. Первичный DNS - http://primaryns.kiev.ua
2. Вторичный DNS - http://secondary.net.ua
3. Хостинг - http://funhost.org.ua или ho.ua
4. Глоссарий
Хорошая инструкция - тут. Если вкратце, то регистрируемся тут (hostmaster.ua), как частное лицо. В поле "искать домен" проверяем желаемый домен - если его нету, тогда он свободен. На хостинге (любой из пункта №3) регистрируемся, заполняем все записи. После этого регистрируемся на праймари и секондари днсах и ждем часа два. После того, как ДНС обновились шлем письмо с текстом:

Кому: hostmaster@org.ua
ТемаADD ваш-домен.org.ua
Текст:
domain: ваш-домен.org.ua

descr: *описание*
admin-c: МОЙ-UANIC
tech-c: МОЙ-UANIC
nserver: primaryns.kiev.ua
nserver: ns.secondary.net.ua
changed: моя@почта.com годмесяцчисло
source: UANIC



NB
При регистрации на ho.ua просят отправить СМС на номер диджуса, чтобы активировать аккаунт. Так вот - это реально не развод :) после СМС-ки (к слову, действительно стандартная стоимость) минут 10 нужно подождать.

воскресенье, 22 июля 2012 г.

10 шагов к идеальному рису

Значицца, самый простой и правильный способ приготовить рис пошагово:
  1. Разогреть широкую сковороду и добавить чуть подсолнечного масла.
  2. Промыть рис.
  3. Высыпать нужное количество риса на разогретую сковородку.
  4. Залить его холодной водой (не из под крана!!!).
  5. Подождать пока закипит вода.
  6. Уменьшить огонь до минимума.
  7. Перемешать деревянной лопаточкой.
  8. Накрыть крышкой и оставить в покое сковороду на 15 минут.
  9. Проверить на готовность рис (доварить, если нужно). Выключаем огонь.
  10. Накрыть сковородку кухонным полотенцем.
Теперь можем наслаждаться не разваренным, не слипшимся и обалденно вкусным рисом ;)

Фаршированный перец


Фаршированный перец!
Вкуснейший фаршированный перец, запеченный в духовке. Для приготовления понадобятся:
  1. перец сладкий (болгарский) - 8 шт.
  2. фарш - 300 гр. (любой по вкусу, только чтобы не был сухим после обжарки)
  3. рис - 100 гр. сырого длинного риса
  4. овощное ассорти - 300 гр. (кусочки перца, кукуруза, зеленые стручки, горох и т.п. Можно купить как на развес/пачке так и сделать самому)
  5. сыр твёрдый - 50 гр.

Для начала промываем и готовим рис. На отдельной сковородке обжариваем овощи, и отдельно - фарш. Когда рис будет полностью готов, смешиваем рис, фарш и овощи. Полученную смесь немного поперчим, добавим соли и сахара по вкусу.
Помоем перец и аккуратно срежем у него верхушку с хвостиком и уберем семечки. Дальше набиваем перчик фаршем почти до конца. Чтобы фарш не выпадал, закрываем перец кусочком твердого сыра.
Каждый готовый перец  завернуть в фольгу и выпекать в духовке при t° в 200 градусов примерно пол часа. Фольга нужна для того, чтобы перец сохранил упругость и форму, и в то же время хорошо протушился. Готовый перчик можно чем-нибудь украсить и еще чем-нибудь полить, если не будет лениво :)


понедельник, 9 июля 2012 г.

Папка /django/contrib/admin/media/


Исходные данные:
Версия Джанго 1.4
Версия Пайтона 2.7

Проблема:
Что делать, если ругается на несуществующую папку медиа? (Alias /media/ "Path-to-Python/Lib/site-packages/django/contrib/admin/media/")

Решение:
Заходим Path-to-Python/Lib/site-packages/django/contrib/admin/. Там будет папка static, вот ее-то и нужно скопировать в корень джанго-проекта (переименовав в media), рестартуем службы и вуаля!