diff --git a/.circleci/config.yaml b/.circleci/config.yaml
new file mode 100644
index 000000000..c6c06e62a
--- /dev/null
+++ b/.circleci/config.yaml
@@ -0,0 +1,41 @@
+# Java Maven CircleCI 2.0 configuration file
+#
+# Check https://circleci.com/docs/2.0/language-java/ for more details
+#
+version: 2
+jobs:
+ build:
+ docker:
+ # specify the version you desire here
+ - image: circleci/openjdk:8-jdk
+
+ # Specify service dependencies here if necessary
+ # CircleCI maintains a library of pre-built images
+ # documented at https://circleci.com/docs/2.0/circleci-images/
+ # - image: circleci/postgres:9.4
+
+ working_directory: ~/repo
+
+ environment:
+ # Customize the JVM maximum heap limit
+ MAVEN_OPTS: -Xmx3200m
+
+ steps:
+ - checkout
+
+ # Download and cache dependencies
+ - restore_cache:
+ keys:
+ - v1-dependencies-{{ checksum "pom.xml" }}
+ # fallback to using the latest cache if no exact match is found
+ - v1-dependencies-
+
+ - run: mvn dependency:go-offline
+
+ - save_cache:
+ paths:
+ - ~/.m2
+ key: v1-dependencies-{{ checksum "pom.xml" }}
+
+ # run tests!
+ - run: mvn integration-test
diff --git a/Docker-files/app/Dockerfile b/Docker-files/app/Dockerfile
new file mode 100644
index 000000000..22b8aa8b1
--- /dev/null
+++ b/Docker-files/app/Dockerfile
@@ -0,0 +1,11 @@
+FROM tomcat:8-jre11
+LABEL "Project"="Vprofile"
+LABEL "Author"="Imran"
+
+RUN rm -rf /usr/local/tomcat/webapps/*
+COPY target/vprofile-v2.war /usr/local/tomcat/webapps/ROOT.war
+
+EXPOSE 8080
+CMD ["catalina.sh", "run"]
+WORKDIR /usr/local/tomcat/
+VOLUME /usr/local/tomcat/webapps
\ No newline at end of file
diff --git a/Docker-files/app/multistage/Dockerfile b/Docker-files/app/multistage/Dockerfile
new file mode 100644
index 000000000..4163bed27
--- /dev/null
+++ b/Docker-files/app/multistage/Dockerfile
@@ -0,0 +1,13 @@
+FROM openjdk:11 AS BUILD_IMAGE
+RUN apt update && apt install maven -y
+RUN git clone https://github.com/devopshydclub/vprofile-project.git
+RUN cd vprofile-project && git checkout docker && mvn install
+
+FROM tomcat:9-jre11
+
+RUN rm -rf /usr/local/tomcat/webapps/*
+
+COPY --from=BUILD_IMAGE vprofile-project/target/vprofile-v2.war /usr/local/tomcat/webapps/ROOT.war
+
+EXPOSE 8080
+CMD ["catalina.sh", "run"]
diff --git a/Docker-files/d.txt b/Docker-files/d.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/Docker-files/db/Dockerfile b/Docker-files/db/Dockerfile
new file mode 100644
index 000000000..120a5b8cd
--- /dev/null
+++ b/Docker-files/db/Dockerfile
@@ -0,0 +1,9 @@
+FROM mysql:8.0.33
+LABEL "Project"="Vprofile"
+LABEL "Author"="Imran"
+
+ENV MYSQL_ROOT_PASSWORD="vprodbpass"
+ENV MYSQL_DATABASE="accounts"
+
+
+ADD db_backup.sql docker-entrypoint-initdb.d/db_backup.sql
diff --git a/Docker-files/db/db_backup.sql b/Docker-files/db/db_backup.sql
new file mode 100644
index 000000000..bdb779d23
--- /dev/null
+++ b/Docker-files/db/db_backup.sql
@@ -0,0 +1,121 @@
+-- MySQL dump 10.13 Distrib 5.7.18, for Linux (x86_64)
+--
+-- Host: localhost Database: accounts
+-- ------------------------------------------------------
+-- Server version 5.7.18-0ubuntu0.16.10.1
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `role`
+--
+
+DROP TABLE IF EXISTS `role`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `role` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(45) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `role`
+--
+
+LOCK TABLES `role` WRITE;
+/*!40000 ALTER TABLE `role` DISABLE KEYS */;
+INSERT INTO `role` VALUES (1,'ROLE_USER');
+/*!40000 ALTER TABLE `role` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `user`
+--
+
+DROP TABLE IF EXISTS `user`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `user` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `username` varchar(255) DEFAULT NULL,
+ `userEmail` varchar(255) DEFAULT NULL,
+ `profileImg` varchar(255) DEFAULT NULL,
+ `profileImgPath` varchar(255) DEFAULT NULL,
+ `dateOfBirth` varchar(255) DEFAULT NULL,
+ `fatherName` varchar(255) DEFAULT NULL,
+ `motherName` varchar(255) DEFAULT NULL,
+ `gender` varchar(255) DEFAULT NULL,
+ `maritalStatus` varchar(255) DEFAULT NULL,
+ `permanentAddress` varchar(255) DEFAULT NULL,
+ `tempAddress` varchar(255) DEFAULT NULL,
+ `primaryOccupation` varchar(255) DEFAULT NULL,
+ `secondaryOccupation` varchar(255) DEFAULT NULL,
+ `skills` varchar(255) DEFAULT NULL,
+ `phoneNumber` varchar(255) DEFAULT NULL,
+ `secondaryPhoneNumber` varchar(255) DEFAULT NULL,
+ `nationality` varchar(255) DEFAULT NULL,
+ `language` varchar(255) DEFAULT NULL,
+ `workingExperience` varchar(255) DEFAULT NULL,
+ `password` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `user`
+--
+
+LOCK TABLES `user` WRITE;
+/*!40000 ALTER TABLE `user` DISABLE KEYS */;
+INSERT INTO `user` VALUES (7,'admin_vp','admin@visualpathit.com',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$11$0a7VdTr4rfCQqtsvpng6GuJnzUmQ7gZiHXgzGPgm5hkRa3avXgBLK'),(8,'WahidKhan','wahid.khan74@gmail.com',NULL,NULL,'28/03/1994','M Khan','R Khan','male','unMarried','Ameerpet,Hyderabad','Ameerpet,Hyderabad','Software Engineer','Software Engineer','Java HTML CSS ','8888888888','8888888888','Indian','english','2 ','$2a$11$UgG9TkHcgl02LxlqxRHYhOf7Xv4CxFmFEgS0FpUdk42OeslI.6JAW'),(9,'Gayatri','gayatri@gmail.com',NULL,NULL,'20/06/1993','K','L','male','unMarried','Ameerpet,Hyderabad','Ameerpet,Hyderabad','Software Engineer','Software Engineer','Java HTML CSS ','9999999999','9999999999','India','english','5','$2a$11$gwvsvUrFU.YirMM1Yb7NweFudLUM91AzH5BDFnhkNzfzpjG.FplYO'),(10,'WahidKhan2','wahid.khan741@gmail.com',NULL,NULL,'28/03/1994','M Khan','R Khan','male','unMarried','Ameerpet,Hyderabad','Ameerpet,Hyderabad','Software Engineer','Software Engineer','Java HTML CSS ','7777777777','777777777','India','english','7','$2a$11$6oZEgfGGQAH23EaXLVZ2WOSKxcEJFnBSw2N2aghab0s2kcxSQwjhC'),(11,'KiranKumar','kiran@gmail.com',NULL,NULL,'8/12/1993','K K','RK','male','unMarried','California','James Street','Software Engineer','Software Engineer','Java HTML CSS ','1010101010','1010101010','India','english','10','$2a$11$EXwpna1MlFFlKW5ut1iVi.AoeIulkPPmcOHFO8pOoQt1IYU9COU0m'),(12,'Saikumar','sai@gmail.com',NULL,NULL,'20/06/1993','Sai RK','Sai AK','male','unMarried','California','US','Software Engineer','Software Engineer','Java HTML CSS AWS','8888888111','8888888111','India','english','8','$2a$11$pzWNzzR.HUkHzz2zhAgqOeCl0WaTgY33NxxJ7n0l.rnEqjB9JO7vy'),(13,'RamSai','ram@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$11$6BSmYPrT8I8b9yHmx.uTRu/QxnQM2vhZYQa8mR33aReWA4WFihyGK');
+/*!40000 ALTER TABLE `user` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `user_role`
+--
+
+DROP TABLE IF EXISTS `user_role`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `user_role` (
+ `user_id` int(11) NOT NULL,
+ `role_id` int(11) NOT NULL,
+ PRIMARY KEY (`user_id`,`role_id`),
+ KEY `fk_user_role_roleid_idx` (`role_id`),
+ CONSTRAINT `fk_user_role_roleid` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_user_role_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `user_role`
+--
+
+LOCK TABLES `user_role` WRITE;
+/*!40000 ALTER TABLE `user_role` DISABLE KEYS */;
+INSERT INTO `user_role` VALUES (4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1),(11,1),(12,1),(13,1);
+/*!40000 ALTER TABLE `user_role` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2017-12-07 16:32:31
diff --git a/Docker-files/web/Dockerfile b/Docker-files/web/Dockerfile
new file mode 100644
index 000000000..99d468509
--- /dev/null
+++ b/Docker-files/web/Dockerfile
@@ -0,0 +1,6 @@
+FROM nginx
+LABEL "Project"="Vprofile"
+LABEL "Author"="Imran"
+
+RUN rm -rf /etc/nginx/conf.d/default.conf
+COPY nginvproapp.conf /etc/nginx/conf.d/vproapp.conf
\ No newline at end of file
diff --git a/Docker-files/web/nginvproapp.conf b/Docker-files/web/nginvproapp.conf
new file mode 100644
index 000000000..ab3a503e4
--- /dev/null
+++ b/Docker-files/web/nginvproapp.conf
@@ -0,0 +1,9 @@
+upstream vproapp {
+ server vproapp:8080;
+}
+server {
+ listen 80;
+location / {
+ proxy_pass http://vproapp;
+}
+}
\ No newline at end of file
diff --git a/ProdPipeline/Jenkinsfile b/ProdPipeline/Jenkinsfile
new file mode 100644
index 000000000..4fdd6d80a
--- /dev/null
+++ b/ProdPipeline/Jenkinsfile
@@ -0,0 +1,41 @@
+def COLOR_MAP = [
+ 'SUCCESS': 'good',
+ 'FAILURE': 'danger',
+]
+
+pipeline {
+ agent any
+
+ environment {
+ cluster = "bonny-vproprod"
+ service = "vproprodsvc"
+ }
+
+ stages {
+ stage('Deploy to Prod ecs') {
+ steps {
+ withAWS(credentials: 'aws-cred-id', region: 'us-east-2') {
+ sh 'aws ecs update-service --cluster ${cluster} --service ${service} --force-new-deployment'
+ }
+ }
+ }
+
+ }
+
+ post {
+ always {
+ echo 'Slack Notifications.'
+ slackSend (
+ channel: '#jenkinscicd',
+ color: COLOR_MAP[currentBuild.currentResult],
+ message: "*${currentBuild.currentResult}:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} \n More info at: ${env.BUILD_URL}"
+ )
+
+ mail (
+ to: 'jofranco1203@gmail.com',
+ subject: "Build ${env.JOB_NAME} - #${env.BUILD_NUMBER} ${currentBuild.currentResult}",
+ body: "Build details: ${env.BUILD_URL}"
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index f138fcbfc..4db4800dd 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,17 @@
-## Prerequisites
+##
+### Prerequisites
- JDK 1.8 or later
- Maven 3 or later
- MySQL 5.6 or later
-## Technologies
+### Technologies
- Spring MVC
- Spring Security
- Spring Data JPA
- Maven
- JSP
- MySQL
-## Database
+### Database
Here,we used Mysql DB
MSQL DB Installation Steps for Linux ubuntu 14.04:
- $ sudo apt-get update
diff --git a/StagePipeline/Jenkinsfile b/StagePipeline/Jenkinsfile
new file mode 100644
index 000000000..cfca5d93e
--- /dev/null
+++ b/StagePipeline/Jenkinsfile
@@ -0,0 +1,150 @@
+def COLOR_MAP = [
+ 'SUCCESS': 'good',
+ 'FAILURE': 'danger',
+]
+pipeline {
+ agent any
+ tools {
+ maven "maven3"
+ jdk "jdk17"
+ }
+
+ environment {
+ SNAP_REPO = 'vprofile-snapshot'
+ NEXUS_USER = 'admin'
+ NEXUS_PASS = 'walter'
+ RELEASE_REPO = 'vprofile-release'
+ CENTRAL_REPO = 'vprofile-release'
+ NEXUSIP = '34.134.153.215'
+ NEXUSPORT = '8081'
+ NEXUS_GRP_REPO = 'vprofile-group'
+ NEXUS_LOGIN = 'nexuslogin'
+ SONARSERVER = 'sonar-server'
+ SONARSCANNER = 'sonar-scanner'
+ registryCredential = 'ecr:us-east-2:aws-cred-id'
+ appRegistry = '163447728448.dkr.ecr.us-east-2.amazonaws.com/vprofileappimg'
+ vprofileRegistry = "https://163447728448.dkr.ecr.us-east-2.amazonaws.com"
+ cluster = "bonny-vprostaging"
+ service = "vproappstagesvc"
+ }
+
+ stages {
+ stage('Build'){
+ steps {
+ sh 'mvn -s settings.xml -DskipTests clean install'
+ }
+ post {
+ success {
+ echo "Now Archiving."
+ archiveArtifacts artifacts: '**/*.war'
+ }
+ }
+ }
+
+ stage('Test'){
+ steps {
+ sh 'mvn -s settings.xml test'
+ }
+
+ }
+
+ stage('Checkstyle Analysis'){
+ steps {
+ sh 'mvn -s settings.xml checkstyle:checkstyle'
+ }
+ }
+
+ stage('Sonar Analysis') {
+ environment {
+ scannerHome = tool "${SONARSCANNER}"
+ }
+ steps {
+ withSonarQubeEnv("${SONARSERVER}") {
+ sh '''${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=vprofile \
+ -Dsonar.projectName=vprofile \
+ -Dsonar.projectVersion=1.0 \
+ -Dsonar.sources=src/ \
+ -Dsonar.java.binaries=target/test-classes/com/visualpathit/account/controllerTest/ \
+ -Dsonar.junit.reportsPath=target/surefire-reports/ \
+ -Dsonar.jacoco.reportsPath=target/jacoco.exec \
+ -Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml'''
+ }
+ }
+ }
+
+ stage("Quality Gate") {
+ steps {
+ timeout(time: 1, unit: 'HOURS') {
+ // Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails
+ // true = set pipeline to UNSTABLE, false = don't
+ waitForQualityGate abortPipeline: true
+ }
+ }
+ }
+
+ stage("UploadArtifact"){
+ steps{
+ nexusArtifactUploader(
+ nexusVersion: 'nexus3',
+ protocol: 'http',
+ nexusUrl: "${NEXUSIP}:${NEXUSPORT}",
+ groupId: 'QA',
+ version: "${env.BUILD_ID}-${env.BUILD_TIMESTAMP}",
+ repository: "${RELEASE_REPO}",
+ credentialsId: "${NEXUS_LOGIN}",
+ artifacts: [
+ [artifactId: 'vproapp',
+ classifier: '',
+ file: 'target/vprofile-v2.war',
+ type: 'war']
+ ]
+ )
+ }
+ }
+
+ stage('Build App Image') {
+ steps {
+ script {
+ dockerImage = docker.build( appRegistry + ":$BUILD_NUMBER", "./Docker-files/app/multistage/")
+ }
+ }
+ }
+
+ stage('Upload App Image') {
+ steps{
+ script {
+ docker.withRegistry( vprofileRegistry, registryCredential ) {
+ dockerImage.push("$BUILD_NUMBER")
+ dockerImage.push('latest')
+ }
+ }
+ }
+ }
+
+ stage('Deploy to ECS staging') {
+ steps {
+ withAWS(credentials: 'aws-cred-id', region: 'us-east-2') {
+ sh 'aws ecs update-service --cluster ${cluster} --service ${service} --force-new-deployment'
+ }
+ }
+ }
+
+
+ }
+ post {
+ always {
+ echo 'Slack Notifications.'
+ slackSend (
+ channel: '#jenkinscicd',
+ color: COLOR_MAP[currentBuild.currentResult],
+ message: "*${currentBuild.currentResult}:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} \n More info at: ${env.BUILD_URL}"
+ )
+
+ mail (
+ to: 'jofranco1203@gmail.com',
+ subject: "Build ${env.JOB_NAME} - #${env.BUILD_NUMBER} ${currentBuild.currentResult}",
+ body: "Build details: ${env.BUILD_URL}"
+ )
+ }
+ }
+}
diff --git a/pom.xml b/pom.xml
index 332e952e2..c61af061a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.visualpathit
vprofile
war
- v1
+ v2
Visualpathit VProfile Webapp
http://maven.apache.org
@@ -18,8 +18,8 @@
1.2
4.10
1.1.3
- 1.8
- 1.8
+ 17
+ 17
@@ -136,7 +136,7 @@
org.jacoco
jacoco-maven-plugin
- 0.7.2.201409121644
+ 0.8.8
jacoco-initialize
@@ -154,7 +154,28 @@
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.3.1
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+
+ 17
+
+
+
+
+
+ ${NEXUS_GRP_REPO}
+ http://${NEXUSIP}:${NEXUSPORT}/repository/${NEXUS_GRP_REPO}/
+
+
diff --git a/settings.xml b/settings.xml
new file mode 100644
index 000000000..2b4b4a29e
--- /dev/null
+++ b/settings.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ ${SNAP_REPO}
+ ${NEXUS_USER}
+ ${NEXUS_PASS}
+
+
+ ${RELEASE_REPO}
+ ${NEXUS_USER}
+ ${NEXUS_PASS}
+
+
+ {CENTRAL_REPO}
+ ${NEXUS_USER}
+ ${NEXUS_PASS}
+
+
+ {NEXUS_GRP_REPO}
+ ${NEXUS_USER}
+ ${NEXUS_PASS}
+
+
+
+
+
+ ${CENTRAL_REPO}
+ ${CENTRAL_REPO}
+ http://${NEXUSIP}:${NEXUSPORT}/repository/${NEXUS_GRP_REPO}/
+ *
+
+
+
+
diff --git a/userdata/jenkins-setup.sh b/userdata/jenkins-setup.sh
new file mode 100644
index 000000000..b7533b747
--- /dev/null
+++ b/userdata/jenkins-setup.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+sudo apt update
+sudo apt install openjdk-8-jdk -y
+sudo apt install maven git wget unzip -y
+wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
+sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
+sudo apt-get update
+sudo apt-get install jenkins -y
\ No newline at end of file
diff --git a/userdata/nexus-setup.sh b/userdata/nexus-setup.sh
new file mode 100644
index 000000000..7d1c712cc
--- /dev/null
+++ b/userdata/nexus-setup.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+yum install java-1.8.0-openjdk.x86_64 wget -y
+mkdir -p /opt/nexus/
+mkdir -p /tmp/nexus/
+cd /tmp/nexus
+NEXUSURL="https://download.sonatype.com/nexus/3/latest-unix.tar.gz"
+wget $NEXUSURL -O nexus.tar.gz
+EXTOUT=`tar xzvf nexus.tar.gz`
+NEXUSDIR=`echo $EXTOUT | cut -d '/' -f1`
+rm -rf /tmp/nexus/nexus.tar.gz
+rsync -avzh /tmp/nexus/ /opt/nexus/
+useradd nexus
+chown -R nexus.nexus /opt/nexus
+cat <> /etc/systemd/system/nexus.service
+[Unit]
+Description=nexus service
+After=network.target
+
+[Service]
+Type=forking
+LimitNOFILE=65536
+ExecStart=/opt/nexus/$NEXUSDIR/bin/nexus start
+ExecStop=/opt/nexus/$NEXUSDIR/bin/nexus stop
+User=nexus
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
+
+EOT
+
+echo 'run_as_user="nexus"' > /opt/nexus/$NEXUSDIR/bin/nexus.rc
+systemctl daemon-reload
+systemctl start nexus
+systemctl enable nexus
diff --git a/userdata/sonar-setup.sh b/userdata/sonar-setup.sh
new file mode 100644
index 000000000..ac59d8e73
--- /dev/null
+++ b/userdata/sonar-setup.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+cp /etc/sysctl.conf /root/sysctl.conf_backup
+cat < /etc/sysctl.conf
+vm.max_map_count=262144
+fs.file-max=65536
+ulimit -n 65536
+ulimit -u 4096
+EOT
+cp /etc/security/limits.conf /root/sec_limit.conf_backup
+cat < /etc/security/limits.conf
+sonarqube - nofile 65536
+sonarqube - nproc 409
+EOT
+
+sudo apt-get update -y
+sudo apt-get install openjdk-11-jdk -y
+sudo update-alternatives --config java
+java -version
+
+sudo apt update
+wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
+
+sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
+sudo apt install postgresql postgresql-contrib -y
+#sudo -u postgres psql -c "SELECT version();"
+sudo systemctl enable postgresql.service
+sudo systemctl start postgresql.service
+sudo echo "postgres:admin123" | chpasswd
+runuser -l postgres -c "createuser sonar"
+sudo -i -u postgres psql -c "ALTER USER sonar WITH ENCRYPTED PASSWORD 'admin123';"
+sudo -i -u postgres psql -c "CREATE DATABASE sonarqube OWNER sonar;"
+sudo -i -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;"
+systemctl restart postgresql
+#systemctl status -l postgresql
+netstat -tulpena | grep postgres
+sudo mkdir -p /sonarqube/
+cd /sonarqube/
+sudo curl -O https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.0.34182.zip
+sudo apt-get install zip -y
+sudo unzip -o sonarqube-8.3.0.34182.zip -d /opt/
+sudo mv /opt/sonarqube-8.3.0.34182/ /opt/sonarqube
+sudo groupadd sonar
+sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
+sudo chown sonar:sonar /opt/sonarqube/ -R
+cp /opt/sonarqube/conf/sonar.properties /root/sonar.properties_backup
+cat < /opt/sonarqube/conf/sonar.properties
+sonar.jdbc.username=sonar
+sonar.jdbc.password=admin123
+sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
+sonar.web.host=0.0.0.0
+sonar.web.port=9000
+sonar.web.javaAdditionalOpts=-server
+sonar.search.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
+sonar.log.level=INFO
+sonar.path.logs=logs
+EOT
+
+cat < /etc/systemd/system/sonarqube.service
+[Unit]
+Description=SonarQube service
+After=syslog.target network.target
+
+[Service]
+Type=forking
+
+ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
+ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
+
+User=sonar
+Group=sonar
+Restart=always
+
+LimitNOFILE=65536
+LimitNPROC=4096
+
+
+[Install]
+WantedBy=multi-user.target
+EOT
+
+systemctl daemon-reload
+systemctl enable sonarqube.service
+#systemctl start sonarqube.service
+#systemctl status -l sonarqube.service
+apt-get install nginx -y
+rm -rf /etc/nginx/sites-enabled/default
+rm -rf /etc/nginx/sites-available/default
+cat < /etc/nginx/sites-available/sonarqube
+server{
+ listen 80;
+ server_name sonarqube.groophy.in;
+
+ access_log /var/log/nginx/sonar.access.log;
+ error_log /var/log/nginx/sonar.error.log;
+
+ proxy_buffers 16 64k;
+ proxy_buffer_size 128k;
+
+ location / {
+ proxy_pass http://127.0.0.1:9000;
+ proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
+ proxy_redirect off;
+
+ proxy_set_header Host \$host;
+ proxy_set_header X-Real-IP \$remote_addr;
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto http;
+ }
+}
+EOT
+ln -s /etc/nginx/sites-available/sonarqube /etc/nginx/sites-enabled/sonarqube
+systemctl enable nginx.service
+#systemctl restart nginx.service
+sudo ufw allow 80,9000,9001/tcp
+
+echo "System reboot in 30 sec"
+sleep 30
+reboot