Если вы когда-нибудь разрабатывали приложение на Python с использованием фреймворка Django, то наверняка оценили удобный для разработки веб-сервер идущий в комплекте с фреймворком. Но к сожалению как признаются сами авторы фреймворка Django, что они умеют делать фреймворки, а не веб-серверы. Поэтому публиковать ваше приложение в сети придется с помощью другого более мощного веб-сервера.
В данной статье мы рассмотрим шаг за шагом разворачивание вашего написанного приложения на веб-сервере Apache.
Стоит отметить тот факт, что у Python на данный момент две используемые ветки, это 3-я и 2.7. Поэтому сразу оговариваем с вами условие, что мы разворачиваем приложение написанное на Python 3 (и выше) и Django версии 1.8.
Ну чтож начнем, все работы мы будем проводить на Ubuntu 14.04.
Для начала нам нужно будет установить PIP для 3-й версии питона и PostgreSQL(именно его рекомендуют использовать разработчики фреймворка в своих приложениях):
sudo apt-get install python3-pip libpq-dev postgresql postgresql-contrib
Затем установим Django и коннектор для питона и PostgreSQL
sudo pip3 install django
sudo pip3 install psycopg2
Далее займемся настройкой PostgreSQL:
Для начала создадим пользователя и базу данных которую будет использовать наше приложение.
sudo su — postgres
psql
CREATE DATABASE имя_базы;
CREATE USER имя_пользоватлея WITH PASSWORD ‘пароль’;
ALTER USER имя_пользоватлея WITH SUPERUSER;
q
exit
Затем необходимо поправить конфиги PostgreSQL:
(Внимание!!! обратите внимание, что 9.3 в пути — это версия PostgreSQL и у вас она может быть другой!)
sudo nano /etc/postgresql/9.3/main/postgresql.conf
Открыв файл конфигурации нам необходимо раскоментировать строку и поставить ей значение ‘*’:
listen_addresses = ‘*’
Затем выходим из редактора Nano нажатием ctrl+x и на вопрос о сохранение изменением нажимаем Y затем Enter.
Далее нужно настроить конфиг который отвечает за доступ к базе:
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
Убеждаемся что есть строка следующего вида: (если есть но с методом отличным от md5(например peer) меняем его на md5)
local all all md5
Затем выходим из редактора Nano нажатием ctrl+x и на вопрос о сохранение изменением нажимаем Y затем Enter.
Теперь перезапускаем PostgreSQL:
sudo service postgresql restart
Теперь когда у нас есть установленый python3,django, настроенный postgresql, можно протестировать работу вашего приложения. Скопируйте его в удобную для вас директорию (Например в домашнюю папку текущего пользователя)
Для переноса папки с проектом можете воспользоваться ФТП клиентом. Если у вас не настроен фтп на сервере с Ubuntu, то следующие строки посвящены вам =)
ставим фтп:
sudo apt-get install vsftpd
sudo nano /etc/vsftpd.conf:
включаем возможность записи
write_enable=YES
после чего перезапустите vsftpd:
sudo service vsftpd restart
После того как вы залили свой готовый проект в домашнюю папку текущего пользователя, вам необходимо будет поправить Settings.py вашего проекта. А именно добавить в него строку:
STATIC_ROOT = os.path.join(BASE_DIR, «static/»)
А так же переписать пути для шаблонов вашего проекта и задать настройки для базы в соответсвии с тем, что мы создали несколькими шагами ранее.
DATABASES = { ‘default’:
{ ‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’,
‘NAME’: ‘имя_созданной_бд’,
‘USER’: ‘пользователь’,
‘PASSWORD’: ‘пароль_пользователя_бд’,
‘HOST’: », # Можно не указывать если бд находится на локалхосте.
‘PORT’: », # Можно не указывать если бд находится на локалхосте.
}
}
После того как файл settings.py будет приведен в порядок выполните команду
python3 manage.py collectstatic
Эта команда соберет все статические файлы используемые в проекте в одном месте (Это нам очень поможет при настройке Apache)
Теперь попробуйте запустить проект с помощью команды:
python3 manage.py runserver 0.0.0.0:8000
убеждаемся что приложение доступно и корректно работает.
Теперь установим апач и mod-wsgi для 3-го питона:
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3
затем нужно будет добавить конфиг в sites-enabled Апача
Конфиг имеет приблизительно следующий вид:
WSGIPythonPath /home/user/projectname
<VirtualHost *:80>
WSGIScriptAlias / /home/user/projectname/projectname/wsgi.py
Alias /static/ /home/user/projectname/static/
#ServerName www.example.com
ServerAdmin user@something.com
<Directory /home/user/projectname/projectname>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /home/user/projectname/static>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
После этого переходим в домашнюю папку текущего пользователя
cd ~
И меняем права папке с проектом
chmod -R 755 porojectname
После этого перезапускаем Апач:
sudo service apache2 restart
Вот и все, теперь ваше приложение работает на веб-сервере Apache.