diff --git a/deploy/ansible/azure/README.md b/deploy/ansible/azure/README.md
new file mode 100644
index 000000000..996a04625
--- /dev/null
+++ b/deploy/ansible/azure/README.md
@@ -0,0 +1,78 @@
+# Deploying Nucypher (worker/staker) to Azure Cloud
+
+
+If you have Ansible setup to run playbooks against the Azure resource API then you can run the `deploy_nucypher_azure_infra.yml`
+
+
+### Setting up a environment for running Ansible Azure
+
+You have 3 options for using Ansible to deploy your infrastructure:
+
+1. Utilize the "cloud shell" within the Azure portal which comes pre-installed with Ansible and your credentials.
+2. Use your own copy of Ansible and install the Azure module (through pip)
+3. Setup your own deployment machine on Ubuntu to run playbooks and deploy stakers/workers.
+
+Option 1 is ready to go, use the play book `deploy_nucypher_azure_infra.yml` followed by the playbooks in the /worker/ folder
+
+For options 2 you will need Ansible (Azure module) installed on your local host (documentation [here](https://docs.ansible.com/ansible/latest/scenario_guides/guide_azure.html)).
+
+For option 3 I've included the following steps below to setup a vanilla Ubuntu node to run Ansible (w/ Azure module), geth, and everything you need to deploy the Ansible playbooks for your Nucypher staker/workers.
+
+(Instructions valid w/ Canonical Ubuntu 16.04/18.04)
+
+
+#### Install virtualenv and activate
+```console
+azureuser@ncdeploy:~$ sudo apt-get update
+azureuser@ncdeploy:~$ sudo apt-get install -y virtualenv
+azureuser@ncdeploy:~$ virtualenv nucypher_ansible
+azureuser@ncdeploy:~$ source nucypher_ansible/bin/activate
+```
+#### Install Ansible (w/ Azure module) inside a virtual environment
+```console
+azureuser@ncdeploy:~$ pip install 'ansible[azure]'
+```
+#### Export environment variables (Azure credentials)
+```console
+azureuser@ncdeploy:~$ export AZURE_CLIENT_ID=''
+azureuser@ncdeploy:~$ export AZURE_SECRET=''
+azureuser@ncdeploy:~$ export AZURE_SUBSCRIPTION_ID=''
+azureuser@ncdeploy:~$ export AZURE_TENANT=''
+```
+#### Create 2GB swap file (for local geth instance)
+```console
+azureuser@ncdeploy:~$ sudo fallocate -l 2G /swapfile
+azureuser@ncdeploy:~$ sudo chmod 600 /swapfile
+azureuser@ncdeploy:~$ sudo mkswap /swapfile
+azureuser@ncdeploy:~$ sudo swapon /swapfile
+azureuser@ncdeploy:~$ sudo cp /etc/fstab /etc/fstab.bak
+azureuser@ncdeploy:~$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
+```
+#### Install geth
+```console
+azureuser@ncdeploy:~$ sudo add-apt-repository -y ppa:ethereum/ethereum
+azureuser@ncdeploy:~$ sudo apt-get update
+azureuser@ncdeploy:~$ sudo apt-get install -y ethereum
+```
+#### Run geth (goerli testnet)
+```console
+azureuser@ncdeploy:~$ nohup geth --goerli --syncmode fast --cache 1024 &
+```
+#### Check geth is finished syncing
+```console
+azureuser@ncdeploy:~$ geth attach ~/.ethereum/goerli/geth.ipc
+(within geth): eth.syncing
+```
+Wait for the result from above to come back as false
+
+#### Run ansible playbook to deploy Nucypher Staker and Worker(s)
+
+Inventory values:
+* Azure Location: West Central US (typcially one of the lowest cost locations)
+* Linux Distribution: Ubuntu 18.04 LTS
+* VM Size: B1s (1 vCPU , 1GB RAM, 4GB Ephemeral Disk)
+* Make sure to update the inventory file with your public key for login.
+
+```console
+azureuser@ncdeploy:~$ ansible-playbook deploy_nucypher_azure_infra.yml -i inventory.yml
+```
diff --git a/deploy/ansible/azure/deploy_nucypher_azure_infra.yml b/deploy/ansible/azure/deploy_nucypher_azure_infra.yml
new file mode 100644
index 000000000..199f828fe
--- /dev/null
+++ b/deploy/ansible/azure/deploy_nucypher_azure_infra.yml
@@ -0,0 +1,85 @@
+- name: Nucypher (staker/worker) VM for Azure
+ hosts: localhost
+ connection: local
+ tasks:
+
+ - name: Resource Group for Nucypher nodes (deployment location is determined below)
+ azure_rm_resourcegroup:
+ name: "{{ resgroup }}"
+ location: "{{ cloudregion }}"
+
+ - name: Virtual Network
+ azure_rm_virtualnetwork:
+ resource_group: "{{ resgroup }}"
+ name: "{{ vnet }}"
+ address_prefixes: "10.0.0.0/16"
+
+ - name: Subnet
+ azure_rm_subnet:
+ resource_group: "{{ resgroup }}"
+ name: "{{ subnet }}"
+ address_prefix: "10.0.1.0/24"
+ virtual_network: "{{ vnet }}"
+
+ - name: Create public IP address
+ azure_rm_publicipaddress:
+ resource_group: "{{ resgroup }}"
+ allocation_method: Static
+ name: "{{ item.ip }}"
+ register: output_ip_address
+ loop: "{{ vmlist }}"
+
+ - name: Allow SSH and Nucypher communication ports in network security group
+ azure_rm_securitygroup:
+ resource_group: "{{ resgroup }}"
+ name: "{{ item.nsg }}"
+ rules:
+ - name: SSH
+ protocol: Tcp
+ destination_port_range: 22
+ access: Allow
+ priority: 1001
+ direction: Inbound
+
+ - name: nucypher_inbound
+ protocol: Tcp
+ destination_port_range: 9151
+ access: Allow
+ priority: 1002
+ direction: Inbound
+
+ - name: nucypher_outbound
+ protocol: Tcp
+ destination_port_range: 9151
+ access: Allow
+ priority: 3002
+ direction: Outbound
+ loop: "{{ vmlist }}"
+
+ - name: Virtual Network VM NIC
+ azure_rm_networkinterface:
+ resource_group: "{{ resgroup }}"
+ name: "{{ item.nic }}"
+ virtual_network: "{{ vnet }}"
+ subnet: "{{ subnet }}"
+ public_ip_name: "{{ item.ip }}"
+ security_group: "{{ item.nsg }}"
+ loop: "{{ vmlist }}"
+
+ - name: Create VM
+ azure_rm_virtualmachine:
+ resource_group: "{{ resgroup }}"
+ name: "{{ item.name }}"
+ vm_size: "{{ item.size }}"
+ admin_username: "{{ user }}"
+ ssh_password_enabled: false
+ ssh_public_keys:
+ - path: "/home/{{ user }}/.ssh/authorized_keys"
+ key_data: "{{ osshpkey }}"
+ network_interfaces: "{{ item.nic }}"
+ image:
+ offer: UbuntuServer
+ publisher: Canonical
+ sku: 18.04-LTS
+ version: latest
+ loop: "{{ vmlist }}"
diff --git a/deploy/ansible/azure/inventory.yml b/deploy/ansible/azure/inventory.yml
new file mode 100644
index 000000000..2681a364c
--- /dev/null
+++ b/deploy/ansible/azure/inventory.yml
@@ -0,0 +1,12 @@
+all:
+ vars:
+ cloudregion: "westcentralus"
+ resgroup: "ncrg"
+ vnet: "ncvnet"
+ subnet: "ncsnet"
+ osshpkey: ""
+ user: "azureuser"
+ vmlist:
+ - { name: "ncstaker", nic: "stakernic", ip: "stakerip", nsg: "stakernsg", size: "Standard_B1s" }
+ - { name: "ncworker1", nic: "ncworker1nic", ip: "ncworker1ip", nsg: "ncworker1nsg", size: "Standard_B1s" }
+ - { name: "ncworker2", nic: "ncworker2nic", ip: "ncworker2ip", nsg: "ncworker2nsg", size: "Standard_B1s" }