API : documentation + configuration

ok mais erreur 404
This commit is contained in:
MaelREBOUX 2021-04-05 15:08:58 +02:00
parent fd46fea548
commit 06ba830c26
2 changed files with 120 additions and 19 deletions

View file

@ -4,57 +4,147 @@
## À propos
Cette API sert à…
Cette API sert à :
* lancer les scripts de traitements des données
* accéder à des informations sur les les traitements
## Installation
### Hello.py
### Créer un environnement virtuel Python
Il faut installer des paquets permettant de builder les librairies requises :
```bash
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
```
Après avoir bien entenud fait un git clone du dépôt :
```bash
cd api
python3 -m venv venv
. venv/bin/activate
pip install flask uwsgi
```
tester
Tester
```bash
python3 hello.py
```
Vérifier sur http://localhost:5000/
Vérifier que l'on obtient bien un "Hello There" sur la page http://localhost:5000/
Faire `ctrl + C` pour arrêter.
ctrl + C pour arrêter
### Configurer uWSGI
On utilise les fichiers wsgi.py et hello.ini
on teste si uWSGI et le socket fonctionne :
On teste si uWSGI et le socket fonctionne :
uwsgi -s /tmp/hello.sock --manage-script-name --mount /hello=wsgi:app
```bash
uwsgi -s /tmp/hello.sock --manage-script-name --mount /hello=wsgi:app --chmod-socket=666 --master
```
### Configurer nginx
On rajoute les directives suivantes au fichier de conf nginx
```
location = /hello { rewrite ^ /hello/; }
location /hello { try_files $uri @hello; }
location @hello {
include uwsgi_params;
uwsgi_pass unix:/tmp/hello.sock;
}
```
Recharger la configuration nginx.
On recharger la configuration de nginx : ```sudo service nginx reload```.
Tester http://ar-redadeg.openstreetmap.bzh/hello/
Tester si on obtient bien toujours un "Hello There" sur la page http://localhost/hello/
Super ! Mais il faut que la commande uwsgi -s qui crée le socket soit active dans le shell.
Super ! Mais il faut que la commande ```uwsgi -s …``` qui crée le socket soit active dans le shell.
Pour sortir du mode venv, taper : ```deactivate```.
### sortir
deactivate
### Configurer un socket spécifique permanent sur la machine
Il s'agit ici de configurer un socket sépcifique qui sera démarré automatiquement au boot.
```navigateur --> nginx http://{host}/api/ :80 --> socket unix {localhost} :5001 --> programme.py```
En décodé : la route /api/ demandée à nginx sera routée vers un serveur Python local qui écoute sur le port 5001 de la machine pour servir le script python qui répondra.
On va supposer que l'on est sous Debian 10 ou Ubuntu Server 20.04 donc on va créer un démon sous system.d.
Créer un fichier "unit" :
```bash
sudo nano /etc/systemd/system/api_hello.service
```
avec les directives ci-dessous :
```
[Unit]
Description=uWSGI instance to serve Hello API
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/data/projets/ar_redadeg/api
Environment="PATH=/data/projets/ar_redadeg/api/venv/bin"
ExecStart=/data/projets/ar_redadeg/api/venv/bin/uwsgi --ini hello.ini
[Install]
WantedBy=multi-user.target
```
On n'oublie pas de mettre les permissions au serveur web sur les fichiers :
```bash
chown -R www-data:www-data /data/projets/ar_redadeg/api/
```
Et on crée le répertoire pour les logs :
```bash
mkdir -p /var/log/uwsgi/
```
Lancer et tester le service :
```bash
# enable
sudo systemctl enable api_hello
# start
sudo systemctl start api_hello
# check
sudo systemctl status api_hello
```
Faire ```ll /tmp/hello*``` pour voir si le socket a bien été créé par www-data.
Tester si on obtient bien toujours un "Hello There" sur la page http://localhost/hello/
Si on veut supprimer le service :
```bash
systemctl stop api_hello
systemctl disable api_hello
rm /etc/systemd/system/api_hello.service
systemctl daemon-reload
systemctl reset-failed
```
## Sources
@ -62,4 +152,12 @@ https://flask.palletsprojects.com/en/1.1.x/deploying/uwsgi/
https://www.vultr.com/docs/deploy-a-flask-website-on-nginx-with-uwsgi
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-20-04
https://medium.com/@ksashok/using-nginx-for-production-ready-flask-app-with-uwsgi-9da95d8ac0f9
https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#putting-behind-a-full-webserver
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#automatically-starting-uwsgi-on-boot

View file

@ -4,8 +4,11 @@ module = wsgi:app
master = true
processes = 5
socket = hello.sock
socket = /tmp/hello.sock
chmod-socket = 660
vacuum = true
die-on-term = true
logto = /var/log/uwsgi/%n.log