## Aide Framakey WebApp Manager

### Questions courantes

#### Qu'est-ce que Framakey WebApp Manager ?

Framakey WebApp Manager est un ensemble de logiciel vous permettant d'utiliser très simplement une "WebApp", c'est à dire une application normalement destinée pour internet, sur votre ordinateur.

Framakey WebApp Manager vous permet de faire tourner Dotclear, SPIP, Joomla, Wordpress, Drupal et bien d'autres sur votre ordinateur équippé Windows, sans avoir d'installation comlexe à réaliser. Vous pourrez même transporter vos WebApp sur clé USB ou CD/DVD.

#### J'ai pas tout compris...

Normalement, lorsqu'on veut utiliser un blog, un wiki, ou autre application web, il faut soit s'inscrire à un service en ligne (souvent payant ou proposant de la publicité), soit installer ou faire installer cette application sur un hébergement web (payant).
L'autre solution, c'est de l'installer sur sa machine.

Ces applications étant (généralement) développées en PHP/MySQL, on utilise alors le plus souvent un système proposant Apache+PHP+MySQL, qu'il faut installer sur sa machine. Par contre, lorsqu'il s'agit d'installer l'application web au sein de ce système, cela peut rapidement devenir complexe (configuration des informations de connexion, mise en place de la base de données, adaptations de la configuration de PHP, etc).

Framakey WebApp Manager propose de livrer, en un seul fichier zip, l'application préconfigurée et prête à l'emploi. Vous n'avez rien d'autre à faire que dézipper et lancer l'application.

#### J'ai toujours rien compris !

Exemple : toi télécharger Wordpress portable, toi dézipper Wordpress Portable, toi pouvoir utiliser Wordpress portable.
Si toi avoir jamais essayer d'installer Apache+PHP+MySQL+Wordpress sous Windows, toi pas pouvoir comprendre l'intérêt.

#### Quelle différence avec EasyPHP, WAMP Server, XAMP, MovAMP, etc ?

D'abord, l'application est livrée avec, donc l'installation est ultra simplifiée. Si vous connaissez parfaitement XAMP ou EasyPHP, l'intérêt est nettement plus limité.
Le fait que l'application soit prête à l'emploi permet de gagner du temps de configuration et d'installation, y compris dans le paramètrage de l'environnement (ainsi, on peut facilement proposer l'augmentation du temps limite d'execution d'un script PHP de 30 secondes à 5 minutes pour une application gourmande, et uniquement pour celle-là).
De plus, les WebApps disposent de leurs propres scripts préconfigurés, par exemple pour ouvrir la page de support (le plus souvent un forum) de l'application. Mais les scripts peuvent aussi servir à importer ou exporter des données SQL, ou à faire des rechercher/remplacer automatiquement dans des fichiers.
Ces scripts sont facilement paramètrables (cf. plus loin).
Enfin, la WebApp est portable, c'est à dire que vous pouvez la copier-coller sur votre clé USB, travailler dessus, la déplacer sur votre disque dur, et reprendre là où vous en étiez : les paramètres de la WebApp seront automatiquement mis à jour. Avec MovAMP ou EasyPHP, ce n'est pas le cas : si vous déplacez WordPress de votre clé USB sur votre disque dur, il vous faudra mettre à jour manuellement le chemin d'upload dans la base de données, par exemple (ce qui peut vite devenir fastidieux).

#### Quelle différence avec Bitnami ?

Bitnami a largement inspirée les WebApps Framakey, mais malheureusement les "Bitnami stacks" :
ne sont pas 100% libre (elles utilisent l'installeur BitRock, qui n'est pas libre)
utilisent une installation "en services". C'est à dire qu'elles sont "imbriquées" avec Windows (souvent lancé au démarrage, partageant des données communes, et tournant en arrière plan de façon "cachée").
Ce dernier point est bloquant pour rendre l'application portable, et peut poser probleme si vous utilisez plusieurs applications simultanément.
Au contraire, les WebApps Framakey utilise des processus séparés par WebApp (un MySQL et un ZMWS par WebApp) ce qui leur permet d'être portable et indépendantes.
Ainsi, il est parfaitement possible de lancer, 2, 3 ou 10 WebApps simultanément.
Ha, et puis Bitnami n'est qu'anglophone, là où le WebAppManager est multilingue...

#### Quelles sont les applications compatibles ?

A priori, toute application PHP/MySQL capable de tourner sous Windows.

#### Pourquoi le mot de passe est-il déjà prérempli ?

L'application est livrée préconfigurée pour gagner du temps, mais surtout pour gagner en simplicité. Vous avez toujours la possibilité de modifier le mot de passe.

#### D'autres internautes peuvent-ils acceder à ma WebApp ?

Potentiellement, oui. Si vous n'êtes pas derriere un routeur ou un pare-feu, et si vous communiquez votre l'adresse publique de votre WebApp, alors les internautes pourront y accéder.
Vous pouvez connaitre votre adresse publique en cliquant sur l'entrée "Info" du menu. Elle vous sera alors indiquée de la façon suivante :
Public URL: http://88.180.138.246:80/wordpress
Vous pouvez empêcher ce comportement en cochant la case "bind" dans le menu "Configuration avancée"

#### Puis-je transférer ma WebApp sur une clé USB ?

Oui. Pensez bien à arrêter votre WebApp avant de la transférer, mais sinon un simple copier-coller suffit.

#### Puis-je transférer ma WebApp sur un CD ou DVD ?

(Pas encore testé, mais ça devrait fonctionner ;) )

