===== Maquette du site de remontée des données =====
Notre projet étant celui d'un compteur geiger connecté, nous devons nous assurer de pouvoir envoyer nos données vers un serveur pour les mettre à disposition. En réunion, deux approches ont étés évoquées.
La première est celle d'un serveur central. Cette solution est simple à mettre en place et est souvent utilisée. Par contre elle n'offre que peu de protection en cas de crise, ce qui nous oblige à avoir un deuxième serveur de secours où l'on copie la base de donnée, pour ne rien perdre en cas de panne.
La deuxième est celle de plusieurs serveurs hébergés chez les utilisateurs. Ce système est plus sûr en cas de crise et accroit la confiance des utilisateurs dans le projet. Mais d'un point de vue technique, il est beaucoup plus complexe car il se pose de vraies questions de synchronisation entre les bases.
Nous avons donc choisi de partir sur un serveur central, les premières années et de se laisser la possibilité d'évoluer vers une solution décentralisée si le projet prenait une ampleur considérable.
=== Solutions techniques ===
Le système de base de donnée choisi est [[http://www.postgresql.org/|PostgreSQL]]. Il est open-source et souvent utilisé par les professionnels.
La partie interface communauté sera réalisée en PHP/HTML/javascript pour faciliter l'utilisation de [[http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_contenu|CMS]].
La partie de remontée des données sera réalisée en javascript avec NodeJS, pour faciliter les échanges avec l'application et pour rester souple face au potentiel afflux de données.
=== Installation de PostgreSQL ===
Par un heureux hasard, notre environnement de développement Cloud9, nous permet d'installer et d’exécuter PostgreSQL et NodeJS. Nous pouvons donc nous en servir comme d'un serveur de test.
Pour installer postgreSQL, il suffit d'ouvrir un terminal dans Cloud9 et d'y entrer :
c9pm install postgresql
NodeJS est déjà installé sur Cloud9.
=== Premier test avec NodeJS ===
Pour utiliser PostgreSQL avec NodeJS, nous avons besoin du module nodeJS [[https://github.com/brianc/node-postgres|node-postgres]].
npm install pg
Pour nos tests, nous aurons aussi besoins d'une base, donc nous allons en créer une. On se place dans le dossier Backend et on créé le dossier "database" qui contiendra notre base de donnée :
cd Backend
initdb ./database
Cette opération prend un peu de temps (quelques minutes). Une fois la base créée, nous pouvons démarrer l'instance du serveur :
postgres -D ./database -h $IP &
$IP est une variable d'environnement définie par cloud9 qui correspond à l'IP locale (l'équivalent de 127.0.0.1).
L'esperluette à la fin de la commande indique que l'on souhaite que le process tourne en arrière-plan.
Afin de pouvoir se connecter à la base de données il faut aussi créer un utilisateur :
createuser opengeiger
Il est temps de créer notre base, celle-ci doit avoir le même nom que notre utilisateur :
createdb opengeiger
Nous pouvons nous y connecter avec :
psql -U opengeiger
Dans ce mode, nous pouvons lancer des commandes SQL. Pour quitter le mode SQL il suffit de faire :
\q
Nous allons créer une table de test :
CREATE TABLE mesures_test
(
id SERIAL PRIMARY KEY,
nb_coups INT,
latitude DECIMAL,
longitude DECIMAL,
altitude DECIMAL,
timestamp BIGINT
);
Note: Le type SERIAL est l'équivalent Postgresql de AUTO_INCREMENT de MySQL.
Et y inserer un élément de test :
INSERT INTO mesures_test VALUES (0, 10, 1564543, 1675561, 4567564, 4161657);
Pour tester que tout c'est bien passé nous pouvons afficher le contenu de la table :
SELECT * FROM mesures_test;
Une dernière modification est nécessaire pour pouvoir se connecter à la base. Dans le fichier pg_hba.conf du dossier database, il faut remplacer l'ip 127.0.0.1 par l'ip du workspace (echo $IP), dans notre cas : 127.9.201.1.
Il faut ensuite redémarrer la base. (kill -SIGTERM , puis la relancer)
Nous pouvons maintenant créer un fichier server.js :
var pg = require('pg');
var conStr = "postgres://opengeiger@localhost/opengeiger";
pg.connect(conStr, function(err, db, done) {
if (err) {
return console.error("Could not connect to PostgreSQL", err);
}
db.query("SELECT * FROM mesures_test", function(err, result) {
done(); // Release db back to the pool
if (err) {
return console.error("Error while running query", err);
}
console.log(result);
});
});
Si tout ce passe bien, en lançant le programme avec le bouton run de l'interface, la console devrait afficher le contenu de notre base de test.
=== Afficher les données ===
Pour vérifier que nos informations arrivent bien dans la base de donnée, nous aurons besoin d'un moyen d'afficher les données. Nous réaliserons cela avec le moteur de template express.
npm install express
* [[wiki:projets:smartphone-geiger:backend2|Article suivant : Maquette du site de remontée des données II]]
* [[wiki:projets:smartphone-geiger:accueil|Retour à l'accueil]]
* [[wiki:projets:smartphone-geiger:chronologie|Retour à la chronologie du projet]]
* [[wiki:projets:smartphone-geiger:code-propre|Article précédent : Mise au propre du code]]