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/

3 réflexions sur “Play! framework + GAE

  1. 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

      • 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 ?

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s