#### Puis-je transférer ma WebApp sur internet ?

Oui... et non. L'option "automatique" est prévue pour une future version.
Cependant, vous pouvez faire le transfert "manuellement" en suivant les étapes suivantes :
1. réservez un hébergement web PHP/MySQL
2. transferez via FTP vos fichiers
3. exportez votre base de données (Menu > Scripts > Génériques > Exporter la base de données)
4. importez le fichier /App/Appinfo/export-xxxxxx.sql qui vient d'être créé dans votre base de données distantes.
Des ajustements peuvent être nécessaires, mais seront spécifiques à chaque WebApp.

### Problèmes courants

#### J'ai une erreur "impossible de se connecter à la base de données" (ou approchant)

MySQL n'est probablement pas lancé. Arrêtez votre WebApp et relancez-la

#### Au démarrage, on me dit que "Le fichier de session existe déjà", pourquoi et que faire ?

A chaque lancement de WebApp, un fichier de session est créé dans le dossier /App/Appinfo/session.lock afin d'éviter de lancer simultanément 2 fois la même WebApp.

Si la WebApp est déjà lancée et accessible, répondez non.
Sinon, répondez oui, le fichier de session sera effacé lorsque vous quitterez votre WebApp.

### Configuration technique

#### Les lanceurs

Le lanceur XxxxxxPortable.exe (ex: WordPressPortable.exe) ne sert qu'à lancer le WebAppManager ("WAM"), il n'est donc pas interessant.
Le fichier \Other\Framakey-WebAppManager\\Framakey-WebAppManager.exe est en fait le véritable lanceur.
Celui-ci est commun a toutes les WebApps. La configuration spécifique de chaque WebApp se trouve en fait dans le dossier /App/Appinfo

#### Configuration de Framakey WebApp Manager

