Noethysweb

Application de gestion multi-activités

Outils pour utilisateurs

Outils du site


autohebergement

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
autohebergement [2023/09/17 08:53] guerdalautohebergement [2023/12/08 22:37] (Version actuelle) – voir aussi + hiérarchie fred.th
Ligne 7: Ligne 7:
   - Une adresse sécurisée SSL   - Une adresse sécurisée SSL
   - Une connexion SFTP/SSH   - Une connexion SFTP/SSH
 +  - Une base de données
  
-===== Un hébergement sécurisé et compatible =====+==== Un hébergement sécurisé et compatible ====
 La solution NoethysWeb fonctionne grâce au moteur [[https://www.djangoproject.com/|Django]], donc pour l'héberger il faut une machine supportant cette solution. La solution NoethysWeb fonctionne grâce au moteur [[https://www.djangoproject.com/|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 +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 =====+==== 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". 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 dans nom de domaine.//+//**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 =====+==== 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. 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.
  
-====== Installation ======+==== 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 [[installation_apache|ici]].
 +
 +  * Django étant basé sur Python, nous allons installer Python3 et son pendant Webserveur : Gunicorn.
 +<code bash>
 +apt install python3 python3-pip gunicorn
 +</code>
 +  * Le téléchargement de NoethysWeb et sa mise à jour se faisant via Git, on l'installe :
 +<code bash>
 +apt install git
 +</code>
 +  * Nous aurons besoin d'un serveur Web avec certificat https pour fournir l'accès à la solution à nos utilisateurs :
 +<code bash>
 +apt install nginx certbot
 +</code>
 +
 +
 +
 +==== Installation de NoethysWeb ====
 +
 +On crée un espace qui va acceuillir le code de NoethysWeb, on va placer ça dans **/srv/NoethysWeb**
 +
 +<code bash>
 +mkdir /srv/NoethysWeb
 +</code>
 +
 +On téléchargement le code source de NoethysWeb, on met à jour le système avec les pré-requis de l'application.
 +
 +<code bash>
 +cd /srv/NoethysWeb
 +git clone https://github.com/Noethys/Noethysweb.git
 +pip3 install -r requirements.txt
 +</code>
 +
 +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.
 +
 +[[settings_production_detail|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 :
 +
 +<code bash>
 +python3 manage.py makemigrations
 +python3 manage.py migrate
 +python3 manage.py collectstatic
 +python3 manage.py createsuperuser
 +python3 manage.py update_permissions
 +</code>
 +
 +Si vous souhaitez commencer avec une base de données vide :
 +<code bash>
 +python3 manage.py import_defaut
 +</code>
 +
 +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 :
 +<code bash>
 +python3 manage.py import_fichier xxx.nweb motdepasse
 +</code>
 +
 +Lancez enfin le serveur intégré pour tester si tout fonctionne jusque là.
 +<code bash>
 +python3 manage.py runserver
 +</code>
 +
 +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 :
 +<code bash>
 +[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
 +</code>
 +
 +Puis on passe les commandes :
 +<code bash>
 +systemctl daemon-reload
 +systemctl restart gunicorn.service
 +</code>
 +
 +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 [[https://letsencrypt.org/fr/|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 :
 +<code bash>
 +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;
 + }
 +}
 +</code>
 +
 +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
 +<code bash>
 +certbot --renew-by-default certonly --webroot -w /usr/share/nginx/html -d nom_de_domaine
 +</code>
 +
 +Une fois le certificat récupéré, on complète le fichier **/etc/nginx/site-enabled/noethysweb.conf**
 +<code bash>
 +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;
 + }
 +}
 +</code>
 +
 +On relance le service nginx (**systemctl restart nginx.service**) et on teste avec les urls :
 +  * <nowiki>https://nom-de-domaine/</nowiki> <= Portail Famille
 +  * <nowiki>https://nom-de-domaine/utilisateur</nowiki> <= Portail applicatif
 +  * <nowiki>https://nom-de-domaine/administrateur</nowiki> <= Administration Django
 +
 +=====Voir aussi=====
 +Dans la rubrique installation-hébergement : 
 +  * [[autohebergement]]
 +  * [[installation_apache]]
 +  * [[settings_production_detail]]
 +  * [[noethysweb_easy]]
autohebergement.1694933592.txt.gz · Dernière modification : 2023/09/17 08:53 de guerdal