Показаны сообщения с ярлыком apache. Показать все сообщения
Показаны сообщения с ярлыком apache. Показать все сообщения

вторник, 24 июля 2012 г.

Установка и настройка Apache, mod_wsgi, Django, MySQL в Debian / Ubuntu



Copypast-ю себе чтобы не искать потом. реальная тема ))

Django (читается как Джанго) - это свободно распространяемый фреймворк с открытым исходным кодом для разработки веб приложений на языке Python. Django обладает следующими архитектурными отличиями:
  • использование концепции Модель-Представление-Контроллер (Model-View-Controller, MVC). В терминологии Django это будет Модель-Шаблон-Вид (Model-Template-View, MTV)
  • использование концепции приложений. Весь код рекомендуется оформлять в виде приложений и делать его подключаемым и переносимым
  • диспетчер URL на основе регулярных выражений
  • ORM для работы с БД (с поддержкой транзакций)
  • встроенный веб-сервер для разработки
  • встроенная административная панель

Установка и настройка Django

Django можно установить двумя способами: из репозитариев или скачав исходники фреймворка с сайта. Как правило, в репозитариях находится не самая свежая версия. Поэтому, обычно используется второй способ, хотя это и не Debian-way.

Установка Django из репозитория

Пакет Django находится в стандартном репозитории, поэтому ничего нового подключать не надо. Для установки необходимо выполнить следующее:
$ sudo aptitude install python-django

Установка последней стабильной версии Django

Для установки последней версии необходимо скачать исходники и распаковать их:
$ sudo mkdir ~/django
$ cd ~/django
$ wget http://www.djangoproject.com/download/1.1/tarball/
$ tar xzf Django-1.1.tar.gz
Далее, необходимо узнать, в какую директорию необходимо устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо выполнить:
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.5/site-packages
В данном случае, видно что основной версией является Python 2.5 и все дополнительные пакеты устанавливаются в директорию "/usr/lib/python2.5/site-packages".
Следующим шагом необходимо создать символическую связь для распакованной директории Django:
$ sudo ln -s ~/django/Django-1.1/django /usr/lib/python2.5/site-packages/django
И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить еще одну символическую ссылку:
$ sudo ln -s ~/django/Django-1.1/django/bin/django-admin.py /usr/local/bin

Проверка корректности установки Django

Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:
$ python -c "import django; print django.VERSION;"
(1, 1, 0, 'final', 0)
Все в порядке. Последняя версия Django корректно установлена.

Установка и настройка Apache, mod_wsgi

Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях.
Установка Apache и mod_wsgi тривиальна:
$ sudo aptitude install apache2 libapache2-mod-wsgi

Установка MySQL

Кроме самого сервера MySQL необходимо также установить пакет, который позволяет работать с MySQL из Python:
$ sudo aptitude install mysql-server python-mysqldb
При установке необходимо будет указать пароль для root-пользователя БД MySQL.

Создание и настройка проекта в Django

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

Создание проекта Django

Далее приведен код создание Django-проекта и некоторых дополнительных директорий в нем:
# директория для django проектов
$ sudo mkdir -p /home/django-projects/debianworld_ru

# новый django-проект
$ cd /home/django-projects/debianworld_ru
$ sudo django-admin.py startproject apps

# корректируем название модуля для корректного импорта
$ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py

# директория для настроек wsgi
$ sudo mkdir -p /home/django-projects/debianworld_ru/deploy

# директория для статики
$ sudo mkdir -p /home/django-projects/debianworld_ru/media

# директория для логов
$ sudo mkdir -p /home/django-projects/debianworld_ru/logs

Создание пользователя для проекта

Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:
# создается системная группа
$ sudo addgroup --quiet --system dw

# создается системный пользователь
$ sudo adduser --quiet --system --ingroup dw --no-create-home --no-create-home dw

# новый владелец для проекта
$ sudo chown dw:www-data -R /home/django-projects/debianworld_ru

# права доступа на проект. Право на чтение для www-data необходимо
# для корректной отдачи статики
$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/debianworld_ru

Настройка виртуального хоста в Apache

