Skeller is a skeleton project for deploying services on a Consul/Nomad cluster.
- Vagrant
- Ansible
Clone the project
git clone https://github.com/awesome-algorand/skeller
Spin up the Vagrant cluster
vagrant up
View the services in your browser
- http://localhost:8500 - Consul
- http://localhost:4646 - Nomad
Deploy a job using the admin url: http://localhost:4646/ui/jobs/run
job "lets-go" {
datacenters = ["*"]
group "servers" {
count = 1
network {
port "www" {
to = 8001
}
}
service {
provider = "consul"
port = "www"
}
task "web" {
driver = "docker"
config {
image = "busybox:1"
command = "httpd"
args = ["-v", "-f", "-p", "${NOMAD_PORT_www}", "-h", "/local"]
ports = ["www"]
}
template {
data = <<-EOF
<h1>Hello, Nomad!</h1>
<ul>
<li>Task: {{env "NOMAD_TASK_NAME"}}</li>
<li>Group: {{env "NOMAD_GROUP_NAME"}}</li>
<li>Job: {{env "NOMAD_JOB_NAME"}}</li>
<li>Currently running on port: {{env "NOMAD_PORT_www"}}</li>
</ul>
EOF
destination = "local/index.html"
}
resources {
cpu = 50
memory = 64
}
}
}
}
The orchestrator is a Consul/Nomad cluster that will be used to manage the services.
The compute cluster is a group of machines that will be used to run the services. These services should be distributed across regions and availability zones.
Note
It is up to the user to provision the machines and provide the ssh configurations for ansible
Create an inventory file
# inventory.yaml
compute:
hosts:
us:
ansible_host: [email protected]
ansible_user: ubuntu
eu:
ansible_host: [email protected]
ansible_user: ubuntu
Provision a machine
ansible-playbook -i inventory.yaml playbook.yaml
- Production Deployment
- Marketing Jazz
- Terraform Plans