Centos+Apache + Django+mod_wsgi
Итак в сегодняшней статье я затрону тему настройки боевого сервера Centos+Apache + Django+mod_wsgi. Пред история такова, начал писать интернет магазин на Django и в итоге выяснилось, что не так то просто заставить его выдавать на просмотр картинки те которые мы загрузили в админке для моделей. В этом процессе, при котором у нас две версии Python на одном сервере, имеется куча подводных камней, задача эта не из легких но решаемая. Первые ваши проблемы могут быть то что pip откажется работать и вывалиться с ошибкой pip cannot open libpython3.6m.so 1, вторая также связана с pip что он не может найти какой-то путь и третья
что Apache запускается с модулем mod_wsgi 2.6.6 или 2.7.4, в зависимости от версии Centos/
Здесь я сделал вытяжку из нескольких статей по установке и обходу всех эти подводных камней.
что Apache запускается с модулем mod_wsgi 2.6.6 или 2.7.4, в зависимости от версии Centos/
Здесь я сделал вытяжку из нескольких статей по установке и обходу всех эти подводных камней.
Начнем
1) Скачаем образ Centos 6.4 minimals и установим его
2) Устанавливаем Midnight Commander
yum install mc
3) Добавим в YUM ентерпрайзовый репозитарий, который расширит список доступных нам пакетов
yum install epel-release -y
4)Сразу убираем ошибку что
Для этого открываем файл
mcedit /etc/yum.repos.d/epel.repo
И изменям все HTTPS на HTTP
Для этого открываем файл
mcedit /etc/yum.repos.d/epel.repo
И изменям все HTTPS на HTTP
5) Обновимся
yum update -y
6) Ставим Python Apache и mod_wsgi
Значит у нас в Linux в отличие от Windows всегда два Питона, старый нельзя удалить
т.к на нем интерпетируются много прог
Ставим вручную, например версию 3.6.4 затем поставим apache и mod_wsgi
Скачаем архив из официального сайта
Значит у нас в Linux в отличие от Windows всегда два Питона, старый нельзя удалить
т.к на нем интерпетируются много прог
Ставим вручную, например версию 3.6.4 затем поставим apache и mod_wsgi
Скачаем архив из официального сайта
Установку делаем обязательно из исходников и конфигурируем со следующими параметрами
./configure --enable-shared --enable-optimizations
./configure --enable-shared --enable-optimizations
Далее устанавливаем
make altinstall
7) Ставим виртуальное окружение
pip3.6 install virtualenv
8)Создаем виртуальное окружение пакетов
Как бы заморозку нашего состояния пакетов
туда будет все ставить и оттуда будем стартовать наши проекты, как бы изолированная версия питона с библиотеками
Пускай у нас проект и окружение будут в разных местах, наши окружения будем держать в /opt/virtualenvs, а проект в корне /var/www
virtualenv /opt/virtualenvs/zssshop
source /opt/virtualenvs/zssshop/bin/activate
Ставим Django
pip3.6 install django
9)Переходим в /var/www и создаем проект
cd /var/www
django-admin.py startproject shop
10)Отредактируем файл /var/www/shop/shop/setting.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
И соберем все наши статические файлы в одну папку
./manage.py collectstatic
11)Для начала будем использовать стандартную БД sqlite3
Создадим наши таблицы чтобы можно запустить админку
./manage.py migrate
12)Создадим админского пользователя
./manage.py createsuperuser
13)Добавим интерфейс сервера разработки на котором ему разрешено запускаться
mcedit /opt/virtualenvs/zssshop/lib64/python2.7/site-packages/django/http/request.py
И отредактируем строки, добавив туда наш ip
allowed_hosts = ['localhost', '192.168.15.193', '[::1]']
Остановим iptables
service iptables stop
И запустим сервер разработки Джанго
./manage.py runserver 0.0.0.0:8000
pip3.6 install virtualenv
8)Создаем виртуальное окружение пакетов
Как бы заморозку нашего состояния пакетов
туда будет все ставить и оттуда будем стартовать наши проекты, как бы изолированная версия питона с библиотеками
Пускай у нас проект и окружение будут в разных местах, наши окружения будем держать в /opt/virtualenvs, а проект в корне /var/www
virtualenv /opt/virtualenvs/zssshop
Активируем ее
source /opt/virtualenvs/zssshop/bin/activate
pip3.6 install django
9)Переходим в /var/www и создаем проект
cd /var/www
django-admin.py startproject shop
10)Отредактируем файл /var/www/shop/shop/setting.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
И соберем все наши статические файлы в одну папку
./manage.py collectstatic
11)Для начала будем использовать стандартную БД sqlite3
Создадим наши таблицы чтобы можно запустить админку
./manage.py migrate
12)Создадим админского пользователя
./manage.py createsuperuser
13)Добавим интерфейс сервера разработки на котором ему разрешено запускаться
mcedit /opt/virtualenvs/zssshop/lib64/python2.7/site-packages/django/http/request.py
И отредактируем строки, добавив туда наш ip
allowed_hosts = ['localhost', '192.168.15.193', '[::1]']
Остановим iptables
service iptables stop
И запустим сервер разработки Джанго
./manage.py runserver 0.0.0.0:8000
Заходим с браузера если отобразилась страница, то значит пока все хорошо
14)Далее настраиваем сам Apach на использование модуля WSGI
Первое нам нужно добавить переменную
echo "export LD_LIBRARY_PATH=/usr/local/lib/">>.bashrc
Иначе pip будет ругаться что не может найти какой-то путь
Далее нужно установить модуль PIP или в оригинальную среду или в вируталку
pip3.6 install mod_wsgi
15) Теперь нам нужно подменить mod_wsgi из поставки Apache т.к он использует старую версию на наш новый установленный из под pip
cd /etc/httpd/modules
mv mod_wsgi.so mod_wsgi.so.bak
ln -s /opt/virtualenvs/zss-shop/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so /etc/httpd/modules/mod_wsgi.so
16) Настраиваем окружение на использование wsgi делаем так
Создаем файл
/etc/httpd/conf.d/django.conf
И редактируем его
Alias /static /var/www/shop/static <Directory /var/www/shop/static> Allow from all </Directory> <Directory /var/www/shop/shop> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory> WSGIDaemonProcess shop python-path=/var/www/shop:/opt/virualenvs/zss-shop/lib/python3.6/site-packages WSGIProcessGroup shop WSGISocketPrefix /var/run/wsgi WSGIScriptAlias / /var/www/shop/shop/wsgi.py
Или же можно создать таким же образов вирутальные хосты
<VirtaulHost *:80>
ServerName shop.local
Alias /static /var/www/shop/static
Alias /media /var/www/shop/media
<Directory /var/www/shop/static>
Allow from all
</Directory>
<Directory /var/www/shop/media>
Allow from all
</Directory>
<Directory /var/www/shop/shop>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIDaemonProcess shop python-path=/var/www/shop:/opt/virualenvs/zss-shop/lib/python3.6/site-packages
WSGIProcessGroup shop
WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias / /var/www/shop/shop/wsgi.py
</VirtualHost>