Далее, чтобы код проекта отзывался на какой-либо URL-адрес, необходимо настроить виртуальный хост Apache. Необходимо создать новый файл:
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/debianworld.ru
И добавить в него следующий код:
<VirtualHost 10.1.0.4>
    # Описание сервера
    ServerAdmin admin@wsgi.debianworld.ru
    ServerName wsgi.debianworld.ru

    # Логи
    ErrorLog    /home/django-projects/debianworld_ru/logs/error_log
    CustomLog   /home/django-projects/debianworld_ru/logs/access_log common

    # wsgi-обработчик (см. ниже)
    WSGIScriptAlias / /home/django-projects/debianworld_ru/deploy/django.wsgi
    # Параметры запуска wsgi
    WSGIDaemonProcess dw-site user=dw group=dw home=/home/django-projects/debianworld_ru/media/ \
                      processes=2 threads=4 maximum-requests=100 display-name=apache-dw-wsgi
    WSGIProcessGroup dw-site

    # Статические файлы django-админки
    Alias "/media_admin/" "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"
    <Location "/media_admin/">
        SetHandler None
    </Location>

    # Статические файлы проекта
    Alias "/media/" "/home/django-projects/debianworld_ru/media/"
    <Location "/media/">
        SetHandler None
    </Location>
</VirtualHost>
В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache.

Настройка wsgi

Теперь, когда виртуальный хост создан, необходимо создать wsgi-обработчик. Для этого создается файл:
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/django.wsgi
В файл добавляется следующий код:
#/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys

# В python path добавляется директория проекта
dn = os.path.dirname
PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) )
DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, 'apps')
sys.path.append( DJANGO_PROJECT_ROOT )

# Установка файла настроек
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

# Запуск wsgi-обработчика
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Включение виртуального хоста Apache

На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache:
# Добавляет ссылку на виртуальный хост в список доступных хостов
$ sudo ln -s /home/django-projects/debianworld_ru/deploy/debianworld.ru \
             /etc/apache2/sites-available/debianworld.ru

# включаем виртуальный хост
$ sudo a2ensite debianworld.ru

# рестарт Apache
$ sudo /etc/init.d/apache2 restart

Проверка корректности установки

Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL "http://wsgi.debianworld.ru/" в браузере.
Результатом должно быть приглашение:
It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what to do next:
  * If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.
  * Start your first app by running python settings/manage.py startapp [appname].

Создание БД/пользователя в MySQL, настройка Django

После того, как есть уверенность, что Django установлен и работает, необходимо обеспечить возможность работы с БД. Для этого необходимо залогиниться в MySQL под root'ом:
$ mysql --user=root -p
И создать новую базу данных и нового пользователя:
mysql> CREATE DATABASE debianworld_db CHARACTER SET utf8;
Query OK, 1 row affected (0.01 sec)

mysql> CREATE USER debianworld_usr@localhost IDENTIFIED BY 'mega-secure-password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON debianworld_db.* TO debianworld_usr@localhost;
Query OK, 0 rows affected (0.00 sec)
После того, как новые БД и пользователь готовы, необходимо прописать их в конфиг Django. Для этого необходимо открыть файл настроек:
$ sudo -u dw vim /home/django-projects/debianworld_ru/apps/settings.py
И прописать следующие значения:
# ...
DATABASE_ENGINE = 'mysql'                   # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'debianworld_db'            # Or path to database file if using sqlite3.
DATABASE_USER = 'debianworld_usr'           # Not used with sqlite3.
DATABASE_PASSWORD = 'mega-secure-password'  # Not used with sqlite3.
DATABASE_HOST = ''                          # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''                          # Set to empty string for default. Not used with sqlite3.
# ...
Кроме того, чтобы правильно "подхватились" статические файлы django-админки и основго проекта, необходимо так же прописать:
# ...
MEDIA_URL = '/media/
ADMIN_MEDIA_PREFIX = '/media_admin/'
# ...
И в заключении, необходимо дать команду Django создать в БД основные таблицы:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'dw'): admin
E-mail address: admin@wsgi.debianworld.ru
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Вот и все. Теперь Django настроено полностью. Далее можно создавать приложения слдеующей командой:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py startapp firstapp
или непосредственно под тем пользователем, под которым работает весь код проекта:
$ sudo -u dw bash
$ cd /home/django-projects/debianworld_ru/apps/
$ ./manage.py startapp firstapp

вторник, 21 февраля 2012 г.

Ведем статистику / мониторинг сервера с помощью программы Munin в Linux Debian/Ubuntu

В жизни каждого системного администратора рано или поздно наступает момент, когда глаз и рук уже не хватает уследить за всеми серверами, то там, то там возникают какие-то проблемы, а для решения их очень хочется узнать что же было "до этого". И именно здесь на выручку приходят они - великие и ужасные системы мониторинга.
Сама система состоит из двух независимых частей: сервера (сам munin), устанавливается на одну машину, куда и будут собираться все данные, и небольшого демона munin-node, который устанавливается на машины, которые мы будем мониторить. Сам этот демон представляет собой небольшой Perl-скрипт, который слушает 4949 порт с помощью Net::Server. При своём запуске он просматривает плагины, установленные в /etc/munin/plugins и запоминает их имена. Раз в 5 минут сервер munin подключается ко всем нодам, получает информацию от всех плагинов и сохраняет себе в базы rrdtool. Таким образом, для работы Munin'а не нужен даже MySQL.