Fichier \Other\Framakey-WebAppManager\\Framakey-WebAppManager.ini
[Config]
;Si "True", affiche l'aide de la WebApp au démarrage
DisplayHelp=True
;Temps d'affichage de Splashscreen (0 ou False = désactivation du splash)
SplashTimeout=2500
;Si True, enregistre certains évènements dans \Other\Framakey-WebAppManager\WAMLog.txt
Log=False
;Langue utilisée pour l'interface (par défaut utilise la langue du système, sinon l'anglais)
Lang=fr
[ZMWS]
;browse : lance le navigateur de l’utilisateur sur le site hébergé après le démarrage du serveur ou si le port demandé est déjà occuppé par un serveur (avec unique-port) (par défaut, on ne lance pas le navigateur).
browse=False
; port : le port de fonctionnement (80 par défaut). Si celui ci n’est pas libre, ZMWS essaie de se lancer sur un port entre 8080 et 8089 (premier libre).
port=False
; unique-port : force l’utilisation du port 80 ou celui spécifié par l’option -p, quitte s’il est déjà occupé (par défaut, ZazouMiniWebServer essaie ensuite d’utiliser les ports 8080 à 8089 avant de quitter)
unique-port=False
; quiet : avec cette option, ZazouMiniWebServer n’affiche plus les requêtes traitées dans la console. Par défaut, le serveur affiche de nombreuses informations. Empêcher cet affichage permet une sensible amélioration des performances.
quiet=True
; nolog : désactive la création des logs (activée par défaut).
nolog=True
;closebrowser : combinée à -stop, permet de fermer le navigateur lors de l’arrêt du serveur (en envoyant un javascript au client).
closebrowser=True
; noindex : désactive l’indexation des répertoires (activée par défaut).
noindex=False
; webdir : fonctionnalité non encore implémentée.
webdir=False
; bind : Utilisez cette option pour que ZazouMiniWebServer ne réponde que sur une seule adresse IP (exemple -bind 127.0.0.1 pour n’autoriser que les connexions depuis la machine). Par défaut, ZazouMiniWebServer répond sur toutes les IP de la machine.
bind=False
;stop : permet d’arrêter le serveur lors de la visite de /_stopServer.zmwsc
stop=True
[MYSQL]
; permet de fixer le port mysql si besoin. Sinon "Auto" permet de tester les ports un par un à partir de 3306
port=Auto
Ce fichier peut être manipulé via le menu "Configuration avancée"

#### Configuration de ma WebApp

La configuration se trouve dans le fichier App\AppInfo\Appinfo.ini

[Format]
Type=Framakey.orgFormat
Version=0.9.8
[Details]
Name=Framakey WebApp Portable
Publisher=Framakey
Homepage=Framakey.org/WebApp
Category=Misc
Description=WebApp Portable.
[License]
Shareable=true
OpenSource=true
Freeware=true
CommercialUse=true
[Version]
PackageVersion=1.0.0.0
DisplayVersion=1.0
[Control]
Icons=1
Start=WebAppPortable.exe
[WebAppSpecific]
ShortName=WebApp
ApplicationPath=wordpress
DatabaseName=wordpress
Website=http://www.wordpress.org
Support=http://wordpress.org/support/
Framasoft=http://www.framasoft.net/
FramasoftSupport=http://forum.framasoft.org/
Logo=logo.gif

Evidemment, ce sont les infos à la fin du fichier qui sont interessantes ;)

#### Les scripts génériques et spécifiques

L'une des particularités des WebApps est de proposer l'execution de scripts prédéfinis.

Ceux-ci sont réparti en 3 catégories :

- Scripts génériques : ils sont communs à toutes les applications. Par exemple : l'export de la base de données.
  Le fichier se trouve dans \Other\Framakey-WebAppManager\scripts.generic.ini
- Scripts spécifiques : ils sont propres à la WebApp en cours d'execution. Par exemple : remettre le mot de passe à une valeur prédéfinie.
  Le fichier se trouve dans App\AppInfo\scripts.ini
- Scripts de démarrage : ils sont executés "silencieusement" au démarrage de la WebApp. Par exemple pour adapter la base de données au port MySQL actuellement executé.
  Le fichier se trouve dans App\AppInfo\startup.ini

Il existe 6 commandes types :

- SQL : pour executer une commande SQL
- SQLFILE : execute le contenu d'un fichier SQL
- COMMAND : execution d'une commande ou d'un logiciel
- REPLACE : rechercher/remplacer dans un fichier
- EDIT : ouvre un fichier avec son éditeur par défaut
- URL : ouvre une page web

Exemples de scripts commentés

Editer un fichier

; Identifiant unique du script
[EditPhpIni]
; Nom qui sera affiché dans le menu
Name=Edit PHP.ini
; Nom en Français (tout champ terminé en "_fr" sera affiché s'il s'agit de la langue du WebAppManager)
Name_fr=Editer PHP.ini
; Description affichée dans la boite de dialogue
Description=Open PHP.ini
Description_fr=ouvre le fichier de configuration PHP.ini (pour y modifier des variables de configuration, par exemple).
; Type de la commande
Type=EDIT
; Le fichier à éditer
File={$zmws_path}\php5\php.ini

