-
Notifications
You must be signed in to change notification settings - Fork 2
Tutorial d'installation sur un serveur de production
A REVOIR
Warning, ceci est un pas-à-pas qui fait certains raccourcis pour les besoins de l'exercice, il est important qu'avant toute ouverture au public un administrateur système ait pris la main sur le serveur (SSL, fail2ban, monitoring, etc.)
Ce pas-à-pas est adapté à une machine sous Debian ou Ubuntu Server.
-
Installer les dépendances système
sudo apt install python3.4 python3.4-dev python-virtualenv wget nginx uwsgi uwsgi-plugin-python3 postgresql-9.5 postgresql-9.5-postgis-2.2 git
-
Créer un user Unix dédié
sudo useradd -N ban
-
Créer un dossier de déploiement
sudo mkdir /srv/ban
-
Créer un virtualenv et l'activer
virtualenv /srv/ban/venv --python=/usr/bin/python3.4 source /srv/ban/venv/bin/activate
-
Cloner le code source de l'API
git clone https://github.com/BaseAdresseNationale/api-gestion /srv/ban/src/
Note: les sources seront dans le dossier /srv/ban/src/
-
Installer les dépendances python
pip install -r /srv/ban/src/requirements.txt
Attention, en cas de présence d'un proxy, il sera nécessaire d'ajouter l'option --proxy
pip install -r /srv/ban/src/requirements.txt --proxy=http://user:pwd@url:port
Dans ce cas, les sous dépendances peuvent poser problème et empêcher les installations : dans ce cas, les identifier et les installer 1 à 1. Par exemple (c'est le seul cas d'ailleurs à ce jour), pour installer bcrypt(==3.1.1), qui a elle même pour dépendance cffi(>1.1), il faut installer cffi avant. Dans mon cas, la dernière version de cffi >1.1 était à 1.8.3.
pip install cffi>1 --proxy=http://user:pwd@url:port
-
Installer localement la ban
se positionner d'abord dans le dossier source /srv/ban/src/ python /srv/ban/src/setup.py develop
-
Créer un user Postgresql (avec le même nom que le user Unix pour utiliser la connexion locale sans mot de passe)
sudo -u postgres createuser ban
-
Créer une base de données
sudo -u postgres createdb ban -O ban
-
Activer les extensions postgis et hstore
sudo -u postgres psql ban CREATE EXTENSION postgis; CREATE EXTENSION hstore;
-
Initialiser la base
ban db:create
-
Créer un utilisateur admin
ban auth:createuser --is-staff
-
Importer les données (avec les données France entière ça prend 4 jours environ)
ban import:init fichier1.json fichier2.json fichier3.json
-
Créer un fichier /srv/ban/uwsgi_params avec le contenu suivant (sans le modifier):
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port;
-
Créer un fichier /etc/uwsgi/apps-enabled/ban.ini avec ce contenu:
[uwsgi] uid = ban gid = users # Python related settings # the base directory (full path) chdir = /srv/ban/ # Ban's wsgi module module = ban.http.api:app # the virtualenv (full path) home = /srv/ban/venv # process-related settings # master master = true # maximum number of worker processes processes = 4 # the socket (use the full path to be safe socket = /srv/ban/uwsgi.sock # ... with appropriate permissions - may be needed chmod-socket = 666 stats = /srv/ban/stats.sock # clear environment on exit vacuum = true plugins = python3
-
Créer un fichier de config Nginx
/etc/nginx/sites-enabled/ban
, en pensant à changer le nom de domaine# the upstream component nginx needs to connect to upstream ban { server unix:///srv/ban/uwsgi.sock; } # configuration of the server server { # the port your site will be served on listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; # the domain name it will serve for server_name your-domain.org; charset utf-8; # max upload size client_max_body_size 5M; # adjust to taste # Finally, send all non-media requests to the WSGI server. location / { uwsgi_pass ban; include /srv/ban/uwsgi_params; } }
Penser dans un deuxième temps à mettre en place la gestion SSL.
-
Redémarrer les services
sudo systemctl restart uwsgi nginx en cas d'absence de la commande systemctl, utiliser +service+ à la place sudo service uwsgi restart sudo service nginx restart