I would like to share my experience of deployment on Ubuntu server.
Software versions:
- jam.py-v7 7.0.57
https://pypi.org/project/jam.py-v7/- Ubuntu 24.04 LTS
- python 3.12.3
- apache 2.4.58
- libapache2-mod-wsgi-py3 5.0.0
1. Preparing the system.
sudo apt update
sudo apt upgrade -y
sudo apt install -y python3.12 python3.12-venv python3.12-dev python3-pip
sudo apt install -y apache2 apache2-dev
sudo apt install -y build-essential
sudo apt install -y git wget curl
sudo apt install -y libssl-dev libffi-dev
sudo apt install -y python3-full
2. Installing and configuring mod_wsgi
sudo apt install libapache2-mod-wsgi-py3
sudo a2enmod wsgi
sudo systemctl restart apache2
Checking:
apache2ctl -M | grep wsgi
Result:
wsgi_module (shared)
3. Creating a project structure
sudo mkdir -p /var/www/jam
sudo chown -R $USER:www-data /var/www/jam
cd /var/www/jam
python3.12 -m venv jam-env
source jam-env/bin/activate
pip install --upgrade pip
pip install jam.py-v7
4. Creating a JAM project
source /var/www/jam/jam-env/bin/activate
jam-project.py
5. Project configuration
Update file /var/www/jam/server.py :
server.py:
-------------------------------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, PROJECT_DIR)
import jam.wsgi
def create_application():
return jam.wsgi.create_application(PROJECT_DIR)
application = create_application()
if __name__ == '__main__':
app = create_application()
app.start()
-------------------------------------
Update file /var/www/jam/wsgi.py :
wsgi.py:
-------------------------------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
PROJECT_DIR = '/var/www/jam'
VENV_DIR = '/var/www/jam/jam-env'
sys.path.insert(0, os.path.join(VENV_DIR, 'lib', 'python3.12', 'site-packages'))
sys.path.insert(0, PROJECT_DIR)
os.chdir(PROJECT_DIR)
import jam.wsgi
application = jam.wsgi.create_application(PROJECT_DIR)
-------------------------------------
6. Setting up access permissions
sudo chown -R www-data:www-data /var/www/jam
sudo chmod -R 755 /var/www/jam
sudo chmod -R 775 /var/www/jam/static
sudo chmod 664 /var/www/jam/admin.sqlite
7. Setting up Apache Virtual Host
Create file /etc/apache2/sites-available/jam.conf :
jam.conf:
-------------------------------------
<VirtualHost *:80>
ServerName jam.local
ServerAlias www.jam.local
DocumentRoot /var/www/jam
# WSGI Configuration
WSGIDaemonProcess jam user=www-data group=www-data python-home=/var/www/jam/jam-env python-path=/var/www/jam
WSGIProcessGroup jam
WSGIScriptAlias / /var/www/jam/wsgi.py
WSGIPassAuthorization On
# Directory permissions
<Directory /var/www/jam>
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
# Static files
Alias /static /var/www/jam/static
<Directory /var/www/jam/static>
Require all granted
ExpiresActive On
ExpiresDefault "access plus 1 month"
</Directory>
# Logs
ErrorLog ${APACHE_LOG_DIR}/jam_error.log
CustomLog ${APACHE_LOG_DIR}/jam_access.log combined
LogLevel info
# Additional security headers
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
</VirtualHost>
-------------------------------------
8. Activation of modules and site
sudo a2enmod headers
sudo a2enmod expires
sudo a2enmod rewrite
sudo a2ensite jam.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
Check site configuration:
sudo apache2ctl configtest
Restart apache service:
sudo systemctl restart apache2
sudo systemctl enable apache2
sudo systemctl status apache2
I was able to successfully deploy jam-v7 several times by strictly following these steps.