Skip to content

badri/terra-app

 
 

Repository files navigation

Terra

Terra command line interface

Community

Please join the chat on Gitter. We want as much feedback as possible!

Join the chat at https://gitter.im/opendevshop/devshop

Documentation & Issues

Read the Docs or help improve the docs.

Issues and Story Boarding

Coding Standards

As a symfony app, we are following PSR-2 Coding Standards.

Use 4 spaces for indentation, and follow all the other rules specified at http://www.php-fig.org/psr/psr-2/

Example Project: 18F Agile BPA Prototype

NuCivic submitted a working prototype for the 18F Agile BPA.

We used Terra as the recommended method for recreating the site on another server.

See the instructions on setting up http://openfda.nucivic.build on another server using Terra.

Terra Server

The "Terra Server" project serves as a web based interface for Terra. It is built on Drupal 8.

See the terra-server GitHub repo for more information.

Origin

Terra is the spiritual successor to Aegir & DevShop, the Drupal site hosting platforms. It came from the idea that we could benefit from starting over.

The feeling was that with modern libraries like symfony, ansible, and docker we would be able to do a lot quickly, and, well I've been able to do a lot, pretty quickly.

Now I am on a mission to call everyone to action to work behind a common tool for us all.

Purpose

To make having a website as easy as possible throughout it's entire lifetime, from localhost through large scale production, through entirely open source software.

Terra is a human interface for working on, deploying, testing, and scaling web software projects.

Terra makes it quick and painless to manage your projects and environments.

Push a button to get a testing infrastructure.

"Apps"

An "App" is your website. It is the source code for your project. Terra knows the git URL and (will) know the available branches and tags. Terra will help you update your app from it's upstream repository using git.

"Environment"

The Environment is all of the systems needed to run the source code.

The "EnvironmentFactory" class will be pluggable. Out of the box it provides a working docker cluster, but we can extend it to work with a "multiple apache vhost" model or with a different container provider.

Users will be able to use terra to control environments hosted by multiple hosting providers, including localhost all through the same interface.

Community & Collaboration is Key

We wish to make this tool work for everyone. We wish to get feedback from all parties interested in solving these problems in order to prioritize what to work on.

Please join us in the Issue Queues on GitHub and the chat rooms on gitter.

Scalable Out of the Box

We wanted to start from scalable. Terra's purpose is to make scaling a push button affair.

Currently Terra uses Docker and Docker compose to stand up and scale websites.

This makes it easy to get environments running quickly on hosted servers or on local computers for development.

Planning

See https://huboard.com/terra-ops/terra-app/ for the user story board.

I am going to direct planning in an agile way as much as possible. Please post as much feedback as you can in the issue queues.

Requirements

  • docker
  • docker-compose

Commands

terra status

List all apps on this system.

terra app:add

Add a new app to the system.

Currently only Drupal sites are supported.

terra app:remove

Remove an app from the system

terra environment:add

Add an environment for an app.

terra environment:remove

Remove an environment.

terra environment:enable

Runs docker-compose up to initiate an environment.

terra environment:status

Provides status information about an environment, including path and URL.

terra environment:scale

Set the number of "app" containers. This command is a wrapper for docker compose app=5.

Vagrant

There is a Vagrantfile in the repo that can be used to fire up a linux server with Terra installed.

Use the vagrant plugin "vagrant-hostsupdater" to automatically set your /etc/hosts file for the VM:

$ vagrant plugin install vagrant-hostsupdater

History

Some of the R&D for Terra happened in a project called "director": https://github.com/jonpugh/director-drupal

Director is now deprecated.

Comparisons to Kalabox

There is a striking similarity to this project and Kalabox.

We love Kalabox and the Kalamuna team, but there are a few key differences:

  1. Terra is designed for all things: local development, testing, and production.
  2. Terra is written in PHP & Symfony: Kalabox is written in Node JS
  3. Terra is a proposed platform to power the future of Aegir & devshop. We hope to recruit a large community from those tools.
  4. Terra currently extends the kalabox/drush container to offer a container to SSH into.

We hope to collaborate with them on as much as possible.

Releases

No releases published

Packages

No packages published

Languages

  • PHP 97.4%
  • Shell 2.6%