Syntax Error when deploying django on apache2 - python

I am trying to host a django application on a server using apache2 and mod_wsgi.
The project itself is located at the path /usr/share/django-projects/mysite
The virtual environment is located at the path /home/zakhar/django_test/env
It's part of apache2 (2.4 version) conf file. In venv python version is 3.8.13
WSGIDaemonProcess mysite user=www-data group=www-data python-path=/usr/share/django-projects/mysite:/home/zakhar/django_test/env/lib/python3.8/site-packages python-home=/home/zakhar/django_test/env
It's last error from apache arror.log
File "/home/zakhar/django_test/env/lib/python3.8/site-packages/django/db/models/aggregates.py", in line 84
if (default := c.default) is None:
^
SyntaxError: invalid syntax
I think apache use python 3.6.9 in global env, but not in venv
I would be very grateful if someone could help me

I installed mod_wsgi in my venv and edited /etc/apache2/mods-avaible/wsgi.load
LoadModule wsgi_module "/home/zakhar/django_test/env/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/home/zakhar/django_test/env"

Related

Deploying django with apache + mod-wsgi _ Error 500

I'm trying to deploy my first django app in windows 10 (x64), so installed apache 2.4(x86), installed and build mod_wsgi (4.9.1) with python 3.8(x86) (I have microsoft visual studio 2019 installed) and configured Apache httpd.conf and httpd-vhosts.conf files.
My app runs fine, but the annoying error 500 keeps showing every now and then, and goes away by refreshing the browser every time.
There seems to be a bug with python 3.8, so decided to upgrade to python 3.10 (X86),
Reinstalled mod-wsgi and other packages using pip in new virtual environment in the same directory, and reconfigured httpd.conf accordingly. now apache service fails to start with error: "windows could not start the Apache2.4 on local computer....".
If I change httpd.conf configuration to load and use the python3.8 , Apache starts with no error (but again Error 500 keeps showing).
by the way I tried the same with python3.9 (x64) and Apache 2.4 (X64), and apache fails to start again.
Any help would be greatly appreciated.
In httpd.conf:
This configuration fails:
LoadFile "C:/Program Files (x86)/Python310-32/python310.dll"
LoadModule wsgi_module "d:/django project/unemployment project/.venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win32.pyd"
WSGIPythonHome "d:/django project/unemployment project/.venv"
This configuration works:
LoadFile "C:/Program Files (x86)/Python38-32/python38.dll"
LoadModule wsgi_module "d:/django project/unemployment project/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win32.pyd"
WSGIPythonHome "d:/django project/unemployment project/venv"

Django+Apache | ImportError: No Module named django

I am hosting my django app on Linode with Ubuntu OS and i have configured apache webserver.
When I try to access the site i get 500 Internal Server error
Apache logs show the following error
Traceback (most recent call last):
File "/home/mosajan/artistry/artistry/wsgi.py", line 12, in <module>
from django.core.wsgi import get_wsgi_application<br>
ImportError: No module named 'django'
Target WSGI script '/home/mosajan/artistry/artistry/wsgi.py' cannot be loaded as Python module.
Exception occurred processing WSGI script '/home/mosajan/artistry/artistry/wsgi.py'.
wsgi.py
import os
import sys
from django.core.wsgi import get_wsgi_application
sys.path.append('home/mosajan/artistry/')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'artistry.settings')
application = get_wsgi_application()
apache2 conf file
artistry.conf
Alias /static /home/mosajan/artistry/static
<Directory /home/mosajan/artistry/static>
Require all granted
</Directory>
<Directory /home/mosajan/artistry/artistry>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/mosajan/artistry/artistry/wsgi.py
WSGIDaemonProcess artistry python-path=/home/mosajan/artistry python-home=/home/mosajan/artistry/venv
WSGIProcessGroup artistry
WSGIPythonHome /home/mosajan/artistry/venv
WSGIPythonPath /hom/mosajan/artistry
File structure
This answer assumes that you manually activated the venv and that when you do something like python manage.py runserver 0.0.0.0:8000 in your project folder, are you able to see the project and run it without any errors. If that's the case, this means you have installed django as well as other needed project requirements / packages, so you can deactivate the venv for now.
Let's start by making sure that the server's IP address was added to ALLOWED_HOSTS in your settings.py file.
Now, with the venv deactivated, make sure to install Apache 2.4 with the service httpd with the module wsgi which is gonna help the Django app behave as a web app totally compatible with Apache 2.4. If you're using yum as a package manager, then you'd run something like this
yum install -y httpd python36u-mod_wsgi
Let's now add a group www
groupadd www
and edit the group
vim /etc/group
and add in the end of the file
www:x:10000:root,apache
Go to the root directory and run the following commands to make the www group owner of this directory
chown root.www -R /home/mosajan
chmod 775 -R /home/mosajan
Now in your Apache virtual host configuration file artistry.conf, the version you're presenting has an error in the last line (WSGIPythonPath /hom/mosajan/artistry). Fix it by using WSGIPythonPath /home/mosajan/artistry instead, save the file and check if the Apache config file if fine by running
httpd -t
You should get Syntax OK if all is well. I'm assuming you have that code inside a <VirtualHost *:8000></VirtualHost> block and would add as well an ErrorLog to it as well and probably would structure the file differently. Check if it works, if it doesn't then I would put some more thought into it. You can use this documentation page as reference (How to use Django with Apache and mod_wsgi).
Then, in your wsgi.py file I would change the sys.path.append line to have '/home/mosajan/artistry', so you would have something like this
import os, sys
from django.core.wsgi import get_wsgi_application
sys.path.append('/home/mosajan/artistry')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'artistry.settings')
application = get_wsgi_application()
Then, open port 80, enable and start httpd and check the result in the browser
enable httpd
systemctl start httpd
systemctl status httpd
You should see that it's starting fine and now when you go to the browser you should be able to see the project working just fine.