Exporter la base de données

; Identifiant unique du script
[ExportDB]
; Nom qui sera affiché dans le menu
Name=Export database
; Nom en Français (tout champ terminé en "_fr" sera affiché s'il s'agit de la langue du WebAppManager)
Name_fr=Exporter la base de données
; Description affichée dans la boite de dialogue
Description=Export the Whole database
Description_fr=Sauvegarde la totalité de la base dans \Appinfo\{$CurrentDate}.sql {@CRLF}Attention: MySQL doit être actif.
; Type de la commande
Type=COMMAND
; Le coeur du script : que lui demande-t-on d'éxecuter ? Evidemment, ça parait un peut abscons vu comme ça, mais ça revient à lui faire executer un mysqldum de la base de la WebApp dans un fichier nommé export-(Nom de la base)-(date et heure).sql
Query={@ComSpec} /c {$mysql_bin_path}\mysqldump --opt {$DatabaseName} -u root > {$appinfo_path}\export-{$appShortName}-{$CurrentDate}.sql
; permet d'afficher un message à la fin de l'execution de la commande.
Done=Executed: {@ComSpec} /c {$mysql_bin_path}\mysqldump --opt {$DatabaseName} -u root > {$appinfo_path}\export-{$appShortName}-{$CurrentDate}.sql
Done_fr=Action executée : {@ComSpec} /c {$mysql_bin_path}\mysqldump --opt {$DatabaseName} -u root > {$appinfo_path}\export-{$appShortName}-{$CurrentDate}.sql {@CRLF}Rendez vous dans le dossier {$appinfo_path} pour récupérer votre sauvegarde.

Executer une requête SQL

[ResetLogPass]
Name=Reset Login and Password
Name_fr=Réinistialiser log/pass
Description=Reset Title, login and password to initial values.
Description_fr=Réinitialise le mot de passe adminstrateur avec "admin"/"framasoft"
Type=SQL
; la requête qui sera executée (il est possible d'en passer plusieurs sur la même ligne en les spéarant par des points-virgules
Query=UPDATE `wp_options` SET `option_value`='WordPress Portable',`autoload`='yes' WHERE `option_id`=2 AND `blog_id`=0 AND `option_name`='blogname'; UPDATE `wp_options` SET `option_id`='62', `blog_id`='0', `option_name`='secret', `option_value`='aD)2Hujr&NooM5^&Eqq&vPHO#bRlOY!^cKUzpMC&qJEb43U5cyrt2XMcDh1#P0qU', `autoload`='yes' WHERE `option_id`='62' AND `blog_id`='0' AND `option_name`='secret';
Done=Done: login=admin, Password=framasoft
Done_fr=Action executée: login=admin, Password=framasoft

Executer un ensemble de requêtes depuis un fichier

[ResetSettings]
Name=Reset settings
Name_fr=Réinitialiser la configuration
Description=Reset all the settings (Title, Email, login and password etc) to initial values.
Description_fr=réinitialise toutes les options (titre, email, login, password, etc) aux valeurs initiales, sans toucher à votre contenu.
; contrairement à la commande SQL, ici, on va executer les requêtes depuis un fichier (pratique par exemple pour réimporter une base de données)
Type=SQLFILE
; le nom du fichier
file={$appinfo_path}\reset_main_options.sql
Done=Done
Done_fr=Réinitialisation terminée.

Faire un rechercher/remplacer

[Synchronize]
Name=Syncronize MySQL Port
Description=Update Wordpress config with the OpenMySQL Port
Name_fr=Syncronise le port MySQL
Description_fr=Met à jour le fichier de config WordPress avec le port MySQL actuellement assigné.
Type=REPLACE
; nom du fichier dans lequel on va faire le rechercher/remplacer
File={@ScriptDir}\..\..\App\{$ApplicationPath}\wp-config.php
; la chaine de recherche, notez qu'il est possible d'utiliser les expressions régulières ;) Ici, on recherche le mot "localhost" suivi (ou pas, grâce au caractère "?") de ":" et d'un chiffre (représenté par "\d") répété plusieurs fois (grâce au caractère "*"). Ainsi, on cherche "localhost", "localhost:3306", "localhost:88", etc.
SearchPattern=localhost(:\d*)?
; chaine de remplacement, ici on remplace par localhost suivi de ":" puis du port MySQL ouvert par la WebApp
ReplaceValue=localhost:{$mysql_port}
Done=Done
Done_fr=Fait

