Installation#
This section covers the installation steps of the sofware.
System packages#
$ sudo apt install gettext curl npm libpango-1.0-0 libpangoft2-1.0-0
Poetry#
$ curl -sSL https://install.python-poetry.org | python3 -
at the end of the ~/.bashrc file add the line:
$ export PATH="/root/.local/bin:$PATH"
PostgreSQL#
Install PostgreSQL, the version provided by default for your GNU/Linux distribution.
$ sudo apt-get install postgresql
Create a database, database user:
$ sudo -u postgres createuser <username>
$ sudo -u postgres createdb <database>
$ sudo -u postgres psql
psql (15.6 (Debian 15.6-0+deb12u1))
Type "help" for help.
postgres=# alter user <username> with encrypted password '<password>';
ALTER ROLE
postgres=# grant all privileges on database <database> to <username>;
GRANT
postgres=# alter database <database> owner to <username>;
ALTER DATABASE
E-Learning Platform#
git clone https://github.com/NC3-LU/eLearning.git
cd eLearning
npm install
Copy the config and adjust the DB connection and the other settings:
cp elearning/config_dev.py elearning/config.py
poetry install
poetry shell
python manage.py migrate
python manage.py collectstatic
poetry manage.py compilemessagess
Theme#
In this case, the theme (static and templates) of the sofware will be cloned into the theme folder.
You can replace it by your own. Currently one theme is available:
NC3-LU/eLearning_daaz_theme (default theme, DAAZ Theme)
Exemple:
cd eLearning
git clone https://github.com/NC3-LU/eLearning_daaz_theme theme
Configuration#
In the configuration file elearning/config.py , ensures that you have configured:
PUBLIC_URLALLOWED_HOSTSSITE_NAMEDATABASESHASH_KEYandSECRET_KEYDEBUG: must be set toFalsein a production environmentetc.
You must really set your secret keys.
Here is an example for the Fernet hash key (HASH_KEY):
$ python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key())'
b'Xaj5lFGAPiy2Ovzi4YmlWh-s4HHikFV4AswilOPPYN8='
For the Django secret key (SECRET_KEY), you can for example do:
$ python -c 'import secrets; print(secrets.token_hex())'
9cf5c7b13e469e6f6a9403b33410589031cfe927df6471a1cbdef1d4deb57c37
Populating the DB#
If you want to populate the database with an existing data, see the Populating or updating the DB from json file documentation
Launch the Django application#
poetry run python manage.py runserver 127.0.0.1:8000
Of course, do not do that for a production environment.
Apache#
The mod_wsgi package provides an Apache module that implements a WSGI compliant
interface for hosting Python based web applications on top of the Apache web
server. Install Apache and this module.
$ sudo apt install apache2 libapache2-mod-wsgi-py3
Note
Only in the case you can not use the version of mod_wsgi from your GNU/Linux distribution:
$ sudo apt install apache2 apache2-dev # apxs2
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/refs/tags/5.0.0.tar.gz
$ tar -xzvf 5.0.0.tar.gz
$ cd mod_wsgi-5.0.0/
$ ./configure --with-apxs=/usr/bin/apxs2 --with-python=/home/<user>/.pyenv/shims/python
$ make
$ sudo make install
Then in /etc/apache2/apache2.conf add the lines:
LoadFile /home/<user>/.pyenv/versions/3.11.0/lib/libpython3.11.so
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
Restart Apache:
sudo systemctl restart apache2.service
For the next steps you must have a valid domain name.
Example of VirtualHost configuration file#
Modify the <install_path>, <user>, <virtualenv_path> tags as appropriate
For <virtualenv_path> check using :
$ cd <install_path>
$ poetry env info
<VirtualHost *:80>
ServerAdmin info@nc3.lu
ServerName elearning.nc3.lu
DocumentRoot /var/www/html
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ServerAdmin info@nc3.lu
ServerName elearning.nc3.lu
DocumentRoot <install_path>
WSGIDaemonProcess elearning python-path=<install_path> python-home=<virtualenv_path>/lib/python3.10/site-packages/
WSGIProcessGroup elearning
WSGIScriptAlias / <install_path>/elearning/wsgi.py
<Directory "<install_path>/elearning/">
<Files "wsgi.py">
Require all granted
</Files>
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
Options Indexes FollowSymLinks
Require all granted
</Directory>
Alias /static <install_path>/elearning/static
<Directory <install_path>/static>
Require all granted
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/elearning.nc3.lu_access.log combined
ErrorLog ${APACHE_LOG_DIR}/elearning.nc3.lu_error.log
# Let's Encrypt configuration
SSLCertificateFile /etc/letsencrypt/live/elearning.nc3.lu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/elearning.nc3.lu/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
Then configure HTTPS properly. If you want to use Let’s Encrypt:
sudo apt install certbot python3-certbot-apache
sudo certbot certonly --standalone -d elearning.nc3.lu
sudo a2enmod rewrite
sudo systemctl restart apache2.service
Verify that the certificate will be automatically updated:
$ cat /etc/letsencrypt/renewal/elearning.nc3.lu.conf
# Options used in the renewal process
[renewalparams]
account = <-account-id->
authenticator = apache
server = https://acme-v02.api.letsencrypt.org/directory