Revel

CloudCaptain supports Revel apps written in Go and packaged as a Revel tar.gz archive.

Get Started

If you haven't already, start by following Revel & CloudCaptain tutorial that will get you up and running in 5-10 minutes.

Packaging

Applications should be packaged as a Revel tar.gz containing a Linux ELF64 binary.

To properly set up cross-compilation in order to create Linux x64 binaries Windows users should invoke:

> set GOOS=linux

And Mac OSX users:

> export GOOS=linux

To further decrease the size of CloudCaptain images, use the newest version of Go.

Ports

CloudCaptain will automatically configure your application port based on the information contained in in app.conf.

The port will be either http or https based on the value of http.ssl. The actual port number is automatically configured according to the value of the http.port property.

TLS (SSL) Certificates / HTTPS

To expose your app via HTTPS make sure you have a custom domain configured for the environment where you want to run it. Also make sure that you have obtained a valid TLS (SSL) certificate and that your app has been created with app.type set to load-balanced and tls.type set to acm (AWS Certificate Manager).

To listen to the HTTPS port you can use the following code:

import (
  "net/http"
)

func handler(w http.ResponseWriter, req *http.Request) {
  w.Header().Set("Content-Type", "text/plain")
  w.Write([]byte("This is an example server.\n"))
}

func main() {
  http.HandleFunc("/", handler)
  err := http.ListenAndServeTLS(":443", "/app-config/boxfuse-selfsigned-cert.pem", "/app-config/boxfuse-selfsigned-key.pem", nil)
}

This will ensure that all network traffic between the ELB and your instances will be encrypted as well.

Root Certificates

CloudCaptain uses the same root certificate bundle as the latest version of Firefox. Additionally CloudCaptain also includes the root certificates for Amazon RDS, so you can connect securely to RDS databases out of the box.

Temporary Files

CloudCaptain configures the instance to use /tmp as the directory to store temporary files and provisions 1 GB of space by default.

To increase this (up to a maximum of 16 TB), simply set the tmp configuration setting to the number of GB of temp space you need. To prevent CloudCaptain from provisioning any temp space set tmp to 0.

Time Zone

By default all CloudCaptain instance use the UTC time zone.

We don't recommend changing this as this greatly simplifies time zone issues in machine to machine communication and cleanly relegates all time zones related aspects to a pure presentation layer concern.

If however you still do want to change this, you can override the default time zone of the instance using the TZ environment variable. For example to change the time zone of your instance to America/Los_Angeles you would do so like this:

> boxfuse fuse -envvars.TZ=America/Los_Angeles

Linux Kernel Tuning (experts only)

Kernel arguments

To tune the arguments passed Linux kernel from the bootloader, simply pass them using the -linux.args setting when fusing your image.

sysctl.conf

If you need to tune the Linux kernel running in your instance, simply place a sysctl.conf file in the conf directory of your app:

 my-revel-app
   app
   conf
     sysctl.conf
   log
   messages
   public
   test

You can then for example tune the maximum number of file descriptors by simply including the following in sysctl.conf:

fs.file-max = 131072

CloudCaptain will then automatically configure the Linux kernel to use these settings.

Linux x64