Installer Wifi-with-me

Le Tue 07 November 2017 Par admin  | Catégorie : misc

Tags :

 

wifi-with-me est une application Web écrite en python3 avec django. Nous allons la déployer sur une Debian stretch, avec nginx et uwsgi.

J'ai fait ici des choix qui peuvent être considérés comme peu orthodoxes. Notamment, je choisis délibérément de créer un virtualenv "poreux" avec l'option --system-site-packages. Ainsi, certaines dépendances python peuvent être installées et maintenues par APT.

Dans le cas de wifi-with-me, presque toutes les dépendances python sont déjà disponibles sous forme de paquets Debian officiels. Seule la version de django ne convient pas et c'est ce qui nous oblige encore à faire usage d'un virtualenv. Plus tard si le code évolue pour devenir compatible avec la version de django disponible dans Debian (actuellement 1.10 dans stretch et 1.11 dans testing) alors on pourra se passer complètement de virtualenv.

Paquets Debian

sudo apt --no-install-recommends install python3-pip \
python3-virtualenv virtualenv \
python3-yaml python3-tz python3-sqlparse \
uwsgi-plugin-python3 uwsgi-emperor equivs

Remarque : le paquet equivs tire beaucoup de dépendances. Si c'est un problème, il est tout à fait possible de l'installer sur une autre machine pour créer le méta-package.

Méta-paquet

Nous créons un méta-paquet Debian déclarer les dépendances nécessaires au bon fonctionnement de WWM.

cd /tmp/
equivs-control wifi-with-me.control
edit wifi-with-me.control
Section: misc
Priority: optional
Homepage: https://code.ffdn.org/FFDN/wifi-with-me
Standards-Version: 3.9.2

Package: wifi-with-me
Version: 2017.11
Maintainer: Admin Franciliens <admin@listes.franciliens.net>
Depends: python3, python3-yaml, python3-tz, python3-sqlparse,
 uwsgi-plugin-python3, python3-pip, python3-virtualenv, virtualenv
Architecture: all
Description: Plate-forme d'échange pour personnes intéressées par un réseau radio
 Application Web permettant de recenser les personnes souhaitant participer
 à la mise en œuvre d'un réseau de ponts Radio.
 .
 L'intérêt des ponts radio étant de pouvoir fournir de l'accès à Internet
 dans des zones "blanches".

On peut maintenant générer le méta-paquet puis l'installer :

equivs-build wifi-with-me.control 
sudo dpkg -i wifi-with-me_2017.11_all.deb

Récupération du code

sudo mkdir /srv/venv
sudo chown www-data: /srv/venv
sudo -u www-data virtualenv --system-site-packages -p $(which python3) /srv/venv
sudo mkdir /srv/code/wwm
sudo chown www-data: /srv/code/wwm
cd /srv/code/wwm
sudo -u www-data git clone https://code.ffdn.org/FFDN/wifi-with-me.git .
# ou bien sudo -u www-data curl -JO https://code.ffdn.org/FFDN/wifi-with-me/archive/master.tar.gz && sudo -u tar xavf master.tar.gz
sudo -u www-data /srv/venv/bin/pip install -r requirements/base.txt

Customisation de l'appli

Créer le fichier /srv/code/wwm/wifiwithme/settings/local.py avec ceci :

# -*- coding: utf-8 -*-
ISP={
    'NAME':'Franciliens.net',
    'TITLE':'Réseau wifi expérimental',
    'SITE':'https://www.franciliens.net',
    'EMAIL':'bureau (at) franciliens.net',
    'ZONE':'Région parisienne',
    'ADDRESS_EXAMPLE': 'rue gallieni, boulogne-billancourt',
    'URL_CONTACT':'https://www.franciliens.net/contact/',
    'LATITUDE':48.8657,
    'LONGITUDE':2.34581,
    'ZOOM':11,
    'CNIL':{
        'LINK':'https://f.franciliens.net/administratif/cnil/cnil-franciliens-2117019-wifiwithme.pdf',
        'NUMBER':2117019
    }
}
ALLOWED_HOSTS = ['tools.franciliens.net', 'localhost']
NOTIFICATION_EMAILS=['admin@listes.franciliens.net', 'bureau@listes.franciliens.net']
DEFAULT_FROM_EMAIL='admin@listes.franciliens.net'
SITE_URL="https://tools.franciliens.net/"
URL_PREFIX='wifiwithme/'

Initialisation de la BDD

Voici la config à placer dans wifiwithme/settings/local.py :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'wifiwithme',
        'USER': 'fcn',
        'PASSWORD': 'blablablabla',
        'HOST': 'styx.franciliens.net',
        'PORT': '5432',
    }
}

Il faut ensuite taper :

sudo -u www-data /srv/venv/bin/python manage.py migrate --settings wifiwithme.settings.prod

Lancement automatique au démarrage

sudo mkdir /run/wifiwithme
sudo chown www-data: /run/wifiwithme

Créer le fichier /etc/uwsgi-emperor/vassals/wifiwithme.ini avec :

[uwsgi]
plugins = python3
uwsgi-socket = /run/wifiwithme/uwsgi.socket
chdir = /srv/code/wwm
module=wifiwithme.wsgi
processes = 2
threads = 2
virtualenv = /srv/venv
env = DJANGO_SETTINGS_MODULE=wifiwithme.settings.prod
vacuum = True

uid = www-data
gid = www-data

Configuration nginx

  location /wifiwithme {
    location /wifiwithme/assets {
      alias /srv/code/wwm/wifiwithme/static;
      expires 1h;
    }
    uwsgi_pass unix:/run/wifiwithme/uwsgi.socket;
    include uwsgi_params;
  }