Table des matières
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 :
- Un hébergement sécurisé et compatible
- Une adresse sécurisée SSL
- Une connexion SFTP/SSH
- 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 :
- http://IpMachine:8000 ⇐ pour l'accès au portail Famille
- http://IpMachine:8000/utilisateur ⇐ pour l'accès à l'applicatif
- http://IpMachine:8000/administrateur ⇐ pour l'accès à la partie administration Django
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 :
- Génération du certificat SSL avec certbot
- 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 :