This tutorial introduces some basic concepts and takes you through the basic steps for using Ravello to create and publish a multi-VM application, configure services and the connections between them, and view and edit your VM networks.
In this tutorial, you will:
- Add a webserver, install Apache and configure its external supplied service on port 80;
- Add a database server, install Postgres and configure its supplied service on port 5432;
- Connect the two VMs and their services.
Part 1 – Create and Publish a Multi-VM Application
Let’s start out by describing what we mean by an application. In our case, an application is a group of VMs along with the network and storage configuration. These VMs provide services to each other and consume services from each other.
For example, let’s assume you want to build and publish a multi-VM application – for example, a simple web server connected to a DB. Let’s create the application from scratch using VMs from the VM library.
1. First, in Ravello’s Application page, click Create Application to create your new application. In this tutorial, we will call our application “MySimpleApp”.
2. In the design tab that opens automatically, Application: MySimpleApp,
let’s drag any two vanilla VMs from our public VM Library onto the canvas.
3. In the design canvas that opens automatically, Application: MySimpleApp, let's drag any two vanilla VMs from
our public VM Library onto the canvas.
4. Next, click on the Publish button .
5. Select the optimization method, the cloud provider (Amazon, for example), and geographic zone, then click
Publish to deploy the application.
The VMs boot up in the cloud (this may take a few minutes).
Part 2 – SSH and other Services
Now, let’s SSH into our VM. In order to do that, we need the webserver’s public DNS name. Let’s get that by selecting the application in the Applications list (its details are displayed below the list).
Note: An SSH service is defined by default (we describe services later on).
To SSH into our application:
- Copy the Public DNS name of the VM.
- Open PuTTY (or any other SSH client), and SSH to the public DNS name.
- Install the webserver of your choice, for example, by entering the following command in SSH: sudo apt-get install apache2
OK. So now we are installing Apache. We will need to connect to it from the outside – which means that our webserver needs to provide an HTTP service over port 80.
But, before we do that, let’s talk about services.
Services are what your VMs consume and provide. You don’t have to define them, but you will see that it helps do some interesting stuff.
These services are by default internal to the application because your application is running in its own isolated network. We can also decide to make a service publicly accessible, or “external”. For example, a web server can provide or supply an external HTTP service on port 80.
When we add a service to a VM, the system is not really doing anything, or changing the VM in any way. It’s simply a mechanism that adds some metadata to the VM that allows the VM to announce that it provides that service.
Now back to our application –
You may have noticed that we already have a defined EXTERNAL SSH service on our webserver, which is what allowed us to connect to it. Now let’s also define the HTTP service.
To add our services:
- On the design canvas, select the webserver and select the Services tab in the VM details pane. To add a supplied interface, click + Add in the Supplied Services area. A new entry open in the Supplied Services list. Define the interface as External (Yes) and assign it to port 80.
- Click to commit these changes to the application that’s already running in the cloud.
Now let’s do the same for our database. In this example, we will install Postgres. So we can SSH into it, and do the same “sudo apt-get install postgresql” and define a service over port 5432.
3. Back on our canvas, add a supplied service to the DB.
Make the service Internal, and change the port to 5432.
Part 3 – Connecting Services and Ports
Let’s consider the concept of a supplied and required (consumed) services. In our case, the webserver will consume a database service on port 5432 from a specific DNS name. For example, my webserver will be looking for a database called MyDB on port 5432. So let’s go and connect them.
- In the Supplied SI tab for the supplied service on the database, add MyDB as the host name (once we implement it in the required service it will need to move there).
- On the canvas, add a required service to the webserver.
- To manually connect a supplied service interface to a required service interface, select one interface, then click and drag the cursor to the second interface. A connecting line is added to the blueprint.
- Simply click to commit these changes to the application that’s already running in the cloud.
As you can see, we were working on a live application instance.
- You can use this system to collaborate with others and rapidly build prototypes in an iterative manner.
- In fact, you can even save the images to a library so that they can be used as building blocks later for other apps.
- Or you can take the whole application and save it as a blueprint and other people (for example, your QA team) can fire up complete application instances based on this blueprint.
- You can archive multiple versions of your application, etc.