Noethysweb

Application de gestion multi-activités

Outils pour utilisateurs

Outils du site


autohebergement

Auto-Hébergement

La solution NoethysWeb étant Opensource et fonctionnant dans un navigateur Web, il est relativement facile de l'autohéberger.

Quelques pré-requis sont nécessaires :

  1. Un hébergement sécurisé et compatible
  2. Une adresse sécurisée SSL
  3. Une connexion SFTP/SSH
  4. Une base de données

Un hébergement sécurisé et compatible

La solution NoethysWeb fonctionne grâce au moteur Django, donc pour l'héberger il faut une machine supportant cette solution.

Nous partirons du postulat que la machine fonctionne avec le système d'exploitation Debian 11 Bullseye qui est compatible avec la solution Django.

Une adresse sécurisée SSL

Afin de permettre l'accès à la solution en toute sécurité, celle-ci devra être installé sur un système ayant un nom de domaine et une adresse (url) fonctionnant en https avec un certificat reconnu par les navigateurs. Cela est nécessaire pour l'utilisation de la partie “Portail Famille”.

Note de l'installateur : Sans la partie “Portail Famille”, la solution NoethysWeb peut fonctionner sur un réseau local sans nom de domaine.

Une connexion SFTP/SSH

Afin d'effectuer les opérations sur le serveur, un accès Secure Shell (SSH) et un accès de transfert de fichiers (SFTP) sont utilisés.

Base de données

NoethysWeb fonctionne avec une base de données, celle-ci est de base sur le moteur sqlite3. On peut aussi utiliser d'autres moteurs de base de données tels que MySql, PostGresql, …

Nous partirons du postulat que le moteur sélectionné est Mysql.

Installation (avec un serveur NGINX)

Une fois le système d'exploitation installé sur la machine, il faut installer quelques composants supplémentaires afin de permettre à la solution de fonctionner.
Pour l'installation avec un serveur Apache2 voir ici.

  • Django étant basé sur Python, nous allons installer Python3 et son pendant Webserveur : Gunicorn.
apt install python3 python3-pip gunicorn
  • Le téléchargement de NoethysWeb et sa mise à jour se faisant via Git, on l'installe :
apt install git
  • Nous aurons besoin d'un serveur Web avec certificat https pour fournir l'accès à la solution à nos utilisateurs :
apt install nginx certbot

Installation de NoethysWeb

On crée un espace qui va acceuillir le code de NoethysWeb, on va placer ça dans /srv/NoethysWeb

mkdir /srv/NoethysWeb

On téléchargement le code source de NoethysWeb, on met à jour le système avec les pré-requis de l'application.

cd /srv/NoethysWeb
git clone https://github.com/Noethys/Noethysweb.git
pip3 install -r requirements.txt

On recopie le fichier settings_production_modele.py, qui se trouve dans le répertoire /srv/NoethysWeb/noethysweb/noethysweb, en settings_production.py. On personnalise le fichier settings_production.py selon nos besoins.

Détails des paramètres du fichier settings_production.py.

On initialise ensuite la base de données et l'application avec les commandes suivantes :

python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py collectstatic
python3 manage.py createsuperuser
python3 manage.py update_permissions

Si vous souhaitez commencer avec une base de données vide :

python3 manage.py import_defaut

Ou si vous souhaitez importer la base de données d'un fichier Noethys - où xxx est le nom du fichier d'export créé depuis la fonction “Exporter vers Noethysweb” du menu Fichier de Noethys, et motdepasse est le mot de passe saisi lors de la génération de l'export :

python3 manage.py import_fichier xxx.nweb motdepasse

Lancez enfin le serveur intégré pour tester si tout fonctionne jusque là.

python3 manage.py runserver

Connectez vous via un navigateur Web à l'adresse Ip de la machine qui héberge NoethysWeb et sur le port 8000 soit :

Mise en production

Une fois les tests effectués, on passe à la mise en production.

La mise en production va passer par la configuration à la fois de Gunicorn, applicatif qui va faire tourner la partie Web Python, et Nginx, applicatif qui va s'occuper de la partie SSL et des fichiers Statiques du site.

Le démarrage de l'application Gunicorn est géré par systemD. On crée le fichier /etc/systemd/system/gunicorn.service avec pour contenu :

[Unit]
Description=gunicorn daemon
#Requires=gunicorn.socket
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/srv/Noethysweb/noethysweb
ExecStart=gunicorn --access-logfile - --workers 3 --forwarded-allow-ips="IP de la machine, IP du proxy s'il y en a un" --log-file /var/log/gunicorn/noethys.log --bind 0.0.0.0:5000 noethysweb.wsgi
 
