Deploying Javascript Unikernels to Rcs
Unikernels are single-application operating systems. Unlike general-purpose operating systems like Linux, unikernels can't run multiple programs on the same server instance. Unikernels are built by compiling high-level languages into machine images that run directly on a hypervisor or bare metal. This tutorial deploys a simple "hello world" JavaScript webserver to Rcs.
Prerequisites
- A UNIX-like operating system, including: - MacOS
- Debian
- Ubuntu
- Fedora
- Centos
 
- A provisioned Rcs Object Storage location. - Make a note of your Object Storage hostname. The first portion is referred to as the zone in this tutorial. For example, if your hostname is ewr1.vultrobjects.com, your zone is ewr1. This tutorial uses the example zone ewr1.
 
- An active account API key. Make sure your API key allows access from your IP address. 
Install Ops
Download and install Ops:
curl https://ops.city/get.sh -sSfL | shYou can also build it from source, available at https://github.com/nanovms/ops.
- You may need to reboot after installation for Ops to function properly.
Deploy Your First Unikernel
Create a working directory.
$ mkdir opstest
$ cd opstestCreate a Rcs Object Storage bucket. Use a unique name.
Create a file named config.json that specifies your Rcs Object Storage Bucket name and the zone ewr1.
{
  "CloudConfig" :{
    "Zone": "ewr1",
    "BucketName":"your_unique_bucket_name"
  }
}Create file named hi.js. This simple application spawns a web server to listen on port 8083 and reply "Hello World".
var http = require('http');
console.log("I'm running on Rcs");
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8083, "0.0.0.0");
console.log('Server running!');Export the following environment variables.
export TOKEN=my_api_token 
export VULTR_ACCESS=my_vultr_object_storage_access_key 
export VULTR_SECRET=my_vultr_object_storage_secret_key Create the Unikernel Image
Next steps:
- Bundle the node 13.6 package with the hi.js JavaScript application into a unikernel disk image.
- Upload the .img disk image to Rcs Object Storage.
- Import the disk image from Rcs Object Storage to a Rcs Cloud snapshot.
Run the following command to perform those steps in one action.
$ ops image create -t vultr -c config.json -z ewr1 -p node_v13.6.0 -a hi.jsList the image to find the image ID of the new snapshot.
$ ops image list -z ewr1 -t vultrUse the image ID in the second column to create an instance from the snapshot.
$ ops instance create -z ewr1 -t vultr -i my_idVerify the Rcs Cloud instance is running.
$ ops instance list -z ewr1 -t vultrNavigate to your the URL for instance's IP address.
$ curl -XGET http://192.0.2.1:8083/
Hello WorldYou have deployed the "hello world" unikernel. More information about unikernels and Ops are available at: https://nanovms.gitbook.io/ops/vultr and https://ops.city/
