Original author: Nicolas Martignole @nmartignole
The CFP was originally created in 2014 for Devoxx France. Implemented with Scala, the CFP uses the Play Framework v2.2.3 and Redis 2.8 to persist datas. The application focus on simplicity and pragmatism.
- Install Play 2.2.3 (not the latest version with activator) : http://downloads.typesafe.com/play/2.2.3/play-2.2.3.zip
- Install Redis 2.8.4, do not use "brew install redis" on Mac, as it would install 2.6, an older version of Redis : http://download.redis.io/releases/redis-2.8.4.tar.gz
- Read Redis documentation and learn Redis with http://try.redis.io
- Read also the self-document redis.conf https://raw.githubusercontent.com/antirez/redis/2.8/redis.conf
optional but recommended for better user experience:
- Install ElasticSearch
- Create Github App and configure OAuth
- Create a Google App and configure OAuth
To work on a local CFP, you don't need to configure the Github,Google or LinkedIn OAuth application. You can just start a local version of the CFP, and configure later those components. Elastic-search is not required, but you won't be able to search from the CFP Admin panel
First things first, you need to set-up your own conference. To do so, Frederic Camblor implemented a generic class that contains most (but not all) importants details. Check ConferenceDescriptor.scala. This file defines the configuration of your own conference.
You can then also translate and check messages/messages.fr from the conf file
The main development branch is dev. It's either Devoxx FR or Devoxx BE. It' an out-of-the-box ready to use conference. This is also where I try to collect all features from all contributors.
I created a branch dev-france for current development regarding Devoxx France. I did the same for BE. Depending if we're in november or march, I use one or the other as my main active branch.
I work with one feature per branch, then do local merge.
When you want to update your local branch (for instance, dev-poland) you should :
- do a checkout of dev
- do a git pull --rebase on dev
- switch to dev-poland
- do a git pull --rebase from dev to dev-poland so that you keep your local updates
For Pull request, see https://www.atlassian.com/git/tutorials/making-a-pull-request/
Le CFP de Devoxx France est codé en Scala, avec le framework Play 2.2.3. Les données sont persistées sur Redis 2.8.
J'ai écris cette application en prenant soin de rester simple, pragmatique et productif.
- Authentification et inscription possible via OpenID (Google et Github)
- Utilisation du format Markdown pour saisir sa proposition de sujet
- Les photos des speakers sont tirées du site Gravatar
- Importation du profil Google+ ou Github pour accélérer la création du profil
- Pas de framework JS côté client sauf si cela devient une nécessité
- Du code Scala simple et facile à lire
L'installation d'un environnement de dév est simple et s'effectue en quelques étapes :
- installer Play 2.2.3
- installer Redis 2.8.4
- configurer son serveur Redis pour être "slave" de la prod
- récupérer le code source du projet CFP Devoxx France de Bitbucket
- lancer et commencer à contribuer
Pré-requis : Java 7 fortement conseillé pour des raisons de performances.
- Téléchargez Play 2.2.3 http://downloads.typesafe.com/play/2.2.3/play-2.2.3.zip
- Décompressez dans un répertoire, ajouter le répertoire à votre PATH
- Placez-vous dans un nouveau répertoire et vérifiez que Play2 est bien installé avec la commande "play"
Pré-requis : les utilitaires make, gcc correctement installés via XCode ou brew.
- Téléchargez http://download.redis.io/releases/redis-2.8.4.tar.gz
- Décompressez, et suivez les inscrutions du fichier README, pour compiler Redis
- Effectuez un "make install" en tant que root afin d'installer Redis
Je déconseille de tester les installations via Brew, qui ne sont pas correctement configurées. Vous allez perdre du temps.
Lorsque vous développez sur votre machine, nous allons utiliser un serveur Redis local afin de pouvoir y écrire nos données, sans perturber la production. Cependant, un des points forts de Redis, c'est qu'il est possible de synchroniser son serveur local avec un serveur Redis distant. Pour cela, nous allons déclarer que la prod, le serveur Redis hébergé à distance, est MASTER. Votre installation de Redis locale sera donc SLAVE de ce serveur. Redis synchronise rapidement, et vous aurez donc en permanence une copie de la prod sur votre machine locale.
Pour cela, il faut utiliser le fichier conf/redis-devoxxfr.conf que j'ai placé dans le répertoire conf du projet Play2. Prenez ce fichier, copiez-le vers le répertoire par défaut de Redis, /usr/local/etc sur MacOS X.
Vous pouvez alors démarrer le serveur redis local avec la commande suivante :
redis-server /usr/local/etc/redis-devoxxfr.conf
Pour arrêter proprement le serveur, il suffit d'envoyer la commande SHUTDOWN au serveur :
redis-cli -p 6363 SHUTDOWN
Vous pouvez vous amuser avec votre serveur Redis en local avec l'utilitaire "redis-cli"
Celui-ci permet d'effectuer des commandes, je vous invite à suivre le petit tutorial http://try.redis.io/ pour mieux comprendre.
Le projet est hébergé sur Bitbucket
Imaginons que vous êtes Breton et que vous souhaitiez installer ce CFP pour votre conférence :-)
Pour pouvoir faire tourner en production votre propre application du CFP, il est nécessaire de configurer différents éléments dans le fichier application.conf de Play 2.2.
Voici ce qu'il vous faut
- un compte Mailjet pour l'envoi SMTP des emails transactionnels
- un compte Github pour pouvoir créer une clé API pour l'authentification OpenID. Voir [https://github.com/settings/applications](cette page)
- créer une application via votre compte Google sur https://cloud.google.com/console#/project . Configurez une URL pour le développement, comme http://localhost:9000/ et une URL de prod comme http://cfp.devoxx.fr/
- un serveur Redis protégé par un mot de passe très long. Sans quoi, n'importe qui peut se connecter et vider votre base.
- un serveur ElasticSearch
Voici ce que vous devez configurer :
-
Renommez le fichier application-please-customize-me.conf en application.conf
-
Générez une chaîne de caractère pour la sécurité de l'application
application.secret="a_unique_secret"
-
Configurez le serveur SMTP en prenant les paramètres de Mailjet
-
Configurez la partie Github
-
Configurez la partie Google pour l'authentification OAuth2.0
-
Configurez enfin le serveur Redis. Prenez soin de configurer un mot de passe très long pour votre serveur Redis
-
Configurez enfin l'adresse d'un serveur ElasticSearch
Imaginons que vous êtes à moitié Breton et que vous souhaitiez installer ce CFP pour votre conférence :-) mais que n'avez pas encore eu le temps monter en compétence sur docker.
Pour pouvoir faire tourner en production votre propre application du CFP, il est nécessaire de configurer différents éléments dans le fichier application.conf de Play 2.2.
Voici ce qu'il vous faut
-
un compte Mailjet pour l'envoi SMTP des emails transactionnels
-
un compte Github pour pouvoir créer une clé API pour l'authentification OpenID. Voir [https://github.com/settings/applications](cette page)
-
créer une application via votre compte Google sur https://cloud.google.com/console#/project . Configurez une URL pour le développement, comme http://localhost:9000/ et une URL de prod comme http://cfp.devoxx.fr/
-
mettre un mot de passe compliqué et long pour le serveur Redis Voici ce que vous devez configurer :
-
Renommez le fichier application-please-customize-me.conf en application.conf
-
Générez une chaîne de caractère pour la sécurité de l'application
application.secret="a_unique_secret"
-
Configurez le serveur SMTP en prenant les paramètres de Mailjet
-
Configurez la partie Github
-
Configurez la partie Google pour l'authentification OAuth2.0
-
Configurez enfin le serveur Redis (127.0.0.1). Prenez soin de configurer un mot de passe très long pour votre serveur Redis
-
127.0.0.1 pour l'adresse d'un serveur ElasticSearch
Ensuite, vous avez un dossier "ansible" qui vous permet d'initialiser un serveur avec :
- un elastic search
- un redis
- un nginx
- l'upload de la version dist du projet cfp.
Pour cela :
- installer ansible (brew ansible sous mac, apt-get ansible sous linux)
- à la racine, lancer un "activator dist"
Ensuite dans le dossier ansible :
- créer un fichier inventory avec les information de votre serveur
- lancer ansible-playbook cf-playbook.yml -i inventory
Il y a encore un bug ds le script pour lancer le projet, pour le momment connecter vous sur le serveur et lancer le à la main.
Bonus, initialiser un admin en mode hacker :
- s'inscrire en tant que speaker
- se connecter sur le serveurs redis.
- "AUTH "
- lister les clef (et voir le uuid) : "KEYS *"
- ajouter les droits: "SADD Webuser:cfp " puis "SADD Webuser:admin "
- Nicolas Martignole @nmartignole
- Gabriel Kastenbaum @lambdadevfr
- Jean Helou @jeanhelou pour la conférence Scala.IO
- Frédéric Camblor @fcamblor pour la conférence BDX.IO
- Devoxx France
- Devoxx Belgique
- Devoxx UK
- Devoxx Poland
- BDX.io
- Scala.io
- BreizhCamp
- Lean Kanban France
Le CFP de Devoxx France est hébergé sur la plateforme http://www.clever-cloud.com
J'utilise ente.io pour la partie Redis, via CleverCloud. Pour Elasticsearch, j'ai une machine dédiée chez Online.net, sur laquelle j'ai du docker avec les 4 Elasticsearch pour les 4 CFP de Devoxx.