<> Cette page décrit la mise en place d'un système d'informations précises sur la fréquentation et l'objet des visites dans l'implantation. Pour cela, on peut utiliser une machine virtuelle sous [[Debian/Strech]]. {i} Notre outil tourne sous [[Django]] 1.10. Concernant mon installation : * 1 Gio de RAM * Partitions : * `/` (8 Gio) * `/var` (8 Gio) * `/var/lib` (3 Gio) * `/var/www` (25 Gio) Chez moi, cette VM servira pour les petits services web qui viendront plus tard. Par exemple : visites, inscription des usagers (où nous avons besoins des photos pour identifier visuellement les usagers), … Mais pour vous 1 ou 2 Gio suffiront largement sur `/var/www`. Surtout que les implantations n’hébergeront plus de site web ; tout est dans le nuage maintenant. Prérequis: * Installation de [[Debian/Stretch]] * Installation de Apache 2.4 * /!\ Attention, on va exploiter django avec python3 uniquement. Par conséquent tous les paquets demandant python doivent être ceux fonctionnant sous python3; plus concrètement ceux qui dont le préfixe du nom du paquet est `python3-` * Installation de Django 1.10 * Installation d'un gestionnaire de base de données : --(MySQL dans mon cas)-- MariaDb * Installation de git Bon ben… Allons y ! :) Après l'installation de la nouvelle VM, on installe les paquets : {{{#!shell sudo apt-get install apache2 libapache2-mod-wsgi-py3 mysql-server python3-django python3-mysqldb python3-tz python3-pil }}} Si `git` n'est pas installé, veillez à le faire : {{{#!shell sudo apt-get install git }}} Ensuite, on commence par cloner le dépôt de notre outils : {{{#!shell git clone https://github.com/ongolaboy/dacgl_utils.git }}} == Configuration Apache == Dans mon cas, j'ai créé un `VirtualHost` pour l'application : `visiteur.conf` Voici le contenu de mon fichier `/etc/apache2/sites-available/visites.conf` : {{{#!apache ServerName visiteur.cg.auf ServerAdmin tech@cg.auf.org ErrorLog ${APACHE_LOG_DIR}/visiteurs.cm.auf.org_error.log CustomLog ${APACHE_LOG_DIR}/visiteurs.cm.auf.org_access.log combined Alias /static/ /var/www/dacgl/static/ Require all granted WSGIScriptAlias / /home/devpy3/dacgl_utils/dacgl/wsgi.py Require all granted }}} Activer votre `VirtualHost` : {{{#!shell sudo a2ensite visiteur.conf }}} == Configuration MySQL == On va dans notre SGBD, on crée une nouvelle base donnée avec un nouveau utilisateur et un mot de passe. En passant, j'avais déjà installer mon phpMyAdmin pour aller vite. :D Mais sinon, on peut créer en ligne de commande : {{{#!shell mysql -u root -p }}} {{{#!mysql -- Création de ma base de données "visiteurdb" CREATE DATABASE visiteurdb CHARACTER SET 'utf8'; -- Création de l'utilisateur "visitor" CREATE USER 'visitor'@'localhost' IDENTIFIED BY 'Votre mot de passe'; -- Je donne tous les privilèges à mon utilisateur "visitor" (c'est mieux de donner les privilèges juste à ta base) GRANT ALL PRIVILEGES ON * . * TO 'visitor'@'localhost'; }}} La suite dans le dossier `/home/devpy3/`… == Configuration WSGI == {{{#!shell vi dacgl_utils/dacgl/wsgi.py }}} a. on ajoute ces deux lignes (juste après `import os`) : {{{#!python import sys from django.core.wsgi import get_wsgi_application BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) }}} == Configuration Django == {{{#!shell vi dacgl_utils/dacgl/setting.py }}} a. Ajouter le FQDN (Fully Qualified Domain Name) dans la directive : {{{#!python ALLOWED_HOSTS = ['gestion-usager.cg.auf'] ''' # 'gestion-usager.cg.auf' est mon FQDN, mettez le vôtre }}} a. Modifier les paramètre de la base de donnée : {{{#!python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'visiteurdb', 'USER':'visitor', 'PASSWORD':'mot-de-passe-de-visitor', 'HOST':'localhost' } } }}} a. Ajout de la ligne suivante : {{{#!python STATIC_ROOT = '/var/www/dacgl/static' # juste après "STATIC_URL" }}} == Déploiement Django == Se placer ensuite dans le dossier `/home/devpy3/dacgl_utils` et exécuter ces différentes commandes : {{{#!shell python manage.py makemigrations id2 0017_auto_20171016_1741.py: - Alter field derniere_modif on abonne - Alter field inscription on abonne - Alter field date_arrivee on visite - Alter field date_arrivee on visiteprof }}} {{{#!shell python3 manage.py migrate Applying id2.0005_auto_20170505_0733... OK Applying id2.0006_auto_20170509_0825... OK Applying id2.0007_auto_20170512_1337... OK Applying id2.0008_auto_20170512_1345... OK Applying id2.0009_auto_20170512_1355... OK Applying id2.0010_auto_20170512_1356... OK Applying id2.0011_auto_20170512_1358... OK Applying id2.0012_auto_20170512_1538... OK Applying id2.0013_auto_20171008_0950... OK Applying id2.0014_auto_20171008_1015... OK Applying id2.0015_auto_20171008_1740... OK Applying id2.0016_auto_20171014_1800... OK Applying id2.0017_auto_20171016_1741... OK Applying sessions.0001_initial... OK }}} {{{#!shell python3 manage.py makemigrations id2 # On créer le dossier 'dacgl' dans /var/www sudo mkdir /var/www/dacgl sudo mkdir /var/www/dacgl/static }}} Après tous ça, j'ai rencontré ce problème dans mon navigateur : {{{ Bad request (400) }}} Juste parce que j'avais pas renseigné la directive `ALLOW_HOST` dans mon `setting.py`. Mais si vous suivez pas-à-pas tout ce qui est au dessus, vous n'allez pas rencontrer ce problème, sauf si vous avez fait des erreurs de syntaxe ou quelque chose autre. En cas de problème, voir le log. Problème rencontré au niveau de syntaxe de `ALLOW_HOSTS`, oublie d'apostrophes. == Création d'un compte administrateur == Toujours en se positionnant dans le dossier de l'application : {{{#!shell python3 manage.py createsuperuser }}} Introduisez le username et le password. Juste après, j'ai rencontré des problème de CSS, n'ayez pas peur :) , le dossier `static` dans `/var/www/dacgl/static` est encore vide. Les fichier CSS doivent être dans un dossier contrôlé par Apache. == Collecte des fichiers static == Il s'agit d'un transfert des fichiers CSS, javascript et autres dans notre dossier `static`. {{{#!shell python3 manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /var/www/dacgl/static This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes }}} Et après voilà l'outil prend en charge automatiquement le CSS et l'outil peut être mis en production. :D Merci Ongolaboy et IzaneFG == Collecte stats et envoi par courriel == Il existe un dossier ''scripts'' dans le projet qui permet d'obtenir quelques infos et de les envoyer périodiquement à des adresses électroniques indiquées. Il faut les placer dans `usr/local/sbin` et disposer les tâches cron adéquates dans `/etc/cron.d/` . Exemple * Contenu `/etc/cron.d/dacgl-stats` {{{ MAILTO=technique+stats@cm.auf.org 37 18 * * 6 devpy3 /usr/local/sbin/utils3-stats.py 38 00 1 * * devpy3 /usr/local/sbin/utils3-stats-monthly.py }}} ----