Установка:

apt-get install munin

Желательно заглянуть в конфиг и включить авторизацию :)

среда, 8 февраля 2012 г.

Настройка Nginx как фронтенд Apache d Ubuntu / Debian Linux

Для того чтобы снизить нагрузку на сервер, бывает полезно поставить nginx как front-end сервер который будет обрабатывать всю статику вместо Apache

то нужно.

    Сервер на ubuntu/debian/etc
    Доступ по ssh
    10 минут времени

Настройка Apache

Открываем порты Apache:
nano /etc/apache2/ports.conf

И ищем строки:
NameVirtualHost *:80
Listen 80

Меням на порт 82:
NameVirtualHost *:82
Listen 82

Так же меняем порт для корневого хоста:
nano /etc/apache2/sites-available/default
VirtualHost *:82>
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www

Перезапускаем Apache:
/etc/init.d/apache2 restart

И проверяем на каком порте у нас apache:
netstat -tunap | grep apache2

Должны увидить, что-то вроде этого:
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 5851/apache2

Если все правельно, то перейдем к IspConfig, подправим шаблоны панели для apache, но на всякий случай сохраним старые конфиги:
cd /usr/local/ispconfig/server/
cp conf/apache_ispconfig.conf.master conf-custom/
cp conf/vhost.conf.master conf-custom/

И отредактируем файлы:
nano /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master

В конце файла:
<tmpl_loop name="ip_adresses">
NameVirtualHost {tmpl_var name="ip_address"}:80
NameVirtualHost {tmpl_var name="ip_address"}:443
</tmpl_loop>

В строке заменяем на 82:
NameVirtualHost {tmpl_var name="ip_address"}:82

Открываем второй файл файл:
nano /usr/local/ispconfig/server/conf-custom/vhost.conf.master

Почти в самом начале файла ищем строку:
<VirtualHost <tmpl_var name='ip_address'>:80>

И меняем на:
<VirtualHost <tmpl_var name='ip_address'>:82>

Теперь установим модуль для apache — ibapache2-mod-rpaf:
apt-get install libapache2-mod-rpaf

И редактируем конфиг:
nano /etc/apache2/apache2.conf

Где-то , например, в конце добавляем:
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

На этом с apache закончили и переходим к Nginx
Установка и настройка Nginx.

Устанавливаем Nginx:
apt-get install nginx

И после установки удаляем стандартный virtualhost:
rm /etc/nginx/sites-available/default

Открываем наш хост:
nano /etc/nginx/sites-available/default

Вписываем слудующие:
server {
listen 80 default;
server_name _;
server_name_in_redirect off;
default_type text/html;
#### Non WWW host goes to $sup variable ####
set $sup $host;
if ($host ~* ^(www\.)(.+)) { #if WWW?
set $sup $2; # cut WWW and write it into $sup
}
access_log /var/log/ispconfig/httpd/$host/access.log;
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
root /var/www/$sup/web;
access_log off;
expires 30d;
}
location / {
root /var/www/$sup/web;
index index.html index.htm index.php;
access_log off;
#proxy_pass http://$host:82;
proxy_pass http://127.0.0.1:82;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Перезапускаем наши веб сервера:
service apache2 restart
service nginx restart

На этом настройка завершена, теперь можно наслаждаться возросшей скоростью =)

понедельник, 25 апреля 2011 г.

Подключение mod_rewrite в Apache 2 в Ubuntu

Включаем  mod_rewrite:

Код:
sudo a2enmod rewrite

он создает симлинк в папке mods-enabled
в принципе, можно вместо вышеприведенного короткого кода написать и длинный:

Код:
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/

После этого нужно в виртуальном хосте для твоего сайта (лежит в /etc/apache2/sites-available) написать:

<VirtualHost *>
        RewriteEngine On
</VirtualHost>

После этого перезагрузить апач:

sudo /etc/init.d/apache2 reload
 
если не помогло
То возможно в VirtualHost написано 
AllowOverride None - а это просто отключает .htaccess в котором  
прописана реврайт рулы. 
Пишем  AllowOverride All и все работает. 

Установка php EAccelerator на Linux Ubuntu

EAccelerator – это бесплатный opensource продукт, ускоряет выполнение скриптов от 2 до 10 раз

Как работает EAccelerator?