[Install]
WantedBy=multi-user.target

Puis on passe les commandes :

systemctl daemon-reload
systemctl restart gunicorn.service

Ensuite, concernant Nginx, on va faire ça en deux étapes :

  1. Génération du certificat SSL avec certbot
  2. Configuration de Nginx pour gérer le SSL

Gestion Certificat

On va utiliser Let'sEncrypt pour gérer notre certificat SSL via la commande certbot. Cette commande va demander aux serveurs de letsencrypt detester si notre nom de domaine répond bien aux demandes depuis Internet.

Pour ce faire nous allons configurer nginx en créant le fichier /etc/nginx/site-enabled/noethysweb.conf avec le contenu suivant :

server {
	listen 80 default_server;
	listen [::]:80 default_server;
 
	server_name nom_de_domaine;
 
	# On va gérer les apples de Certbot
	location /.well-known/acme-challenge {
		root /usr/share/nginx/html;
		try_files $uri index.php;
	}
 
	# On redirige les appels vers la partie https du site
	location / {
		rewrite ^ https://nom_de_domaine$request_uri? redirect;
	}
}

On supprime le fichier default présent dans le répertoire /etc/nginx/sites-enabled. On relance nginx avec la commande systemctl restart nginx.service

Puis on lance la commande certbot pour acquérir un certificat pour notre domaine

certbot --renew-by-default certonly --webroot -w /usr/share/nginx/html -d nom_de_domaine

Une fois le certificat récupéré, on complète le fichier /etc/nginx/site-enabled/noethysweb.conf

server {
	listen 80 default_server;
	listen [::]:80 default_server;
 
	server_name nom_de_domaine;
 
	# On va gérer les apples de Certbot
	location /.well-known/acme-challenge {
		root /usr/share/nginx/html;
		try_files $uri index.php;
	}
 
	# On redirige les appels vers la partie https du site
	location / {
		rewrite ^ https://nom_de_domaine$request_uri? redirect;
	}
}
 
server {
	listen 443 default_server;
	listen [::]:443 default_server;
 
	server_name nom_de_domaine;
 
	real_ip_header X-Forwarded-For;
	real_ip_recursive on;
	set_real_ip_from 0.0.0.0/0;
 
	ssl_session_timeout  10m;
	ssl_prefer_server_ciphers on;
 
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 
	ssl_ciphers 'AES256+EECDH:AES256+EDH';
	ssl_session_cache shared:SSL:10m;
 
	ssl_certificate /etc/letsencrypt/live/_nom_de_domaine_/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/_nom_de_domaine_/privkey.pem;
 
	# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
	ssl_dhparam /etc/nginx/keys/dh4096.pem;
 
	## verify chain of trust of OCSP response using Root CA and Intermediate certs
	ssl_trusted_certificate /etc/letsencrypt/live/_nom_de_domaine_/chain.pem;
 
	resolver 8.8.8.8 8.8.4.4 valid=86400;
	resolver_timeout 10;
 
	port_in_redirect off;
	proxy_buffering off;
	proxy_http_version 1.1;     # Properly proxy websocket connections
	proxy_read_timeout 300s;    # terminate websockets afer 5min of inactivity
	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-Host $host;
	proxy_set_header X-Forwarded-Server $host;
	proxy_headers_hash_max_size 512;
	proxy_headers_hash_bucket_size 128;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Protocol $scheme;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "upgrade";
 
	# On permet à Nginx de gérer les fichiers static de NoethysWeb
	location /static/ {
		root /srv/Noethysweb/noethysweb;
	}
 
	# On permet à Nginx de gérer les fichiers media de NoethysWeb
	location /media/ {
		root /srv/Noethysweb/noethysweb;
	}
 
	# On passe le reste à Gunicorn
	location / {
		include proxy_params;
		proxy_redirect     off;
		client_max_body_size 200m;
		proxy_pass http://localhost:5000;
	}
}

On relance le service nginx (systemctl restart nginx.service) et on teste avec les urls :

  • https://nom-de-domaine/ ⇐ Portail Famille
  • https://nom-de-domaine/utilisateur ⇐ Portail applicatif
  • https://nom-de-domaine/administrateur ⇐ Administration Django

Voir aussi

Dans la rubrique installation-hébergement :

autohebergement.txt · Dernière modification : 2023/12/08 22:37 de fred.th