Best way for stability is direct web server without running extra software layers. No virtualization and containers whatsoever. But as an application is already quite elderly and not using latest versions of python. It can be complicated to install directly on the server. I am giving an example of a working setup and number of attempts that ended with failure. I repeat for me the recent versions of python3 Django and postgres and elastic work best directly on the server without virtualization. This method is only published for information for the old version of the application where only the hardware layer needs to be updated and no software upgrade is desired.
Environment setup example.
https://www.youtube.com/watch?v=N5vscPTWKOk
https://code.google.com/archive/p/modwsgi/wikis/VirtualEnvironments.wiki
vim wsgi.py
import os
import sys
import site
site.addsitedir('/home/sites/venv/lib/python2.7/site-packages')
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ["DJANGO_SETTINGS_MODULE"] = "jobfor.settings.settings"
activate_env=os.path.expanduser("/home/sites/venv/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
#from raven.contrib.django.raven_compat.middleware.wsgi import Sentry
from django.core.wsgi import get_wsgi_application
#application = Sentry(get_wsgi_application())
application = get_wsgi_application()
Test performance with
apt-get install apache2-utils
apt-get install libapache2-mod-wsgi-py3
If you need configuration of static files and / or upload to media
ls -al /var/www/
chgrp -R www-data vindazo_de/
chmod -R g+w vindazo_de/
Example apache2 config
Working example
vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost 23.88.96.15:80>
ServerName sendgrid.auto-tweedehands.com
LogLevel warn
ErrorLog /var/log/apache2/sendgrid.auto-tweedehands.com.com.log
CustomLog /var/log/apache2/sendgrid.auto-tweedehands.com.custom.log combined
LimitRequestBody 5120000
WSGIDaemonProcess sendgrid.auto-tweedehands.com processes=10 threads=10 python-path=/home/admin/auto-tweedehands/impex/ display-name=%{GROUP}
WSGIProcessGroup sendgrid.auto-tweedehands.com
WSGIScriptAlias / /home/admin/auto-tweedehands/impex/impex/wsgi.py
<Directory /home/admin/auto-tweedehands/impex/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /media/ /home/admin/auto-tweedehands/media/
<Location "/media">
SetHandler None
Options -Indexes
AddType text/html php
#AllowOverride None
</Location>
Alias /static/ /home/admin/auto-tweedehands/static/
<Location "/static">
SetHandler None
Options -Indexes
AddType text/html php
#AllowOverride None
</Location>
</VirtualHost>
<VirtualHost 116.202.162.47:80>
ServerName dev.vindazo.de
ErrorLog /var/log/apache2/vindazo_de_http_error.log
LogLevel warn
CustomLog /var/log/apache2/vindazo_de_http_custom.log combined
LimitRequestBody 5120000
WSGIDaemonProcess dev.vindazo.de processes=100 threads=100 maximum-requests=100000 display-name=%{GROUP}
WSGIProcessGroup dev.vindazo.de
WSGIScriptAlias / /home/sites/development/de_vindazo/jobfor/wsgi.py
Alias /media/ /var/www/vindazo_de/media/
<Location "/media">
SetHandler None
Options -Indexes
AddType text/html php
#AllowOverride None
</Location>
Alias /static/ /var/www/vindazo_de/static/
<Location "/static">
SetHandler None
Options -Indexes
AddType text/html php
#AllowOverride None
</Location>
</VirtualHost>
Install Apache modules
a2enmod headers
a2enmod expires
a2enmod rewrite
a2enmod ssl
systemctl restart apache2
Apache mod_wsgi without VirtualEnvirment and dockers
When you have decided to web server on Ubuntu without dockers en without VirtualEnvirment.
You can try but with me it has not worked recently because python 3 and python 2.7 could not run at the same time. While the method itself can be useful in some cases. Still, this method is only recommended with python and all recent Django and postgres packges.
Create requirements file
pip freeze > requirements-13-04-2021.txt
Copy all directories to new server development and deployment
apt-get update
apt install python2
apt-get install vim
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py
pip2 install -U pip setuptools wheel
Install all required package from requirements.xt
some problems with install
pip2 install blis==0.7.4
cryptography==1.7.2
cymem==2.0.5
De-core-news-lg ( spacy )
En-core-web-lg
murmurhash==1.0.5
oauth2client==4.1.3
preshed==3.0.5
pycurl==7.43.0
reportlab==3.3.0
spacy==2.3.5
I did not install these packages. I get an error from pip..
Then have installed the Dev version with gcc.
apt-get install python2-dev
apt install build-essential
After that all packages are installed.
Depending on the
pip2 install idna==2.10
pip2 install oauthlib==3.1.0
Difference
pip2 install psycopg2==2.6
pip2 install psycopg2==2.7
And problem with binary import error ( Problem loading psycopg2 with glibc 2.26, version GLIBC_PRIVATE psycopg2)
pip2 install psycopg2-binary
Then problem with
Could not run curl-config: [Errno 2] No such file or directory
Fix it with
apt install libcurl4-openssl-dev libssl-dev
Ok, about 1 hour to install django and all packages.
Tomorrow I will run a server.. In development mode and move apache configs and install memcached and Elasticsearch.
Apache configuration
apt install apache2
apt-get install libapache2-mod-wsgi
Forbidden
You don't have permission to access this resource.
Apache/2.4.41 (Ubuntu) Server at dev.vindazo.de Port 80
vim /etc/apache2/apache2.conf
<Files wsgi.py>
Require all granted
</Files>
vim jobfor/wsgi.py
site.addsitedir('/usr/local/lib/python2.7/site-packages/')
When I have added it in the path and all not helped. This error says that django is not installed and. It looks in default directory of operating system and its python3
ImportError: No module named django.core.wsgi
WSGIPythonHome
indicate to Python when it is initialised where its library files are installed
>>> sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
Crashed and unable to run mod_wsgi with python2
If they had activated the Python 3 virtual environment and its bin directory was in there path, then likely they could simply run 'pip' rather than 'pip3'. You should run 'which pip' to verify whether it was coming from the virtual environment you expect.
The 'mod_wsgi-httpd' package is specifically for installing a distinct instance of Apache itself to get around issues where the system wide Apache is out of date or missing development header files, or otherwise can't modify the system wide configuration. It is generally of more relevance when you don't have root access to fix system wide issues and are only interested in running on an unprivileged port and so do not need root access. You would also have to be using 'mod_wsgi-express' from the 'mod_wsgi' package which was 'pip' installed after 'mod_wsgi-httpd' had been installed as that is the only way to use 'mod_wsgi-httpd' installed version of Apache.
So, for 'mod_wsgi-httpd' you would really want to ignore it. If you have already installed it, then 'pip' uninstall both it and 'mod_wsgi'. The latter needs to be uninstalled as it will be bound to the 'mod_wsgi-httpd' Apache version and the 'mod_wsgi.so' will not work with the system wide.
As to separate users steps in link, they look correct, although I would say that in step 3, it should be highlighted that the LoadModule and WSGIPythonHome lines to be added are what is output when running mod_wsgi-express install-module command. What are output is customised to match what your installation should be. So don't make up values, just use what that command output.
If you have a wsgi.load file still around, run sudo a2dismod wsgi to get rid of it or otherwise manually remove it. It is a left over from old system packaged mod_wsgi.
https://pypi.org/search/?q=Non+standard+Apache+installations
Non standard Apache installations
https://pypi.org/search/?q=Connecting+into+Apache+installation&o=
Connecting into Apache installation
mod_wsgi-express module-config
Comments
Post a Comment