Système de synchronisation des projets du FabLab Sur le blog Ghost depuis une base de donnée SQlite
Le projet n'est plus maintenu et je n'ai plus de contact avec le Fablab du CESI. Contactez moi si vous désirez récuperer le projet
L'installation via Docker permet une isaolation de l'environnement et un déploiement plus facile. Cette méthode est recommandée par rapport à l'installation manuel.
Clonez le repository
Construisez de l'image docker
docker build . -t epickiwi/fablab-sync
Démarrez du container avec les variable d'environnement de configuration
docker run -d --name fablab-sync -e GHOST_URL=http://ghost:2368 -e GHOST_ADMIN_API_KEY=asdfasdfasdf -e SYNC_PASSWORD=azerty -p 8080:8080 epickiwi/fablab-sync
Les sources sont présentes dans le dossier /sync
et les données sont dans /sync/var
il faut monter ce dernier dossier vers la base de données SQlite.
Le système nécéssite NodeJS et NPM.
Cloner le repository et installer les dépendances
npm install
Définir une intégration dans l'interface de Ghost
Définir les variables d'environnement de configuration
GHOST_URL="http://localhost:2368"
GHOST_ADMIN_API_KEY="asdfasdfasdf"
SYNC_PASSWORD="azerty"
Démarrer le système
npm run start
Rendez vous sur l'interface Web (par défaut sur http://localhost:8080)
Le paramétrage de l'application s'éfféctue au travers des variables de l'environnement. Les différentes variables d'environnement disponibles sont les suivantes :
GHOST_URL
: URL de l'instance d'administration de Ghost sans slash final [REQUIS]GHOST_ADMIN_API_KEY
: La clé d'API admin de l'instance Ghost [REQUIS]SYNC_PASSWORD
: Le mot de passe qui sera demandé lors de la demande de sychronisation [REQUIS]DB_LOCATION
: Emplacement de la base de données SQlite [Par défaut :var/db.sqlite
]PICTURES_BASEPATH
: Emplacement du dossier contenant les images [Par défaut :var
]PORT
: Port d'écoute de l'application [Par défaut :8080
]BETWEEN_SYNC_TIME
: Temps minimum entre deux synchronisations (en s) [Par défaut :7200
(2h)]
Le système dispose d'une API permettant de démarrer une synchronisation et de consulter son avancement
GET /api/get-changes
Listing de l'ensemble des changement requis qui seront éfféctués surant la prochaine synchronisation
Exemple de réponse :
{
"add": {
"posts": [
"Battery Star"
],
"tags": [
"Projet Personnel",
"Projet Innovation",
"Nice",
"Projet #1"
]
}
}
GET /api/sync
Authorization: [mot de passe base64]
Démarre une synchronisation et erenvoie l'état actuel de cette synchronisation.
Cette action nécéssite un mot de passe en base 64 dans le header Authorization
pour être utilisé.
Exemple de réponse:
{
"startedDate": "2019-07-07T18:48:16.115Z",
"state": "synchronizing",
"syncError": null,
"started": true
}
GET /api/progression
Renvoie la progression de la dernière synchronisation. L'état d'une synchronisation peut être :
synchronizing
: La synchronisation est en coursended
: La synchronisation est terminéeerror
: La synchronisation à rencontré une érreur dont les message est danssyncError
Le temps requis avant la prochaine synchronisation est donné dans mustWait
.
Exemple de réponse :
{
"startedDate": "2019-07-07T18:48:16.115Z",
"state": "ended",
"syncError": null,
"mustWait": 0
}
Une documentation du code à l'échelle de la fonction est disponible et inclue sous forme de JSDoc. Il est possible de générer une documentaiton web avec la commande suivante :
npm run doc
La documentation est générée dans le dossier doc
.
Il existe deux modèles utilisés pour la syncronisation. Ces modèles utilisent le modèle de moteur de template Handlebars.
Le modèle de post est le modèle permettant de créer la présentation d'un article sur la base d'un post. Il se situe dans le fichier post-template.hbs
.
Les données utilisables dans ce modèle sont les suivantes :
{
"id": 1,
"type": {
"id": 1,
"acronym": "AZ",
"name": "Azerty",
},
"name": "azerty",
"centre_id": 1,
"centre": {
"id": 1,
"region": "SE",
"name": "Lyon",
},
"short_description": "azertyazerty",
"huge_description": "azertyuiopqsdfghjklmwxcvbvn",
"documentation": "http://localhost:8080/doc",
"creation_date": Date,
"end_date": Date,
"picture": "df/er/fr.png",
}
Le modèle de page représente la page HTML envoyée lors de la l'arrivée d'une requète à la racine du serveur. Ce modèle est disponible dans le fichier index.hbs
.
Les données utilisables dans ce modèle sont les suivantes :
{
"changes": {
"add": {
"posts": [
{
"id": 1,
"name": "azerty",
"centre_id": 1, "short_description": "azertyazerty",
"huge_description": "azertyuiopqsdfghjklmwxcvbvn",
"documentation": "http://localhost:8080/doc",
"creation_date": Date,
"end_date": Date,
"picture": "df/er/fr.png",
}
],
"tags": [
"Projet Personnel",
"Projet Innovation",
"Nice",
"Projet #1"
]
}
},
"cantSync": true,
"lastSync": Date,
"relativeLastSync": "il y a 2 minutes",
"mustWait": 1762
}
mustwait
: est le temps (en ms) nécéssaire d'attendre avant la prochaine syncronisationcantSync
: est à true si il est impossible de syncroniser