Liferay on AWS
Deploying
Liferay on AWS Elastic Beanstalk, Configuring RDS for database,
S3
for data folder and Scaling Liferay using Load Balancer on Cloud
Pre-requisites:
- You have a AWS account Configured with keypair
- Understanding of what is Elastic Beanstalk, RDS, S3
Creating EBs Instance
- Create New Application
Click
on AWS Home (Yellow box at top left corner of page) and navigate to Elastic Beanstalk service.
Click “Create New Application” to create your application.
Provide necessary info required e.g. shown below
- Configure Environment Type
Configure Environment Type as applicable for your application, In below
case we are using Web Server, Tomcat 7 with Java 6 on 64 bit Linux
machine.
Select Environment Type as Load balancing, auto scaling
(utilize the feature of AWS as we want our application to scale up / down depending on load
balancer configuration).
- Select Application
Since
we are doing initial setup of Elastic Beanstalk instance we will select sample
application for first time and click continue.
(You
can upload your application here but we still need to configure our application war and also complete the setup /
configure environment) so we select sample application
initially.
- Configure Environment
Provide
Environment Information for your application. E.g. Env you are creating could be
Development Env, QA Env, Prod Env, etc.
- Create RDS DB
Select
check box to “Create RDS DB Instance with this environment” to
create database associated with this env
- Configure EBS Instance
Configure
your Instance, Instance type micro are cheap but it depends
on application whether it can run on Micro (Micro instances will be slow if application is heavy). In our E.g.
we will use m1.large, EC2 Key pair (Created under Network & Security to access EC2
instance). Provide other necessary details (self-explanatory)
- RDS Configuration
Select
the Instance class for database instance db.m1.micro should also work
(but this also depends on your application)
E.g.
we will use db.m1.large and allocate min 5 GB storage, give username
& password that will be used to access your DB. Remember the
default database name is “ebdb” where all the tables will get
created. If you need to configure different database name you would
need to create separate RDS instance for database where you can have advance configuration option for your database instance. RDS through EBs has limited config.
Select
retention setting as desired and Select the availability as Multiple
Availability Zones to have instance availability in other zones if you have configured your application for load balancing similar to your application
- Review Configurations
As last Review
Information to check your configuration is proper and Save to complete environment creation.
The
environment setup will begin to create your application instance, database instance and this will take 10-15 mins to complete.
You will see below screen where events will be logged to check the status, Wait
for the Health to turn in Green.
- Configure Container option
Once
the environment healths turn to green click on configuration &
selects Container Option & update your JVM heap size to avoid
pergem out of memory issue.
- Modify RDS DB instance
From AWS Home Navigate to RDS, select your Instance and right click to Modify configuration.
Provide your Parameter Group (E.g. M1 Parameter Group created to have
UTF-8 encoding for tables, default parameter is not UTF-8 and Latin
which might create issue later for application, so create your
Parameter Group with desired encoding and select for db instance
before the tables are created) and Security group (where
accessibility to instance is maintained through inbound / outbound
rules) Ref: Working
with Security Group
Select
Apply Immediately and Continue.
- Reboot RDS Instance
It will take few mins to modify your RDS check the status and wait till it says “Pending Reboot” and
Then Right Click your RDS instance to “Reboot” it.
This step is important as RDS Instance needs to be rebooted before tables are created, Reboot will update your DB instance to have UTF-8 encoding and default to tables created thereafter.
Importance
Details for RDS:
You
will get the endpoint (host) & port to access your RDS database
instance
User
name & Password is the one you had configured earlier
Your
Elastic Beanstalk instance (EBS) & RDS instance are ready for
use...
- Create S3 bucket for storing liferay data folder
From
AWS home click on S3 “Create Bucket” provide Bucket Name & Region
and click “Create”
Customizing
Liferay war that is ready to deploy on AWS EBs instance (Configured to use RDS for database and S3 for liferay data folder)
Reference :
Approach
Our
goal is to deploy Liferay standalone war on tomcat 7 along with
dependencies & additional tomcat configuration but without
manual following these steps and automate
it as our liferay application war needs to be scalable & should be
deployable on other EBS instance when the additional instance is
automatically up in Load Balancing.
So
we will work on customizing liferay war to automate steps through AWS script &
overcome issues, below are steps
Before
starting go through below links for understanding AWS EBS way
of customization the application
1.
To start we will create .ebextensions folder which will have your
.config file listing the commands it needs to run on EBS instance
along with files you need for your application setup.
liferay-*.war is the fresh stand alone war which we will be customizing for it to be ready deploy on AWS EBs
2.
Now let’s understand what will be there in the .ebextensions folder
- ext folder: having all the dependency jar that need to be copied to tomcat7/lib/ext
- .config: listing your cmds
- installcmd.sh: having script to install s3cmd on EBS instance this is require for configuring s3
- .s3cfg: file require for accessing the AWS s3 (this file will have your access_key & security_key) more about .s3cfg & s3cmd
- catalina.properties, ROOT.xml, server.xml, setenv.sh: These files are copied from liferay-tomcat bundle as we will require to setup tomcat 7
- portal-ext.properties: file will have properties for pointing liferay home, database config, s3 confg.
3.
01_liferaysetup.config : EBS ebextensions .config file. This file
will be read and cmds mentioned will be executed when liferay war is
uploaded & getting deployed on tomcat 7
To
explain in short for cmd in below file,
- cp will copy files from .ebextensions/ folder to respective path mentioned below
- chmod for making the file executable with ec2-user
- mkdir to create folder at desired path
- chown to change user ownership with right permission for files & folder
- /bin/bash ./installcmd.sh for running the shell script to install s3cmd
- s3cmd -c /home/ec2-user/.s3cfg get -f s3://liferay-data/Deploy/*.war /usr/share/tomcat7/deploy
above s3cmd
uses the .s3cfg file having your access credentials to access s3 and
s3 bucket location where your wars will be present and
destination
folder where you want the files to be copied to from s3. (/usr/share/tomcat7/deploy is default path where the Tomcat7 will be installed in EBs)
- Make sure liferay home is set correctly which point to stand alone tomcat 7
- Setup wizard is set false as we don’t want user to see the configuration screen when liferay war will be deployed to other instances when load balancer & scaling is set. (i.e. when liferay war is deployed in new instance it will not find portal-setup-wizard.properties and it will present user with Portal Configuration screen)
- Set appropriate DB config endpoint with port, credentials for your RDS instance you configured above
- Set your access credentials of AWS EC2 for configuring s3 and provide bucket name which will be your liferay-data folder
Once
you have correctly configured portal-ext.properties add it to your
custom liferay-*.war at respective location /WEB-INF/classes/
5.
installcmd.sh : It has executable script that will install s3cmd on
EBS instance, this cmd is required to access s3 bucket
6.
.s3cfg : you can get this config file for s3 by installing s3cmd
where you would be required to input access_key, secret_key
Reference
Link : Install
s3cmd
Add .ebextensions to Custom Liferay war
By
now you are aware of .ebextensions, .config file & files required
for setting up liferay.
Add
this .ebextensions folder once it’s completely ready for your
liferay application & add it to root level of your liferay-*.war as shown
below in first image & verify your files are present
in./ebextensions folder.
Your custom liferay-*.war is now ready to Deploy on AWS EBs
- Upload and Deploy Application
Navigate to your environment and Click on “Upload and Deploy”
Choose
your custom liferay war & give Version Label and click “Deploy”.
These versions are maintained and you can see them in All Version
where you can manage version and deploy specific version on your environment.
Verify your steps for errors
- Watch the Logs for any error in AWS EBs instance for your environment (logs can also be viewed by click on Snapshot logs)
- SSH your EBS instance & verify whether your cmd in .config executed properly by browsing the files & folder, permission, etc
AWS
References for Advance Setup:
Comments
Post a Comment