ODK Aggregate installation on flynn (Heroku like paas)

I have been trying to setup an instance of ODK collect on a Flynn server.
But there is some issue when setting up something related to docker-compose

What ODK tool and version are you using? And on what device and operating system version?

What steps can we take to reproduce the problem?
I cloned the repo from github and followed the instructions about database setup and first steps.
Alter that i executed gradle build locally and pushed the repo to my flynn instance.
It returned the following error:

What you have you tried to fix the problem?
FAILURE: Build failed with an exception.

   * Where:
   Build file '/tmp/build/app/build.gradle' line: 26

   * What went wrong:
   A problem occurred evaluating root project 'aggregate'.
   > Failed to apply plugin [id 'docker-compose']
   > Could not create an instance of type com.avast.gradle.dockercompose.Com                                                                                        poseExtension_Decorated.

Anything else we should know or have? If you have a test form or screenshots or logs, attach here.
this is my build.gradle:

    import static org.opendatakit.aggregate.gradle.Util.getVersionName

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6'
    classpath 'de.undercouch:gradle-download-task:3.3.0'
    classpath "com.avast.gradle:gradle-docker-compose-plugin:0.6.8"
    classpath 'org.akhikhl.gretty:gretty:+'    
  }
}

plugins {
  id 'java'
  id 'maven'
  id 'war'
  id 'idea'
  id 'checkstyle'
  id 'de.fuerstenau.buildconfig' version '1.1.8'
}
apply plugin: 'gwt'
apply plugin: 'de.undercouch.download'
apply plugin: 'org.akhikhl.gretty'
apply plugin: 'docker-compose'


group = 'org.opendatakit'
version = getVersionName()
description = ""

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
  mavenCentral()

  flatDir {
    dirs 'libs'
  }
}

def versions = [
    spring        : '4.3.4.RELEASE',
    springSecurity: '4.2.0.RELEASE',
    gwt           : [
        servlet      : '2.7.0',
        googleMapsV3 : '1.0.1',
        visualization: '1.1.2'
    ],
    jackson       : '2.8.5',
    geronimo      : '1.0',
    httpcomponents: [
        client: '4.5.2',
        core  : '4.4.5',
        mime  : '4.5.2'
    ],
    commons       : [
        lang3     : '3.5',
        fileUpload: '1.3.2',
        dbcp2     : '2.1.1'
    ],
    googleApi     : [
        client: '1.22.0',
        sheets: 'v4-rev38-1.22.0',
        drive : 'v3-rev52-1.22.0'
    ],
    wink          : '1.4',
    gson          : '2.8.0',
    kxml2         : '2.3.0',
    odk           : [
        javarosa     : '2.6.0',
        httpclientGae: '4.5.2-1',
        tomcatUtil   : '1.0.1'
    ],
    jdbc          : [
        mysql     : '5.1.44',
        postgresql: '42.1.4.jre7'
    ],
    gae           : '1.9.54',
    odkTomcatUtil : '1.0.1',
    servletApi    : '3.1.0',
    junit         : '4.12',
    mockito       : '2.+'
]

configurations.all {
  exclude group: 'commons-logging', module: 'commons-logging'
}

