Deploying Django on Apache2 with mod_wsgi - Correct location for Django project?

天大地大妈咪最大 提交于 2019-12-03 21:29:05

Your config only for one website, need use virtual host

Example deploy:

For python3 install mod_wsgi (debian based system)

apt-get install libapache2-mod-wsgi-py3

Put your project in standard apache location

/var/www/myproj 

where myproj = name you django project

Check project

python3 manage.py check

or/and run it

python3 manage.py runserver 0.0.0.0:8000

if your domain example.com, then http://example.com:8000/ or use server IP.

Allow apache2 read and write content

chown www-data:www-data /var/www/myproj -R

Config apache 2.4

cd /etc/apache2/sites-available
editor myproj.conf

and Apache2.4 minimal config (many sites)

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com

DocumentRoot /var/www/myproj

WSGIDaemonProcess example.com python-path=/var/www/myproj

WSGIScriptAlias / /var/www/myproj/myproj/wsgi.py \
    process-group=example.com application-group=%{GLOBAL}

<Directory /var/www/myproj/myproj>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

# static
Alias /media/ /var/www/myproj/media/
Alias /static/ /var/www/myproj/static/
Alias /robots.txt /var/www/myproj/robots.txt
# logs
ErrorLog /var/log/apache2/myproj-error.log
LogLevel warn
CustomLog /var/log/apache2/myproj-access.log combined

</VirtualHost>

Virtualenv: python path + virtual, example

python-path=/path/www/myproj python-home=/path/to/venv

Using daemon mode exclusively, add to /etc/apache2/mods-available/wsgi.load

WSGIRestrictEmbedded On

Enable config

a2ensite myproj.conf

Check syntax

apachectl -t

Restart apache or reload

service apache2 restart

Example config apache2.4 with define variable. Django > 1.6. Set only domain, path, name project. In example path to dir /var/www/example.com/myproject/myproect/wsgi.py, static url /media/ and /static/

Define:

  1. domain - your domain name (example.com)
  2. path - full path to project, folder where manage.py (/var/www/example.com/myproj)
  3. project - name project, folder name where wsgi.py (myproj)

https://gist.github.com/leotop/9a78c10c0961cdd2bbe9633d6ebf8a5b

<VirtualHost *:80>
Define domain example.com
Define path /var/www/${domain}/myproj
Define project myproj


ServerName ${domain}
ServerAlias www.${domain}

DocumentRoot ${path}

WSGIDaemonProcess ${domain} python-path=${path}

WSGIScriptAlias / ${path}/${project}/wsgi.py \
    process-group=${domain} application-group=%{GLOBAL}

<Directory ${path}/${project}>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>


Alias /media/ ${path}/media/
Alias /static/ ${path}/static/
Alias /robots.txt ${path}/static/robots.txt
Alias /favicon.ico ${path}/static/favicon.ico

<Location "/media/">
    Options -Indexes
</Location>

<Location "/static/">
    Options -Indexes
</Location>

ErrorLog /var/log/apache2/${domain}-error.log
LogLevel warn
CustomLog /var/log/apache2/${domain}-access.log combined

</VirtualHost>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!