Перед тем как выдать html-содержимое клиенту, php компилирует скрипт в промежуточный байт-код, выполняет его… И так каждый раз.
Нельзя ли как нибудь оптимизировать и сэкономить процессорное время? Конечно можно! И в этом нам поможет EAccelerator! Он берет откомпилированный php-файл, и складывает его во временный каталог. Когда в следующий раз пользователь обращается к php-файлу, он сначала проверит – нет ли уже «готового» файла в кеше, и если есть – напрямую выдает его, экономя драгоценные такты процессора. Например, у меня нагрузка в часы пик упала с 80% до 5-15%.
Вещь однозначно из разряда must-have, я считаю что его вообще было бы здорово включить в базовую поставку PHP.
Ладно, не будем отвлекаться – а переходим сразу к практике – к установке.

Установка EAccelerator

Скачиваем последнюю версию и распаковываем
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
tar xjvf eaccelerator-0.9.6.tar.bz2
Далее командуем
cd eaccelerator-0.9.6
sudo phpize
Если будет ругаться что-то вроде:
phpize not found
то устанавливаем пакет:
sudo apt-get install php5-dev
и повторяем предыдущий шаг.
ОК. phpize успешно отработал.
Командуем в консоли:
./configure --enable-eaccelerator=shared
Далее:
make
make install
или лучше
chekinstall

Каталог, где разместился наш турбо-ускоритель будет выглядеть примерно так /. Если у тебя эта строчка отличается (например ты скачал более свежую версию EAccelerator, то не забудь заменить ее в конфиге, который будет приведен ниже)
ОК. Самое время приступать к конфигурации нашего зверя.

Настройка EAccelerator

Переходим в каталог конфигов PHP:
cd /etc/php5/conf.d/
И создаем дополнительный конфиг для нашего EAccelerator (имя файла ты можешь поменять по своему вкусу, но расширение .ini не трогай 
sudo nano eaccelerator.ini
Итак, открыли наш любимый Nano.
Быстренько набрасываем туда следующие строчки:
zend_extension                  = "/usr/lib/php5/20060613/eaccelerator.so"
eaccelerator.shm_size           = "16"
eaccelerator.cache_dir          = "/var/cache/eaccelerator"
eaccelerator.enable             = "1"
eaccelerator.optimizer          = "1"
eaccelerator.check_mtime        = "1"
eaccelerator.debug              = "0"
eaccelerator.filter             = ""
eaccelerator.shm_max            = "0"
eaccelerator.shm_ttl            = "0"
eaccelerator.shm_prune_period   = "0"
eaccelerator.shm_only           = "0"
eaccelerator.compress           = "1"
eaccelerator.compress_level     = "7"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
И сохраняем.
ОК. Почти все готово, остались мелочи.
Создадим каталог под кеш, дадим разрешение на запись в него www-демону, а всех остальных пользователей отправим в пешее эротическое путешествие (незачем им в этот каталог совать свой нос).
sudo mkdir /var/cache/eaccelerator
sudo chown root:www-data /var/cache/eaccelerator
sudo chmod g=rwx,o= /var/cache/eaccelerator
Отлично. Перезапускаем индейца:
sudo /etc/init.d/apache2 restart
Трижды стукаем в бубен, скрещиваем пальцы, и печатаем:
php -v
Если вывалилось нечто подобное:
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 06:06:53)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
 Значит установка завершилась успешно.


вторник, 22 марта 2011 г.

Установка Apache2+MySQL+PHP5 на Ubuntu Linux

И так появилась потребность в доработке одного движка сайта и начинаем устанавливать требуемое ПО для этого

1. Устанавливаем apache:
sudo apt-get install apache2 libapache2-mod-auth-mysql

2. Устанавливаем php:
sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql

Перезапустим apache:
sudo /etc/init.d/apache2 restart

Проверим работоспособность php. Для этого создаем файл /var/www/test.php и поместим в него следующие строки:
<?php
print_r (phpinfo());
?>

Запускаем Firefox и вводим адрес http://localhost/test.php. На экране должна отобразиться служебная информация о php.

3. Устанавливаем MySQL:
sudo apt-get install mysql-server mysql-client

Во время установки запрошен ввод пароля root-а MySQL-ного сервера.

4. Ставим phpmyadmin.
phpmyadmin - веб-инструмент для управлениями MySQL-ными базами данных.
Установим командой:
sudo apt-get install phpmyadmin

Во время установки от нас запросят об используемом веб-сервере - выбираем "apache2" далее спросит пароль доступа к базе MySql.

Вход в phpmyadmin: http://localhost/phpmyadmin
Вот и все.

По умолчанию в Apache некоторые модули отключены. Включить их можно командой:
sudo a2enmod имя_модуля

Например, подключение модуля mod_rewrite:
sudo a2enmod rewrite

После подключения модулей необходимо перезапустить apache:
sudo /etc/init.d/apache2 restart