From 79a9e20cc62b8b2a31b80622b1fdecebd32f79d3 Mon Sep 17 00:00:00 2001 From: Anthony Borghi <anthony.borghi@veremes.com> Date: Fri, 3 Mar 2023 16:54:23 +0100 Subject: [PATCH] doc VAI 1er jet --- source/index.rst | 2 ++ source/vai/dev.md | 19 ++++++++++++++ source/vai/generation.md | 33 +++++++++++++++++++++++++ source/vai/images/pyinstaller-logo.png | Bin 0 -> 16304 bytes source/vai/index.rst | 21 ++++++++++++++++ source/vai/presentation.md | 29 ++++++++++++++++++++++ 6 files changed, 104 insertions(+) create mode 100644 source/vai/dev.md create mode 100644 source/vai/generation.md create mode 100644 source/vai/images/pyinstaller-logo.png create mode 100644 source/vai/index.rst create mode 100644 source/vai/presentation.md diff --git a/source/index.rst b/source/index.rst index c784815..c56ca4b 100644 --- a/source/index.rst +++ b/source/index.rst @@ -18,4 +18,6 @@ Cette documentation sert de référence en ce qui concerne les outils et usages vscode/index.rst git/index.rst + vai/index.rst + diff --git a/source/vai/dev.md b/source/vai/dev.md new file mode 100644 index 0000000..06809ad --- /dev/null +++ b/source/vai/dev.md @@ -0,0 +1,19 @@ +# Préparer le code pour la génération de setup + +a +## Préparer l'application + +### Définition de l'arboresence de dépendances + +## Préparer les modules + +### Définition du fichier de dépendances + +## Préparer un module externe + + +# Usages avancés + +## Utilisation de template spécifique + +## Ajout d'un script de pré/post installation \ No newline at end of file diff --git a/source/vai/generation.md b/source/vai/generation.md new file mode 100644 index 0000000..68e16a8 --- /dev/null +++ b/source/vai/generation.md @@ -0,0 +1,33 @@ +# Génération de setup + +## Génération d'un setup d'installation pour une application + +Il faut passer par [le Jenkins de Veremes](http://jenkins.veremes.net/), et lancer le job **Generate_app_setup_2020**. + +Il faut définir l'application à générer (si l'application que vous voulez générer n'est pas dans la liste il faut demander à un administrateur de l'ajouter). +La référence du commit Git de l'application à générer, la référence du commit pour Le job jenkins et la référence Git pour VAI. + +La référence du commit pour Jenkins, est utilisé pour la définition du pipeline et l'AMI à utilisé pour lancer VAI. +La référence du commit pour VAI, permet de définir quelle version de VAI on veut lancer pour générer l'installer +La référence du commit de l'application est utilisé pour généré le app.tgz. + +Le job, va lancer une machine AWS d'aprés une AMI Linux avec PyInstaller, ... déjà installer sur la machine. Jenkins, va ensuite se connecter à la machine, cloner les sources de l'application à générer, puis lancer un script qui va permettre la construction du app.tgz. +Ce script va d'abord cloner les modules, lancer le script mount_project.sh, installer les dépendances du frontend et le compiler en mode production, puis installer les dépendances pour le backend. +Il va ensuite télécharger les ressources externes et nettoyer l'arboresence. Pour finir on produit une archive qui va conserver l'arborescence des point de montage comme si c'était des dossiers normaux. + +```{Warning} + Il peut compiler les moteurs pour vous si le script build_engine.sh est présent cependant je vous le déconseille. La compilation via nexe avec wine présente de gros problème de fonctionnement ensuite sur la version Windows. Il vaut mieux les compiler en amont avec l'autre job jenkins prévu pour et les ajouter comme ressources complémentaires. +``` + +Ensuite on lance la production du binaire `installer`, une première fois pour linux sur la machine directement et une seconde fois sur la même machine à travers Wine ce qui permet d'avoir la version Windows du binaire. + +Une fois cette étape terminé, Jenkins zip les setups et les envois sur AWS S3 dans le dossier builds du bucket veremes-dev-ressource. + +## Génération d'un setup d'installation pour un module externe + +Il est aussi possible de générer un setup permettant d'installer un module complémentaire dans une application existante (comme Oxalis ou RisMajic). +Au niveau de l'utilisation c'est sensiblement la même chose il faut lancer le job **Generate_mod_setup_2020**. + +La construction du fichier `mod.tgz` est bien plus rapide vu qu'il n'y a pas de compilation ou de récupération de dépendances supplémentaires. +La compilation de l'installer est identique. +L'archive finale est également généré et envoyé sur AWS S3. \ No newline at end of file diff --git a/source/vai/images/pyinstaller-logo.png b/source/vai/images/pyinstaller-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0b13c15ce6a4ecb0a430074d4bd94da410e519e6 GIT binary patch literal 16304 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 TlE0FHfq}u()z4*}Q$iB}94wdr literal 0 HcmV?d00001 diff --git a/source/vai/index.rst b/source/vai/index.rst new file mode 100644 index 0000000..2f30509 --- /dev/null +++ b/source/vai/index.rst @@ -0,0 +1,21 @@ +VAI : Vitis Application Installer +============================================ + +.. image:: ./images/pyinstaller-logo.png + :width: 250 px + :align: center + :target: # + + +VAI est l'exécutable permettant d'installer une application basée sur Vitis sur un serveur. + +Dans cette documentation je considère que vous savez ce qu'est une application Web basée sur Vitis et que vous connaissez l'architecture de ces application en développement. + +============================================ + +.. toctree:: + :maxdepth: 2 + + presentation.md + generation.md + dev.md diff --git a/source/vai/presentation.md b/source/vai/presentation.md new file mode 100644 index 0000000..82dbb6b --- /dev/null +++ b/source/vai/presentation.md @@ -0,0 +1,29 @@ +# Présentation + +VAI s'appuie sur [PyInstaller](https://pyinstaller.org/en/stable/), de générer un executable à partir d'un code python et de l'interpréteur python. + +VAI est un script python permettant d'installer une application Web Vitis, c'ets à dire qu'il peut réaliser les taches suivantes : +- Vérification des pré-requis sur le serveur : + - Espace disque suffisant + - OS compatible + - Présence de Postgres, Postgis, Apache +- Exécution de script de pré-installation +- Sauvegarde des fichiers sensibles +- Activation d'extension postgres +- Mise à jour de la base de données +- Création d'utilisateurs dans la base et/ou l'application +- Mise à jour du code source de l'application +- Suppression de fichier de développement +- Configuration de l'application +- Configuration d'Apache +- Installation de ressources et d'exécutables externe +- Exécution de script de post-installation + +Le livrable de VAI que l'on appelle aussi setup ou installer, se compose de plusieurs fichiers : +- installer/installer.exe : binaire qui contient Python et le script d'installation +- app.tgz/mod.tgz : code source et ressources complémentaire à installer +- dependencies.json : fichier de configuration de l'installation +- Readme.md : fichier expliquant ce qu'il faut parametrer sur le dependencies.json + +Pour installer une application il suffit d'éditer le dependecies.json en fonction de ce qui est demandé pour l'application à installer, et delancer le binaire installer (en sudo ou admin en fonction de l'OS). +Suite à l'exécution un fichier de log sera généré contenant ce qui est remonté dans la console pendant l'exécution. \ No newline at end of file -- GitLab