Chaînes de remplacement

Comme on l'a vu ci-dessus, il est possible d'utiliser des chaines de remplacement, par exemple {$mysql_port} sera automatiquement remplacé par le port en mysql ouvert lors du lancement de la WebApp. Voici la liste de ces variables :

{$DatabaseName} = nom de la base de données (cf appinfo.ini)
{$ApplicationPath} = nom du dossier de la WebApp (cf appinfo.ini)
{$root_path_absolute} = chemin absolu du root de la WebApp (ex: "E:\dossier\sous-dossier\DrupalPortable" )
{$r_p_a_backslashes} = équivalent au précédent, mais avec des doubles backslashes (ex: "E:\\dossier\\sous-dossier\\DrupalPortable" )
{$appinfo_path} = chemin vers le dossier AppInfo (ex: "E:\dossier\sous-dossier\DrupalPortable\AppInfo" )
{$ApplicationURL} = url de la WebApp (ex: http://127.0.0.1:8083/wordpress )
{$appShortName} = Nom court de l'application (ex: "Wordpress"). Les espaces sont déconseillés.
{$CurrentDate} = Date au format YYYY-MM-DD-HH-MM-SS (ex: "2009-03-20-12-59-25")
{$mysql_bin_path} = chemin vers les binaires mysql (ex: "E:\dossier\sous-dossier\DrupalPortable\ZMWS\mysql\bin" )
{$mysql_bin_name} = nom du binaire mysql (ex: "mysqld.exe")
{$mysql_port} = numéro du port MySQL utilisé au lancement de la WebApp (par défaut 3306, mais peut être fixé dans Framakey-WebAppManager-config.ini, ou positionné automatiquement si le port n'est pas libre)
{$zmws_webdir} = chemin du "webdir" ZMWS, c'est à dire le root web relativement au fichier \ZMWS\ZazouMiniWebServer.exe (ex: "..\App"
{$zmws_path} = chemin vers ZMWS ("E:\dossier\sous-dossier\DrupalPortable\ZMWS")
{$zmws_port} = numéro du port web utilisé au lancement de la WebApp (par défaut 80, mais peut être fixé dans Framakey-WebAppManager-config.ini, ou positionné automatiquement si le port n'est pas libre)
{@ComSpec} = chemin vers le fichier cmd.exe de Windows (ex: "C:\WINDOWS\system32\cmd.exe")
{@CRLF} = retour chariot
{@ScriptDir} = chemin du root de la WebApp (ex: "E:\dossier\sous-dossier\DrupalPortable")

#### Le splashscreen et l'icone

Le splashscreen (l'image qui est affichée au lancement de la WebApp est composé de 4 éléments :

Une image de fond (497x341px): Other\Framakey-WebAppManager\empty_splash.jpg

Un logo (de préférence en 128x128 fond blanc) : App\AppInfo\logo.gif (le nom peut être redéfini dans App\AppInfo\appinfo.ini)

Un titre : c'est la variable ShortName=xxxxxxx qui sera utilisée.

Une durée : par défaut 2500 ms. Peut être modifiée dans Other\Framakey-WebAppManager\Framakey-WebAppManager.ini => SplashTimeout=2500

#### La configuration avancée

L'écran de configuration avancée permet de manipuler simplement le fichier Other\Framakey-WebAppManager\Framakey-WebAppManager.ini (cf plus haut). Il est conseillé d'arrêter les services, de faire les manipulations et de les enregistrer avant de relancer les services.

### Comment créér ma WebApp ?

L'aide est disponible en ligne sur http://www.framakey.org/WebApp/CreerMaWebApp