autohebergement
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
autohebergement [2023/09/17 09:56] – guerdal | autohebergement [2023/12/08 22:37] (Version actuelle) – voir aussi + hiérarchie fred.th | ||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
- Une base de données | - 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:// | La solution NoethysWeb fonctionne grâce au moteur [[https:// | ||
Nous partirons du postulat que la machine fonctionne avec le système d' | Nous partirons du postulat que la machine fonctionne avec le système d' | ||
- | ===== Une adresse sécurisée SSL ===== | + | ==== Une adresse sécurisée SSL ==== |
Afin de permettre l' | Afin de permettre l' | ||
- | //**Note de l' | + | //**Note de l' |
- | ===== Une connexion SFTP/ | + | ==== Une connexion SFTP/SSH ==== |
Afin d' | Afin d' | ||
- | ===== Base de données | + | ==== 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' | NoethysWeb fonctionne avec une base de données, celle-ci est de base sur le moteur sqlite3. On peut aussi utiliser d' | ||
Ligne 29: | Ligne 29: | ||
Nous partirons du postulat que le moteur sélectionné est Mysql. | Nous partirons du postulat que le moteur sélectionné est Mysql. | ||
- | ====== Installation | + | ===== Installation |
- | Une fois le système d' | + | Une fois le système d' |
+ | Pour l' | ||
* Django étant basé sur Python, nous allons installer Python3 et son pendant Webserveur : Gunicorn. | * Django étant basé sur Python, nous allons installer Python3 et son pendant Webserveur : Gunicorn. | ||
- | < | + | < |
apt install python3 python3-pip gunicorn | apt install python3 python3-pip gunicorn | ||
</ | </ | ||
* Le téléchargement de NoethysWeb et sa mise à jour se faisant via Git, on l' | * Le téléchargement de NoethysWeb et sa mise à jour se faisant via Git, on l' | ||
- | < | + | < |
apt install git | apt install git | ||
</ | </ | ||
* Nous aurons besoin d'un serveur Web avec certificat https pour fournir l' | * Nous aurons besoin d'un serveur Web avec certificat https pour fournir l' | ||
- | < | + | < |
apt install nginx certbot | apt install nginx certbot | ||
</ | </ | ||
- | ===== Installation de NoethysWeb | + | |
+ | |||
+ | ==== Installation de NoethysWeb ==== | ||
On crée un espace qui va acceuillir le code de NoethysWeb, on va placer ça dans **/ | On crée un espace qui va acceuillir le code de NoethysWeb, on va placer ça dans **/ | ||
- | < | + | < |
mkdir / | mkdir / | ||
</ | </ | ||
Ligne 56: | Ligne 59: | ||
On téléchargement le code source de NoethysWeb, on met à jour le système avec les pré-requis de l' | On téléchargement le code source de NoethysWeb, on met à jour le système avec les pré-requis de l' | ||
- | < | + | < |
cd / | cd / | ||
git clone https:// | git clone https:// | ||
Ligne 68: | Ligne 71: | ||
On initialise ensuite la base de données et l' | On initialise ensuite la base de données et l' | ||
- | < | + | < |
python3 manage.py makemigrations | python3 manage.py makemigrations | ||
python3 manage.py migrate | python3 manage.py migrate | ||
Ligne 77: | Ligne 80: | ||
Si vous souhaitez commencer avec une base de données vide : | Si vous souhaitez commencer avec une base de données vide : | ||
- | < | + | < |
python3 manage.py import_defaut | 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' | Ou si vous souhaitez importer la base de données d'un fichier Noethys - où xxx est le nom du fichier d' | ||
- | < | + | < |
python3 manage.py import_fichier xxx.nweb motdepasse | python3 manage.py import_fichier xxx.nweb motdepasse | ||
</ | </ | ||
Lancez enfin le serveur intégré pour tester si tout fonctionne jusque là. | Lancez enfin le serveur intégré pour tester si tout fonctionne jusque là. | ||
- | < | + | < |
python3 manage.py runserver | python3 manage.py runserver | ||
</ | </ | ||
Ligne 96: | Ligne 99: | ||
* http:// | * http:// | ||
- | ===== Mise en production ===== | + | ==== 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' | 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' | ||
+ | |||
+ | Le démarrage de l' | ||
+ | <code bash> | ||
+ | [Unit] | ||
+ | Description=gunicorn daemon | ||
+ | # | ||
+ | After=network.target | ||
+ | [Service] | ||
+ | User=root | ||
+ | Group=www-data | ||
+ | WorkingDirectory=/ | ||
+ | ExecStart=gunicorn --access-logfile - --workers 3 --forwarded-allow-ips=" | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | Puis on passe les commandes : | ||
+ | <code bash> | ||
+ | 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 [[https:// | ||
+ | |||
+ | Pour ce faire nous allons configurer nginx en créant le fichier **/ | ||
+ | <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 / | ||
+ | root / | ||
+ | try_files $uri index.php; | ||
+ | } | ||
+ | |||
+ | # On redirige les appels vers la partie https du site | ||
+ | location / { | ||
+ | rewrite ^ https:// | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | On supprime le fichier **default** présent dans le répertoire **/ | ||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | Une fois le certificat récupéré, | ||
+ | <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 / | ||
+ | root / | ||
+ | try_files $uri index.php; | ||
+ | } | ||
+ | |||
+ | # On redirige les appels vers la partie https du site | ||
+ | location / { | ||
+ | rewrite ^ https:// | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 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 | ||
+ | ssl_prefer_server_ciphers on; | ||
+ | |||
+ | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||
+ | |||
+ | ssl_ciphers ' | ||
+ | ssl_session_cache shared: | ||
+ | |||
+ | ssl_certificate / | ||
+ | ssl_certificate_key / | ||
+ | |||
+ | # Diffie-Hellman parameter for DHE ciphersuites, | ||
+ | ssl_dhparam / | ||
+ | |||
+ | ## verify chain of trust of OCSP response using Root CA and Intermediate certs | ||
+ | ssl_trusted_certificate / | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | # On permet à Nginx de gérer les fichiers static de NoethysWeb | ||
+ | location /static/ { | ||
+ | root / | ||
+ | } | ||
+ | |||
+ | # On permet à Nginx de gérer les fichiers media de NoethysWeb | ||
+ | location /media/ { | ||
+ | root / | ||
+ | } | ||
+ | |||
+ | # On passe le reste à Gunicorn | ||
+ | location / { | ||
+ | include proxy_params; | ||
+ | proxy_redirect | ||
+ | client_max_body_size 200m; | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | On relance le service nginx (**systemctl restart nginx.service**) et on teste avec les urls : | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | |||
+ | =====Voir aussi===== | ||
+ | Dans la rubrique installation-hébergement : | ||
+ | * [[autohebergement]] | ||
+ | * [[installation_apache]] | ||
+ | * [[settings_production_detail]] | ||
+ | * [[noethysweb_easy]] |
autohebergement.1694937412.txt.gz · Dernière modification : 2023/09/17 09:56 de guerdal