Play! framework + GAE
Je voulais faire un plugin nagios qui check notre ip public périodiquement car j’ai utilisé ip sla pour basculer automatiquement entre nos deux FAI. Il y a d’autre moyen de vérifier si je suis sur l’un ou l’autre …
Mon but dans ce post est d’avoir une page web qui retourne l’adresse IP que j’utilise, c’est très facile en PHP.
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Vous mettez ça quelque part sur un serveur apache2 + php et c’est bon. Je voulais m’amuser avec Play! que je trouve accessible pour moi qui ne connais pas grand chose en Java et companie, j’étais plutôt dans CodeIgniter, Kohana, depuis quelques années… Je n’ai pas aussi un serveur sous la main pour mettre le script et j’ai pensé à Google Application Engine (GAE).
Je suis sur une debian (comme d’hab) et on va installer Play! 1.2.3 (c’est une idée de poster un RFP dans debian …)
- télécharger play 1.2.x ici http://www.playframework.org/download
$ wget http://download.playframework.org/releases/play-1.2.3.zip $ unzip play-1.2.3.zip
Moi, j’ai un répertoire /home/thierry/bin/ pour mettre mes bin et un autre /home/thierry/local pour les softs que j’utilise localement, il y a beaucoup de gens qui utilisent /usr/local/ et /usr/local/bin, vous choisissez…
$ mv play-1.2.3 /home/thierry/local/play $ cd /home/thierry/bin $ ln -s /home/thierry/local/play/play play
Il faut maintenant ajouter dans le $PATH, pour cela éditer /home/thierry/.bashrc et ajouter à la fin
PATH=$PATH:$HOME/bin export PATH
Pour tester, il faut sortir et entrer pour l’avoir dans votre path mais un “su – thierry” fera l’affaire.
Il faut installer un jdk car faire du java sans jdk ce n’est pas évident. Assurez-vous que non-free est dans votre sources.list. Si vous êtes à Mada et sur
DTS/TELMA :
deb ftp://mg.debian.net/debian/ sid main contrib non-free
ou ORANGE/BLUELINE
deb http://mirror.malagasy.com/debian/ sid main contrib non-free
VEuillez changer la ligne selon la version de votre debian, ici c’est sid .
Si vous n’avez pas encore de JDK sur votre pc, installez openjdk-6-jdk car sun-java6-jdk n’est plus disponible dans debian.
# aptitude update # aptitude install openjdk-6-jdk
On va tester que l’installation est bonne :
$ play new myip ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.2.3, http://www.playframework.org ~ framework ID is card ~ ~ The new application will be created in /tmp/myip ~ What is the application name? [myip] ~ ~ OK, the application is created. ~ Start it with : play run myip ~ Have fun! ~
Ici, j’ai appelé mon app myip
On va modifier le code pour afficher l’ip de celui qui le consulte
Modifier le fichier app/controllers/Application.java en :
package controllers;
import play.mvc.*;
public class Application extends Controller {
public static void index() {
String ip = request.remoteAddress;
render(ip);
}
}
Modifier aussi app/views/Application/index.html en :
${ip}
Lancer l’application avec “play run” :
thierry@tux:/tmp/myip$ play run ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.2.3, http://www.playframework.org ~ framework ID is card ~ ~ Ctrl+C to stop ~ Listening for transport dt_socket at address: 8000 16:06:12,841 INFO ~ Starting /tmp/myip 16:06:13,308 WARN ~ You're running Play! in DEV mode 16:06:13,373 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
Ouvrir avec votre navigateur la page http://127.0.0.1:9000/
Si vous vous trouvez sur le même pc, vous aurez 127.0.0.1 !
Passons maintenant à la mise en ligne sur GAE, créez un compte sur https://appengine.google.com/ et une application. Par exemple, moi j’ai créé ‘check-my-ip’ . Après le déploiement, vous pouvez voir mon app ici http://check-my-ip.appspot.com/ .
Il faut installer le module gae dans play .
thierry@tux:/tmp/myip$ play install gae ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.2.3, http://www.playframework.org ~ framework ID is card ~ ~ Will install gae-1.4 ~ This module is compatible with: 1.1, and GAE 1.4.0 ~ Do you want to install this version (y/n)? y ~ Installing module gae-1.4... ~ ~ Fetching http://www.playframework.org/modules/gae-1.4.zip ~ [--------------------------100%-------------------------] 2400.0 KiB/s ~ Unzipping... ~ ~ Module gae-1.4 is installed! ~ You can now use it by adding it to the dependencies.yml file: ~ ~ require: ~ play -> gae 1.4 ~
Activer le module gae dans l’app.
Ajouter à la fin de conf/application.conf :
module.gae=${play.path}/modules/gae-1.4
Modifier aussi conf/dependencies.yml en :
# Application dependencies
require:
- play
- play -> gae 1.4
Lancer encore une fois
thierry@tux:/tmp/myip$ play run ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.2.3, http://www.playframework.org ~ framework ID is card ~ ~ Ctrl+C to stop ~ Listening for transport dt_socket at address: 8000 20:44:04,168 INFO ~ Starting /tmp/myip 20:44:04,171 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.gae) 20:44:04,172 INFO ~ Module gae is available (/home/thierry/local/play/modules/gae-1.4) 20:44:04,657 WARN ~ 20:44:04,657 WARN ~ Google App Engine module 20:44:04,657 WARN ~ ~~~~~~~~~~~~~~~~~~~~~~~ 20:44:04,658 WARN ~ No Google App Engine environment found. Setting up a development environement 20:44:04,670 WARN ~ Don't forget to define your GAE application id in the 'war/WEB-INF/appengine-web.xml' file 20:44:04,670 WARN ~ 20:44:04,670 INFO ~ Detected that plugin 'play.modules.gae.GAEPlugin@5a199939' disabled the plugin 'play.jobs.JobsPlugin@bdccedd' the old way - should use Play.disablePlugin() 20:44:04,671 WARN ~ You're running Play! in DEV mode 20:44:04,749 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
Modifier le fichier war/WEB-INF/appengine-web.xml en remplacant check-my-ip par votre App Id sur GAE :
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>check-my-ip</application> <version>1</version> </appengine-web-app>
Il nous reste à télécharger le gae sdk à l’adresse : http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Java
wget http://googleappengine.googlecode.com/files/appengine-java-sdk-1.5.4.zip unzip appengine-java-sdk-1.5.4.zip
Enfin, on déploie l’app :
$ play gae:deploy --gae=/home/thierry/dl/appengine/appengine-java-sdk-1.5.4/ ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.2.3, http://www.playframework.org ~ framework ID is card ~ ~ ~ Compiling ~ --------- Listening for transport dt_socket at address: 8000 13:47:28,366 INFO ~ Starting /home/thierry/workspace/myip 13:47:28,370 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.gae) 13:47:28,370 INFO ~ Module gae is available (/home/thierry/local/play/modules/gae-1.4) 13:47:28,861 WARN ~ 13:47:28,861 WARN ~ Google App Engine module 13:47:28,861 WARN ~ ~~~~~~~~~~~~~~~~~~~~~~~ 13:47:28,861 WARN ~ No Google App Engine environment found. Setting up a development environement 13:47:28,876 WARN ~ 13:47:28,876 INFO ~ Detected that plugin 'play.modules.gae.GAEPlugin@5a199939' disabled the plugin 'play.jobs.JobsPlugin@bdccedd' the old way - should use Play.disablePlugin() 13:47:28,877 INFO ~ Precompiling ... 13:47:31,945 INFO ~ Done. ~ ~ Packaging ~ --------- ~ Packaging current version of the framework and the application to /tmp/myip.war ... ~ ~ Deploying ~ --------- Reading application configuration data... Sep 27, 2011 1:47:34 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml INFO: Successfully processed /tmp/myip.war/WEB-INF/appengine-web.xml Sep 27, 2011 1:47:34 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml INFO: Successfully processed /tmp/myip.war/WEB-INF/web.xml Beginning server interaction for check-my-ip... 0% Created staging directory at: '/tmp/appcfg1524388351530088528.tmp' 5% Scanning for jsp files. 20% Scanning files on local disk. 25% Initiating update. Email: xxxxxxxxxx@gmail.com Password for xxxxxxxxx@gmail.com: 28% Cloning 156 application files. 31% Cloned 100 files. 40% Uploading 44 files. 52% Uploaded 11 files. 61% Uploaded 22 files. 68% Uploaded 33 files. 73% Uploaded 44 files. 77% Initializing precompilation... 90% Deploying new version. 95% Will check again in 1 seconds. 98% Will check again in 2 seconds. 99% Closing update: new version is ready to start serving. 99% Uploading index definitions. Update completed successfully. Success. Cleaning up temporary files... ~ ~ Done! ~
Le résultat se trouve ici http://check-my-ip.appspot.com/
Bonjour et merci pour ce tuto !
je voulais héberger le moteur de blog Yabe sur mon pc perso avec une debian en virtualbox et je ne savais plus comment installer play! sur la debian. et ça marche ! (j’ai juste pas de nom de domaine mais bon..)
Je vais peut être tester la mise en ligne avec GAE histoire de voir, mais quand tu évoques le fichier war/WEB-INF/appengine-web.xml , ce dernier est créé suite à l’installation du module gae ?
et le dossier war est celui de resource de play ?
merci encore
olivier
2011/11/26 at 4:55 am
C’est après l’ajout de dépendance avec GAE dans conf/dependencies.yml
Tu lances play run et il va te créer le répertoire.
thierry
2011/11/26 at 10:46 am
Merci, par contre je n’ai pas fait de compte sur appengine car google me demande mon numéro de tel pour un sms de confirmation… et pas trop envie de le fournir (déjà trop de spam en sms, et big brother etc.. ).
Certes, j’ai qu’à me demm… : ) mais schématiquement, et par curiosité, il faut indiquer à appengine qu’il doit écouter sur le port 9000 (du moins celui qu’on met dans application.conf) pour l’appli que tu veux faire héberger ? ou il se débrouille tout seul grâce au module ?
Olivier
2011/11/30 at 7:29 pm