CloudCaptain is able to automatically provision both PostgreSQL and MySQL databases locally and on AWS RDS. CloudCaptain exposes the database URL, user and password as environment variables within the application instances. And if your application is based on Spring Boot, Grails, Play or Dropwizard, CloudCaptain will automatically configure your frameworks's default datasource with those settings.
This is a great fit for microservices that follow the database per service:
Locally on your machine, for your dev environment CloudCaptain installs and launches a dev VM that contains a fully-configured PostgreSQL database. The PostgreSQL service from that VM is then exposed to your app by mapping its port.
On AWS, for your test and prod environment CloudCaptain automatically provisions either single- or multi-AZ RDS instances for your application.
To ensure your infrastructure can survive in the face of failure, CloudCaptain can make your RDS database highly available by provisioning a continuously replicated geo-redundant hot standby spare instance that's ready take over in case the primary one fails.
To achieve this you can simply scale your database in the CloudCaptain Console:
CloudCaptain automatically exposes the correct database URL, user and password for the database of your app in the current environment as environment variables within your instance:
Environment Variable Name | Description | Example |
---|---|---|
BOXFUSE_DATABASE_URL |
The JDBC URL | jdbc:postgresql://my-app-prod-db.ca53c5vrhrzn.eu-central-1.rds.amazonaws.com:5432/my_app_db?ssl=true |
BOXFUSE_DATABASE_USER |
The database user | kgbdvfcbweikgewVBZUWKSVBvwzwkvbVIVW |
BOXFUSE_DATABASE_PASSWORD |
The database password | OIHQGikugfdieweqwfgUFuDuzkDtERwTSCHJdfIZtdziDjZdtTIdZTUtDSdikdfOULOpOiHhiUGIOgOiGFOFfUI |
Environment Variable Name | Description | Example |
---|---|---|
BOXFUSE_DATABASE_HOST |
The database host | my-app-prod-db.ca53c5vrhrzn.eu-central-1.rds.amazonaws.com |
BOXFUSE_DATABASE_PORT |
The database port | 5432 |
BOXFUSE_DATABASE_NAME |
The database port | my_app_db |
BOXFUSE_DATABASE_USER |
The database user | kgbdvfcbweikgewVBZUWKSVBvwzwkvbVIVW |
BOXFUSE_DATABASE_PASSWORD |
The database password | OIHQGikugfdieweqwfgUFuDuzkDtERwTSCHJdfIZtdziDjZdtTIdZTUtDSdikdfOULOpOiHhiUGIOgOiGFOFfUI |
BOXFUSE_DATABASE_CA_CERT |
The CA root certificate to use to connect via TLS (SSL) | /cacerts/rds.pem |
The user provided has superuser privileges.
All database connection use SSL (TLS). Every CloudCaptain instances comes with RDS root certificates out of the box.
If your application is based on Spring Boot, Grails, Play or Dropwizard, CloudCaptain will automatically configure your framework's default datasource with the correct database driver class name, URL, user and password.
Evolving your schema works best with Flyway.
We strongly recommend you apply datbase migrations on application startup. You can either use a plugin for your framework of choice or call Flyway programmatically:
Flyway flyway = new Flyway(); flyway.migrate();
Flyway 4.0 and newer comes with out of the box support for CloudCaptain. When running inside a CloudCaptain instance Flyway will automatically pick up the database URL and credentials exposed by CloudCaptain.
These are the default character encodings for the databases created by CloudCaptain:
Database | Character encoding |
---|---|
PostgreSQL | UTF8 |
MySQL | utf8mb4 |
All databases created by CloudCaptain are created with their time zone set to UTC
.
You can manually connect to the correct database for each environment by using the open -db command. This will automatically create a secure connection using your database's native client:
> boxfuse open -db -env=test
Launching psql to access the myuser/myapp PostgreSQL database in the test environment ...
psql (9.4.5, Server 9.4.5)
SSL Connection (Encryption cipher: ECDHE-RSA-AES256-SHA, Bits: 256)
Type „help“ for help.
myapp=>
Alternatively you can obtain the url and credentials of your database for each environment where your app is currently deployed by using the info command.
> boxfuse info -env=test
Info about myuser/myapp in the test environment:
App Type : Single Instance with Zero Downtime updates
App URL : https://myapp-test-myuser.boxfuse.io/
DB Type : PostgreSQL database
DB URL : jdbc:postgresql://boxdb-myuser-test-myapp.ca53c5vrhrzn.eu-central-1.rds.amazonaws.com:5432/myapp
DB Host : boxdb-myuser-test-myapp.ca53c5vrhrzn.eu-central-1.rds.amazonaws.com
DB Port : 5432
DB Database : myapp
DB User : qbGh5bYandLAYiXBHXp5L8jQliU9qwAkEFRf1R7JzJJ3azNwWmauKfYJe1TCoUW
DB Password : JDBsCkFuDUCqLwDhbWZcZWmaeFCN7W8aAIzy0MjYA5ICXKCf3zMO7azw9092VFFqsnKayqWefAaklZchfATAbLsvShdsOWjKJBaU
DB Status : available