I have multiple django projects and i want to host them under same domain
eg: example.com/one<br>
example.com/two
I have searched for various solutions and found the below given link which helped me alot.
Is it possible to host multiple django projects under the same domain?
From the above reading , I get to know that I need mod_wsgi
for this but I am confused that where to install this mod_wsgi
– Do i need to install under every project folder (seperate for every myenv) or it should be installed only once .
Please help me in how and where to install this mod_wsgi
and finally how to host multiple projects under same domain name.
Some Code Tried By Another User With Same Problem But Also Not Working
<VirtualHost *:80>
ServerAdmin admin@my_domain.com
ServerName my_domain.com
ServerAlias www.my_domain.com
DocumentRoot /var/www/my_domain.com
ErrorLog ${APACHE_LOG_DIR}/my_domain.com_error.log
CustomLog ${APACHE_LOG_DIR}/my_domain.com_access.log combined
# site_1
Alias /site_1_project/static /var/www/my_domain.com/site_1_project/static
<Directory /var/www/my_domain.com/site_1_project/static>
Require all granted
</Directory>
Alias /site_1_project/media /var/www/my_domain.com/site_1_project/media
<Directory /var/www/my_domain.com/site_1_project/media>
Require all granted
</Directory>
<Directory /var/www/my_domain.com/site_1_project/site_1_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess site_1_project python-path=/var/www/my_domain.com/site_1_project python-home=/var/www/my_domain.com/site_1_project/django_env_site_1
WSGIProcessGroup site_1_project
WSGIScriptAlias /site_1_project/ /var/www/my_domain.com/site_1_project/site_1_project/wsgi.py
# site_2
Alias /site_2_project/static /var/www/my_domain.com/site_2_project/static
<Directory /var/www/my_domain.com/site_2_project/static>
Require all granted
</Directory>
Alias /site_2_project/media /var/www/my_domain.com/site_2_project/media
<Directory /var/www/my_domain.com/site_2_project/media>
Require all granted
</Directory>
<Directory /var/www/my_domain.com/site_2_project/site_2_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess site_2_project python-path=/var/www/my_domain.com/site_2_project python-home=/var/www/my_domain.com/site_2_project/django_env_site_2
WSGIProcessGroup site_2_project
WSGIScriptAlias /site_2_project/ /var/www/my_domain.com/site_2_project/site_2_project/wsgi.py
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =my_domain.com [OR]
#RewriteCond %{SERVER_NAME} =www.my_domain.com
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
2
Answers
I’ll tell you how we did in our project. We have a single Django project with different routes. For example
/players
,/tablet
. We hosted our project in two Docker containers. We have NGINX as our reverse proxy. NGINX redirects the request to the appropriate container based on the route. NGINX is exposed to the world. But, I’m not sure if it is useful for you or not.Installing
mod_wsgi
depends on what your host OS is. Check the instructions. If you’re using CentOS or RedHat, I’d recommend looking at IUS Community; they provide a repository with yum installable packages for Python 3.6 andmod_wsgi
. The version ofmod_wsgi
you install has to be compiled against the same version of Python you are running into your virtual environment.Then you need to configure your
VirtualHost
properly. If you have a host at the root, it has to come last in your definition. Here’s an example:This example will host one site at
/subsite/
and another at the root,/
. Notice that the root site comes last. It also means that you won’t be able to use the route/subsite/
within the root project, since Apache will have diverted it to via theWSGIScriptAlias
definition.This is also for a site with TLS; you may have to switch the
443
to80
, and removeSSLEngine On
if you’re not using TLS. TheWSGIPassAuthorization
is for Django REST Framework tokens, you can probably remove it as well, but I’ve left it for a more complete example. This is for Apache 2.4+, when they switched to theRequire all granted
syntax.IUS Community, if on RedHat/CentOS: https://ius.io/