dependencies {
  compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
  compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.25' // JCL over SLF4J
  compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.7.25'
  compile group: 'org.slf4j', name: 'slf4j-jdk14', version: '1.7.25'

  compile group: 'org.opendatakit', name: 'odk-tomcatutil', version: versions.odk.tomcatUtil
  compile group: 'org.springframework', name: 'spring-aop', version: versions.spring
  compile group: 'org.springframework', name: 'spring-aspects', version: versions.spring
  compile group: 'org.springframework', name: 'spring-beans', version: versions.spring
  compile group: 'org.springframework', name: 'spring-context', version: versions.spring
  compile group: 'org.springframework', name: 'spring-context-support', version: versions.spring
  compile group: 'org.springframework', name: 'spring-core', version: versions.spring
  compile group: 'org.springframework', name: 'spring-expression', version: versions.spring
  compile group: 'org.springframework', name: 'spring-instrument', version: versions.spring
  compile group: 'org.springframework', name: 'spring-jdbc', version: versions.spring
  compile group: 'org.springframework', name: 'spring-tx', version: versions.spring
  compile group: 'org.springframework', name: 'spring-instrument-tomcat', version: versions.spring
  compile group: 'org.springframework', name: 'spring-web', version: versions.spring
  compile group: 'org.springframework.security', name: 'spring-security-config', version: versions.springSecurity
  compile group: 'org.springframework.security', name: 'spring-security-core', version: versions.springSecurity
  compile group: 'org.springframework.security', name: 'spring-security-crypto', version: versions.springSecurity
  compile group: 'org.springframework.security', name: 'spring-security-web', version: versions.springSecurity
  compile group: 'com.googlecode.gwt-google-maps-v3', name: 'gwt-google-maps-v3', version: versions.gwt.googleMapsV3
  compile group: 'com.google.gwt.google-apis', name: 'gwt-visualization', version: versions.gwt.visualization
  compile group: 'com.google.gwt', name: 'gwt-servlet', version: versions.gwt.servlet
  compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: versions.jackson
  compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: versions.jackson
  compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: versions.jackson
  compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: versions.jackson
  compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: versions.jackson
  compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-xml-provider', version: versions.jackson
  compile group: 'org.apache.geronimo.specs', name: 'geronimo-jaxrs_1.1_spec', version: versions.geronimo
  compile group: 'org.apache.httpcomponents', name: 'httpclient', version: versions.httpcomponents.client
  compile group: 'org.apache.httpcomponents', name: 'httpcore', version: versions.httpcomponents.core
  compile group: 'org.apache.httpcomponents', name: 'httpmime', version: versions.httpcomponents.mime
  compile group: 'org.apache.commons', name: 'commons-lang3', version: versions.commons.lang3
  compile group: 'org.apache.commons', name: 'commons-dbcp2', version: versions.commons.dbcp2
  compile group: 'commons-fileupload', name: 'commons-fileupload', version: versions.commons.fileUpload
  compile group: 'com.google.api-client', name: 'google-api-client', version: versions.googleApi.client
  compile group: 'com.google.api-client', name: 'google-api-client-appengine', version: versions.googleApi.client
  compile group: 'com.google.apis', name: 'google-api-services-sheets', version: versions.googleApi.sheets
  compile group: 'com.google.apis', name: 'google-api-services-drive', version: versions.googleApi.drive
  compile group: 'org.apache.wink', name: 'wink-common', version: versions.wink
  compile group: 'org.apache.wink', name: 'wink-server', version: versions.wink
  compile group: 'com.google.code.gson', name: 'gson', version: versions.gson
  compile group: 'net.sf.kxml', name: 'kxml2', version: versions.kxml2
  compile group: 'org.opendatakit', name: 'opendatakit-javarosa', version: versions.odk.javarosa
  compile group: 'org.opendatakit', name: 'odk-httpclient-gae', version: versions.odk.httpclientGae
  compile group: 'mysql', name: 'mysql-connector-java', version: versions.jdbc.mysql
  compile group: 'org.postgresql', name: 'postgresql', version: versions.jdbc.postgresql
  compile group: 'org.opendatakit', name: 'odk-tomcatutil', version: versions.odkTomcatUtil
  compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: versions.gae
  compile group: 'com.google.appengine', name: 'appengine-api-labs', version: versions.gae
  compile group: 'com.google.appengine', name: 'appengine-jsr107cache', version: versions.gae
  compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: versions.servletApi
  testCompile group: 'junit', name: 'junit', version: versions.junit
  testCompile group: 'org.springframework', name: 'spring-test', version: versions.spring
  testCompile group: 'com.google.appengine', name: 'appengine-api-stubs', version: versions.gae
  testCompile group: 'com.google.appengine', name: 'appengine-testing', version: versions.gae
  testCompile group: 'org.mockito', name: 'mockito-core', version: versions.mockito
}

task wrapper(type: Wrapper) {
  gradleVersion = "2.1"
}

gwt {
  gwtVersion = versions.gwt.servlet
  modules 'org.opendatakit.aggregate.AggregateUI'
  minHeapSize = "512M"
  maxHeapSize = "1024M"
}

war {
  if (warMode == "installer") {
    println "Excluding Guava from WAR"
    war.rootSpec.exclude("**/guava*.jar")
    println "Excluding config files from WAR"
    war.rootSpec.exclude "jdbc.properties"
    war.rootSpec.exclude "logging.properties"
    war.rootSpec.exclude "odk-common-security-settings.xml"
    war.rootSpec.exclude "odk-security-settings.xml"
    war.rootSpec.exclude "odk-settings.xml"
    war.rootSpec.exclude "security.properties"
  }
}

gretty {
  contextPath = '/'
  host = 'localhost'
  logDir = 'logs'
}

buildConfig {
  appName = 'ODK Aggregate'
  version = getVersionName()
  clsName = 'BuildConfig'
  packageName = 'org.opendatakit.aggregate.buildconfig'
}

// Required to use fileExtensions property in checkstyle file
checkstyle {
  toolVersion = '7.6.1'
}

dockerCompose {
  postgresql {
    useComposeFiles = ['db/postgresql/docker-compose.yml']
  }
  mysql {
    useComposeFiles = ['db/mysql/docker-compose.yml']
  }
}

apply from: 'common.gradle'
apply from: 'gae.gradle'
apply from: 'installer.gradle'
apply from: 'packer.gradle'

I've never heard of Flynn, so I'd be interested to learn what high-level problem you are trying so solve. Why not deploy on App Engine or on a VPC?

As far as your particular issue, I'd recommend this approach:

  1. Get Aggregate working on a VPC with Tomcat/PostgreSQL
  2. Get a basic Tomcat/PostgreSQL app working on Flynn.
  3. Try to combine the two.

Currently i use a cluster of servers managed by flynn and i use this system to manage my devOps, by using the VPC i would have to manage yet another server.
I have already tested the tomcat/postgres in a VPC, now i will follow your advice about deploying a simple tomcat/postgres app on to flynn, already tested simple java/postgres app and gradle/postgress app and they work, very basic apps tho.

Thanks for your reply and advice.

1 Like