How to run Flask + Apache app with Anaconda Python version?

I have in my server two Python versions: the Python default, already present in Ubuntu Server 16.04 and Anaconda Python.
When I run the Flask application with Apache, because this is running in user www-data, the application runs in Python default, but I have to run in Anaconda installation.
How to configure to use the Anaconda Python version and how to install new modules in this version?
The path of Anaconda installed is /home/wandre/anaconda2
This is one way that worked for me to let Apache run the python module in Anaconda environment so that Flask app can run.
First is installation. Install Apache with the command sudo apt-get install apache2 apache2-bin apache2-dev. Then, install Anaconda under the directory /opt as sudo. After having Anaconda installed on /opt/anaconda2, install conda packages as below:
sudo su # Login as superuser
export PATH=/opt/anaconda2/bin:$PATH # Add conda to your path
conda install -c anaconda flask
pip install mod_wsgi
mod_wsgi-express install-module # the outputs to this is used for Apache configuration in the next step
Now you need to update the Apache configurations. This involves updating three files:
wsgi.load
Open the file /etc/apache2/mods-available/wsgi.load and add the following (this is the output from mod_wsgi-express install-module so yours could be different)
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py27.so
If the LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so was originally included in this file, comment it out. Otherwise (at least from what I checked), the apache server will run the default python instead of the one in Anaconda. Next, enable the wsgi mod:
sudo a2enmod wsgi
wsgi.conf
Open the file /etc/apache2/mods-available/wsgi.conf and add the following
<IfModule mod_wsgi.c>
WSGIPythonHome /opt/anaconda2
</IfModule>
000-default.conf (your filename may be different)
Open the file /etc/apache2/sites-available/000-default.conf and add the following
WSGIDaemonProcess flaskapp python-home=/opt/anaconda2 python-path=/var/www/flask
WSGIScriptAlias / /var/www/flask/flaskapp.wsgi
<Directory /var/www/flask>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
You are all set.
Please note that I was not able to find tutorial for setting 'Anaconda + Flask + Apache' so I referred to a post on 'Anaconda + Django + Apache'.

uWSGI configuration for Apache for Galaxy instance

I want to setup a Galaxy instance in my server running on CentOS and I have an issue with configuring my Apache server with uWSGI. I have installed uwsgi with pip:
pip install uwsgi
and added in my Apache configuration file the following lines:
<Location "/galaxy">
Sethandler uwsgi-handler
uWSGISocket 127.0.0.1:4001
uWSGImaxVars 512
</Location>
as instructed by the Galaxy team. Nevertheless when I restart my web server I get the following error:
Invalid command 'uWSGISocket', perhaps misspelled or defined by a mod
and it fails to start again.
I'm very new to using Apache for proxying requests so I need any help I can get.
Thank you in advance.

Run django app with apache

I create a django app and run it with runserver command and it works.But i want to run it with apache so i install wampserver 2.5 with apache 2.4.9 .After that download mod_wsgi‑3.5.ap24.win‑amd64‑py3.4.zip from here and put it in apache modules folder and add this codes to httpd.conf :
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome E:/software/Python34
WSGIPythonPath E:/software/Python34/python.exe
WSGIScriptAlias /ms "E:/software/wamp/bin/apache/apache2.4.9/htdocs/mysite/mod.wsgi.py"
Alias /ms "E:/software/wamp/bin/apache/apache2.4.9/htdocs/mysite"
and put my django app to mysite folder.but now wamp not run and remain yellow.
Note that this is my application's version:
-- python 3.4 -- Django 1.7 -- wamp 2.5 -- apache 2.4.9 --
and this is codes inside mod.wsgi.py:
import os, sys
path = r'E:\software\wamp\bin\apache\apache2.4.9\htdocs\mysite'
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
sorry for my terrible English
following links will help you out.
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/
https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/
https://www.digitalocean.com/community/tutorials/how-to-run-django-with-mod_wsgi-and-apache-with-a-virtualenv-python-environment-on-a-debian-vps
I just followed these steps and its worked for me.
Hope that help you too.

Categories