====== Django setup on plesk hosting ======
===== Server Setting (2016-12-13) =====
=== Folder: ===
(vfossorg_env)[root@h2431351 vhosts]# tree -L 3
/var/www/vhosts
|-- chroot
| |-- bin -> usr/bin
| |-- dev
| | |-- null
| | |-- random
| | `-- urandom
| |-- etc
| | |-- group
| | |-- passwd
| | `-- resolv.conf
| |-- lib -> usr/lib
| |-- lib64 -> usr/lib64
| |-- sbin -> usr/sbin
| |-- tmp
| |-- usr
| | |-- bin
| | |-- lib
| | |-- lib64
| | `-- libexec
| `-- var
| `-- tmp
|-- default
| |-- cgi-bin
| |-- htdocs
| | |-- css
| | |-- favicon.ico
| | |-- img
| | `-- index.html
| `-- httpsdocs
|-- system
| `-- vfoss.org <------------- Configurations here!
| |-- conf
| |-- etc
| |-- logs
| |-- pd
| `-- statistics
`-- vfoss.org
|-- error_docs
| |-- bad_gateway.html
| |-- bad_request.html
| |-- forbidden.html
| |-- internal_server_error.html
| |-- maintenance.html
| |-- method_not_allowed.html
| |-- not_acceptable.html
| |-- not_found.html
| |-- not_implemented.html
| |-- precondition_failed.html
| |-- proxy_authentication_required.html
| |-- request-uri_too_long.html
| |-- unauthorized.html
| `-- unsupported_media_type.html
|-- httpdocs
| |-- cgi-bin
| |-- css
| |-- favicon.ico
| |-- img
| |-- index.html
| `-- test
|-- logs
| |-- access_log
| |-- access_log.processed
| |-- access_log.processed.1.gz
| |-- access_log.webstat
| |-- access_ssl_log
| |-- access_ssl_log.processed
| |-- access_ssl_log.webstat
| |-- error_log
| `-- error_log.1.gz
|-- pydocs
| `-- vfossorg_pj
`-- vfossorg_env
|-- bin
|-- include
|-- lib
|-- lib64 -> lib
`-- pip-selfcheck.json
===== solution 1 =====
It turns out Plesk does allow overriding vhost directives and quite easily that is.
Just create or edit a vhost.conf file in the right directory;
sudo vim /home/www/vhosts/yourdomain.com/conf/vhost.conf
Need this?? Look like it works without this in plesk 12. Then simply add your vhost directives:
ServerAdmin "bob@yourdomain.com"
DocumentRoot /var/www/vhosts/yourdomain.com/httpdocs
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
...
A working vhost.conf
# included from httpd.conf within
Alias /media/ /var/www/vhosts/vfoss.org/pydocs/vfoss_org/vfoss_org/media/
Alias /static/ /var/www/vhosts/vfoss.org/pydocs/vfoss_org/vfoss_org/static/
Alias /forum/ /var/www/vhosts/vfoss.org/httpdocs/forum/
Options -Indexes
Order deny,allow
Allow from all
Alias /wiki/ /var/www/vhosts/vfoss.org/httpdocs/wiki/
Options -Indexes
Order deny,allow
Allow from all
Order deny,allow
Allow from all
Order deny,allow
Allow from all
WSGIScriptAlias / /var/www/vhosts/vfoss.org/pydocs/vfoss_org/apache/vfoss_org.wsgi
Then you just have to refresh Plesk's config and restart apache:
/usr/local/psa/admin/sbin/httpdmng --reconfigure-domain vfoss.org
Obsolate:
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=yourdomain.com
/etc/init.d/httpd graceful
or
/usr/local/psa/admin/sbin/websrvmng --reconfigure-all
service httpd restart
Et voila.
===== Plesk django virtualenv =====
* http://www.gummiboot.de/2011/06/17/how-to-run-django-apps-on-a-centos-plesk-server/
* http://devblog.plesk.com/2014/10/plesk-and-django/
====== Plesh Django Apache + mod_wsgi ======
==== Why mod_wsgi? ====
http://serverfault.com/questions/12754/which-is-best-for-django-lighttpd-or-nginx-or-maybe-something-else
===== Prepare Server (Cent OS 7) =====
Allow ssh for domain user as here: http://devblog.plesk.com/2014/10/plesk-and-django/
ssh td@
su root ####
Install necessary packages:
yum install epel-release.noarch
yum update
==== Compile python 2.7 from source (Centos 6 only) ====
yum groupinstall -y development
yum install -y zlib-dev openssl-devel sqlite-devel bzip2-devel
cd /opt
wget --no-check-certificate https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --prefix=/usr/local
make && make altinstall
Configure Python
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
which python will look in /usr/local/sbin first. But the dir is not avalable.
ln -s /usr/local/bin/python2.7 /usr/local/bin/python
DONE
==== Install Pip ====
/usr/local/bin/python2.7 ez_setup.py
/usr/local/bin/easy_install-2.7 pip
pip install virtualenv
==== Headline ====
sudo yum install libxslt-devel libxml2-devel
sudo yum install python-devel libjpeg-devel freetype-devel libpng-devel
sudo yum install mysql-devel mysql-common mysql-libs
yum install python-setuptools httpd mod_wsgi
yum install python-virtualenv.noarch python-pip.noarch
Additionally you will need to install a database system and a python driver for this database system. If you want to run the PostgreSQL database server issue the following command:
yum install postgresql python-psycopg2
If you want to use the SQLite embedded database, issue the following command:
yum install sqlite python-sqlite
If you want to run the MySQL database engine, download and install a more recent version of the MySQL-python package. Django requires at least version 1.2.1p2 of the Python MySQLdb adapter. We’ll download and install a later version from the upstream project First, install the tools needed to build this package:
yum install python-devel mysql-devel gcc wget python-setuptools
Check the Python MySQLdb page for information regarding the latest release, then issue the following commands. This will download the archive of the source files, extract them from the archive, build the database adapter, and install the files on to your system.
cd /opt/
wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
tar -zxvf MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3/
python setup.py build
python setup.py install
==== Log out of root ====
==== Creating a virtual environment for the project ====
pwd
/var/www/vhosts/vfoss.org
virtualenv vfossorg_env --no-site-packages
mkdir pydocs
source vfossorg_env/bin/activate
git clone vfoss-pj
su -c "yum install python-devel libjpeg-devel freetype-devel libpng-devel"
pip install -r vfoss/requirements.txt
==== Workflow ====
* When domain is activated, the directive in httpd.conf, vhost.conf will load a wsgi.py script.
* In wsgi.py script the django application is activated. If virtualenv is used, it is loaded by this script.
*
==== wsgi.py ====
cat vfoss_org/vfoss_org/wsgi.py
"""
WSGI config for vfoss_org project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
#import os
#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "vfoss_org.settings")
#
#from django.core.wsgi import get_wsgi_application
#application = get_wsgi_application()
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('/var/www/vhosts/vfoss.org/vfossorg_env/lib/python2.7/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('/var/www/vhosts/vfoss.org/pydocs/vfossorg_pj/vfoss_org')
sys.path.append('/var/www/vhosts/vfoss.org/pydocs/vfossorg_pj/vfoss_org/vfoss_org')
#sys.path.append('/home/django_projects/MyProject/myproject')
os.environ['DJANGO_SETTINGS_MODULE'] = 'vfoss_org.settings'
# Activate your virtual env
activate_env=os.path.expanduser("/var/www/vhosts/vfoss.org/vfossorg_env/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
==== vhost.conf ====
* https://www.der-webcode.de/plesk-12-apache-konfiguration-der-vhost-conf/
Look above! Using the vhost.conf listed previosly
==== Restart httpd server or use mod-passenger ====
apt-get install libapache2-mod-passenger
service httpd restart
With passenger
You need to create directory named “tmp” inside “django-app”:
mkdir tmp
After that, to restart the app, you can use the following command:
touch tmp/restart.txt
==== Create super user and database ====
./manage.py --help | grep super
./manage.py createsuperuser
==== Smaple script ====
=== Origianl httpd.conf ===
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
#IF YOU REQUIRE TO APPLY CUSTOM MODIFICATIONS, PERFORM THEM IN THE FOLLOWING FILES:
#/var/www/vhosts/system/vfoss.org/conf/vhost.conf
#/var/www/vhosts/system/vfoss.org/conf/vhost_ssl.conf
ServerName "vfoss.org:443"
ServerAlias "www.vfoss.org"
ServerAlias "ipv4.vfoss.org"
ServerAdmin "write.thuy@gmail.com"
UseCanonicalName Off
DocumentRoot "/var/www/vhosts/vfoss.org/httpdocs"
CustomLog /var/www/vhosts/system/vfoss.org/logs/access_ssl_log plesklog
ErrorLog "/var/www/vhosts/system/vfoss.org/logs/error_log"
SuexecUserGroup "vfossadmin" "psacln"
UserDir "/var/www/vhosts/vfoss.org/web_users/*"
SetSysEnv PP_VHOST_ID "d63a9b47-206f-4fa1-9e35-c8a29a5ef98c"
ScriptAlias "/cgi-bin/" "/var/www/vhosts/vfoss.org/httpdocs/cgi-bin/"
Alias "/plesk-stat" "/var/www/vhosts/system/vfoss.org/statistics"
Options +Indexes
Require valid-user
Alias /webstat /var/www/vhosts/system/vfoss.org/statistics/webstat
Alias /webstat-ssl /var/www/vhosts/system/vfoss.org/statistics/webstat-ssl
Alias /ftpstat /var/www/vhosts/system/vfoss.org/statistics/ftpstat
Alias /anon_ftpstat /var/www/vhosts/system/vfoss.org/statistics/anon_ftpstat
Alias /awstats-icon /var/www/html/awstats/icon
SSLEngine on
SSLVerifyClient none
SSLCertificateFile /usr/local/psa/var/certificates/cert92NfLwE
SetEnv PP_CUSTOM_PHP_INI /var/www/vhosts/system/vfoss.org/etc/php.ini
SetEnv PP_CUSTOM_PHP_CGI_INDEX fastcgi
FcgidInitialEnv PP_CUSTOM_PHP_INI /var/www/vhosts/system/vfoss.org/etc/php.ini
FcgidInitialEnv PP_CUSTOM_PHP_CGI_INDEX fastcgi
FcgidMaxRequestLen 134217728
SetHandler fcgid-script
Options +ExecCGI
SetHandler fcgid-script
FCGIWrapper /var/www/cgi-bin/cgi_wrapper/cgi_wrapper .php
Options +ExecCGI
SSLRequireSSL
Options -Includes +ExecCGI
AuthType Basic
AuthName "Domain statistics"
AuthUserFile "/var/www/vhosts/system/vfoss.org/pd/d..httpdocs@plesk-stat"
require valid-user
Alias /error_docs /var/www/vhosts/vfoss.org/error_docs
ErrorDocument 400 /error_docs/bad_request.html
ErrorDocument 401 /error_docs/unauthorized.html
ErrorDocument 403 /error_docs/forbidden.html
ErrorDocument 404 /error_docs/not_found.html
ErrorDocument 500 /error_docs/internal_server_error.html
ErrorDocument 405 /error_docs/method_not_allowed.html
ErrorDocument 406 /error_docs/not_acceptable.html
ErrorDocument 407 /error_docs/proxy_authentication_required.html
ErrorDocument 412 /error_docs/precondition_failed.html
ErrorDocument 414 /error_docs/request_uri_too_long.html
ErrorDocument 415 /error_docs/unsupported_media_type.html
ErrorDocument 501 /error_docs/not_implemented.html
ErrorDocument 502 /error_docs/bad_gateway.html
ErrorDocument 503 /error_docs/maintenance.html
Include "/var/www/vhosts/system/vfoss.org/conf/vhost_ssl.conf"
ServerName "vfoss.org:80"
ServerAlias "www.vfoss.org"
ServerAlias "ipv4.vfoss.org"
ServerAdmin "write.thuy@gmail.com"
UseCanonicalName Off
DocumentRoot "/var/www/vhosts/vfoss.org/httpdocs"
CustomLog /var/www/vhosts/system/vfoss.org/logs/access_log plesklog
ErrorLog "/var/www/vhosts/system/vfoss.org/logs/error_log"
SuexecUserGroup "vfossadmin" "psacln"
UserDir "/var/www/vhosts/vfoss.org/web_users/*"
SetSysEnv PP_VHOST_ID "d63a9b47-206f-4fa1-9e35-c8a29a5ef98c"
ScriptAlias "/cgi-bin/" "/var/www/vhosts/vfoss.org/httpdocs/cgi-bin/"
Redirect permanent /plesk-stat https://vfoss.org/plesk-stat
Redirect permanent /webstat https://vfoss.org/webstat
Redirect permanent /webstat-ssl https://vfoss.org/webstat-ssl
Redirect permanent /ftpstat https://vfoss.org/ftpstat
Redirect permanent /anon_ftpstat https://vfoss.org/anon_ftpstat
Redirect permanent /awstats-icon https://vfoss.org/awstats-icon
SSLEngine off
SetEnv PP_CUSTOM_PHP_INI /var/www/vhosts/system/vfoss.org/etc/php.ini
SetEnv PP_CUSTOM_PHP_CGI_INDEX fastcgi
FcgidInitialEnv PP_CUSTOM_PHP_INI /var/www/vhosts/system/vfoss.org/etc/php.ini
FcgidInitialEnv PP_CUSTOM_PHP_CGI_INDEX fastcgi
FcgidMaxRequestLen 134217728
SetHandler fcgid-script
Options +ExecCGI
SetHandler fcgid-script
FCGIWrapper /var/www/cgi-bin/cgi_wrapper/cgi_wrapper .php
Options +ExecCGI
Options -Includes +ExecCGI
AuthType Basic
AuthName "Domain statistics"
AuthUserFile "/var/www/vhosts/system/vfoss.org/pd/d..httpdocs@plesk-stat"
require valid-user
Alias /error_docs /var/www/vhosts/vfoss.org/error_docs
ErrorDocument 400 /error_docs/bad_request.html
ErrorDocument 401 /error_docs/unauthorized.html
ErrorDocument 403 /error_docs/forbidden.html
ErrorDocument 404 /error_docs/not_found.html
ErrorDocument 500 /error_docs/internal_server_error.html
ErrorDocument 405 /error_docs/method_not_allowed.html
ErrorDocument 406 /error_docs/not_acceptable.html
ErrorDocument 407 /error_docs/proxy_authentication_required.html
ErrorDocument 412 /error_docs/precondition_failed.html
ErrorDocument 414 /error_docs/request_uri_too_long.html
ErrorDocument 415 /error_docs/unsupported_media_type.html
ErrorDocument 501 /error_docs/not_implemented.html
ErrorDocument 502 /error_docs/bad_gateway.html
ErrorDocument 503 /error_docs/maintenance.html
Include "/var/www/vhosts/system/vfoss.org/conf/vhost.conf"
===== Sources =====
* https://www.linode.com/docs/websites/frameworks/django-apache-and-modwsgi-on-centos-5