Deployment on CloudBees
Deploy two LUTECE environments step by step on the CloudBees platform: one for the development version of the site, the other for the production version.
Then manage the automated deployment based on component updates.
Here are the different steps of this tutorial:
- Deployment on CloudBees
- Interest of CloudBees
- Prerequisites
- Creating the Cloudbees account
- Creating code repository based on a GIT repository
- Creation of the database
- Creation of project files
- Initialization of databases
- Update project files on GIT
- Creating instances of applications
- Creating Continuous Integration Jobs
- Deployment of instances
- Setting up the mail service
Interest of CloudBees
The interests of this platform are:
- This is a Platform as a Service (PaaS) that provides all the runtime elements for Java Webapps:
JEE server: Tomcat, JBoss, ...
Database: MySQL, ...
- So there is no technical base to install, just provide a Webapp
- The CloudBees platform integrates a continuous integration environment based on:
version control repositories GIT or SVN
Jenkins integration driver
- Lutece build and build mechanisms can be used directly in CloudBees
Prerequisites
- A JDK 6 installed
- A GIT client
- An SSH public key
Creating the Cloudbees account
Registration is free and does not require the registration of a bank card.
Create your account at the following address: https://www.cloudbees.com/signup
Creating code repository based on a GIT repository
This repository will contain:
- the pom.xml file allowing the construction of the site,
- the files which will overload at the time of the assembly the files of the construction by default (ex: graphic load, files of configuration, ...)
Creating the GIT repository
Click on the " Repositories " menu in the main menu (banner).
In the Code Repositories section, click the " Create new code repository " button.
Connecting to the GIT repository
To connect, it is necessary to have a pair of keys (public / private) SSH as indicated in the prerequisites above. Indeed, the access to the repository GIT created supposes that you have registered your public key at the level of the plate CloudBees.
To do this, click on "Account" (in the banner on the right of your login), then on "Security Keys". You are then asked to enter your SSH public key.
Then test the connection to GIT with the following command:
$ ssh git@git.cloudbees.com echo
Creation of the local project under GIT
Go to the tree of your local file system where you want to create the root directory of your GIT-versioned project (mysite directory for our example) and launch the command to clone the repository locally: git clone ssh: git@git.cloudbees.com/lutece/mysite.git
Then test by making a first commit and push to the server.
cd mysite echo 'Repository mysite'> README git add README git commit -m 'Initial checkin' git push origin master
Creation of the database
Click on the " DBs " menu of the main menu (banner).
In the Database section on the left, click on the "Add new database" button.
Then enter the information about the development database to get started.
Once the database has been created, you will obtain information allowing you to configure its access (server, port, ...).
Repeat this operation to create the production database.
Creation of project files
Your project should contain at least the following files:
- The pom.xml file used by Maven to build the site
- db.properties files corresponding to our two DEV and PROD databases
The root directory of the project must contain two subdirectories: src and webapp
You can add other files in the webapp directory that will override or supplement those that will be assembled during the build.
Classically overloaded files usually concern the graphic charter (eg: footer.html, page_frameset.html, icon.png, ...)
The pom.xml file
This file has the following characteristics:
- it must derive from the project file for Lutece sites: lutece-site-pom
- it must contain the addresses of the repositories maven of Lutece: stable versions and / or snapshots according to the wish.
- he must declare in the dependencies all the plugins and modules to be included in the site.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>fr.paris.lutece</groupId> <artifactId>mysite</artifactId> <packaging>lutece-site</packaging> <name>My Site</name> <version>1.0.0-SNAPSHOT</version> <!-- This project should inherit from lutece-site-pom --> <parent> <artifactId>lutece-site-pom</artifactId> <groupId>fr.paris.lutece.tools</groupId> <version>2.0.2</version> </parent> <!-- Repositories --> <repositories> <repository> <snapshots> <enabled>true</enabled> </snapshots> <id>luteceSnapshot</id> <name>luteceSnapshot</name> <url>http://dev.lutece.paris.fr/snapshot_repository</url> </repository> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>lutece</id> <name>luteceRepository</name> <url>http://dev.lutece.paris.fr/maven_repository</url> </repository> </repositories> <dependencies> <!-- Lutece core --> <dependency> <groupId>fr.paris.lutece</groupId> <artifactId>lutece-core</artifactId> <version>[4.1.0-SNAPSHOT,5.0.0-SNAPSHOT)</version> <type>lutece-core</type> </dependency> <!-- Plugins of my site --> <!-- Contact --> <dependency> <groupId>fr.paris.lutece.plugins</groupId> <artifactId>plugin-contact</artifactId> <version>[2.1.2,6.0.0-SNAPSHOT)</version> <type>lutece-plugin</type> </dependency> ... <!-- Wiki --> <dependency> <groupId>fr.paris.lutece.plugins</groupId> <artifactId>plugin-wiki</artifactId> <version>[0.9.0,4.0.0-SNAPSHOT)</version> <type>lutece-plugin</type> </dependency> <dependency> <groupId>fr.paris.lutece.plugins</groupId> <artifactId>module-seo-wiki</artifactId> <version>[0.9.0,4.0.0-SNAPSHOT)</version> <type>lutece-plugin</type> </dependency> </dependencies> </project>
The configuration files of the database
These files must be in the following directories:
- /webapp/src/conf/dev/WEB-INF/conf/db.properties
- /webapp/src/conf/prod/WEB-INF/conf/db.properties
Here is the content for example of the file that will allow access to the development database:
################################################################################ # Configuration file for Lutece to parameterize connections pools to databases ################################################################################ portal.poolservice=fr.paris.lutece.util.pool.service.LuteceConnectionService portal.driver=org.gjt.mm.mysql.Driver portal.url=jdbc:mysql://ec2-50-19-213-178.compute-1.amazonaws.com/mydatabase-dev?autoReconnect=true&useUnicode=yes&characterEncoding=utf8 portal.user=myuser-dev portal.password=<my password> portal.initconns=2 portal.maxconns=50 portal.logintimeout=2 portal.checkvalidconnectionsql=SELECT 1
Initialization of databases
The easiest way to initialize the databases is to build the two webapps locally and play the creation scripts.
Remote database access can be a problem if you are behind a proxy that does not allow you to use port 3306.
To build the dev webapp locally and start the initialization of its remote database, here are the commands
mvn clean lutece:site-assembly -P dev cd target / mysite-1.0.0-SNAPSHOT / WEB-INF / sql ant
For the production base, replace dev by prod in the first command.
Update project files on GIT
Once all the project files are ready, you have to push them into the GIT repository branch.
For that, the three commands to execute:
git add <files> git commit -m "Project files added" git push origin master
Creating instances of applications
Click on the "Apps" menu of the main menu (banner).
In the Database section on the left, click on the "Add new application" button.
Then enter the name of the application (mysite-dev and mysite for the example) in the form below:
Creating Continuous Integration Jobs
Click on the " Builds " menu of the main menu (banner).
Enable the provision of a Jenkins Continuous Integration Platform.
Once the platform is available, click on " Create Job "
You must then give a name: " Deploy DEV ", select the type of Job: " Free-Style project " and validate.
Warning ! Do not choose " Build Maven 2/3 project " which now requires to create an artifact to deploy the war in RUN @ Cloud
You will then have to enter the detailed configuration of the Job.
The only information to enter is:
- The repository type: GIT and the URL of this one: ssh: git@git.cloudbees.com/lutece/mysite.git
- In the Build section, Run a shell script - command: mvn clean lutece:site-assembly -Pdev -DfinalName = mysite-dev
- The actions following the build for which we will choose Deploy Host service CloudBees RUN @ cloud service mysite-dev
The second job to be defined for production, " Deploy PROD ", can be created by cloning the previous one.
The only differences are:
- The goals and options in the Build section: clean lutece:site-assembly -Pprod -DfinalName = mysite-prod
- The actions following the build for which we will choose Deploy Host service CloudBees RUN @ cloud service mysite
In addition, you must uncheck the automatic launch option of the Job whenever you make a change in the GIT repository. This Job is to be launched manually when the changes have been validated on the development platform.
Here is the view of the Jenkins dashboard, after creating and launching jobs:
Deployment of instances
In the proposed configuration, any changes to GIT will automatically launch a full build of the webapp and its deployment on the development instance at the URL http://mysite-dev.myaccount.cloudbees.net
If the tests are satisfactory, the launch of the Job "Deploy PROD" can be done manually from the dashboard of Jenkins.
If all goes well you should get your Lutece instance at the URL http://mysite.myaccount.cloudbees.net.
Setting up the mail service
Enable the "SendGrid Mail Server" service for your account from the Apps interface.
Click Alert Settings (http://sendgrid.com/alerts) to set the notification email address of the service.
Initialize your password: https://sendgrid.com/user/forgotPassword
Click Developer (http://sendgrid.com/developer) to view the configuration settings.
Add, in the WEB-INF / conf / override / directory of your deployment profile on CloudBees or in your webapp, a config.properties file with the following elements configured:
config.properties ################################################## ############################## # Mail sending parameters (ip address of the mail server) # username and password if authentication needed - empty otherwise mail.server = smtp.sendgrid.net mail.username = [Your SendGrid account] mail.password = [Your SendGrid password] mail.list.separator =; mail.type.plain = text / plain; charset = mail.type.html = text / html; charset = mail.noreply.email = [your reply email]
Release note The authentication mode requested by SendGrid is supported only as of version 4.1.0 of Lutece.