diff --git a/deployable-website/defaults/main.yml b/deployable-website/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c23af32ed334066e969ff39750192610cb949aae
--- /dev/null
+++ b/deployable-website/defaults/main.yml
@@ -0,0 +1,6 @@
+---
+
+deployable_websites: []
+# - name: "name"
+#   pubkey: "ssh-…"
+#   subdirs: []
diff --git a/deployable-website/tasks/main.yml b/deployable-website/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f734f684f841d68fb126cbedb71f27f785085ddb
--- /dev/null
+++ b/deployable-website/tasks/main.yml
@@ -0,0 +1,7 @@
+---
+
+- include_tasks: website.yml
+  with_items: "{{deployable_websites}}"
+  loop_control:
+    loop_var: website
+    label: "{{website.name}}"
diff --git a/deployable-website/tasks/website.yml b/deployable-website/tasks/website.yml
new file mode 100644
index 0000000000000000000000000000000000000000..68f89384dad6050b29849ec67257babdf8d19faf
--- /dev/null
+++ b/deployable-website/tasks/website.yml
@@ -0,0 +1,59 @@
+---
+
+- name: create a group
+  group:
+    name: "{{website.name}}"
+    system: true
+    state: present
+
+- name: create a user
+  user:
+    name: "{{website.name}}"
+    group: "{{website.name}}"
+    system: true
+    home: "/var/www/{{website.name}}"
+    shell: /bin/bash
+    createhome: false
+    state: present
+
+- name: create a home directory
+  file:
+    path: "/var/www/{{website.name}}"
+    state: "directory"
+    owner: "{{website.name}}"
+    group: "{{website.name}}"
+    mode: "0755"
+
+- name: create an ssh directory
+  file:
+    path: "/var/www/{{website.name}}/.ssh"
+    state: "directory"
+    owner: "{{website.name}}"
+    group: "{{website.name}}"
+    mode: "0755"
+
+- name: create a deploy directory
+  file:
+    path: "/var/www/{{website.name}}/deploy"
+    state: "directory"
+    owner: "{{website.name}}"
+    group: "{{website.name}}"
+    mode: "0755"
+
+- name: authorize the deploy key
+  template:
+    src: "authorized_keys"
+    dest: "/var/www/{{website.name}}/.ssh/authorized_keys"
+    owner: "{{website.name}}"
+    group: "{{website.name}}"
+    mode: "0644"
+
+- name: create deploy subdirectories
+  file:
+    path: "/var/www/{{website.name}}/deploy/{{item}}"
+    state: "directory"
+    owner: "{{website.name}}"
+    group: "{{website.name}}"
+    mode: "0755"
+  with_items: "{{website.subdirs|default([])}}"
+
diff --git a/deployable-website/templates/authorized_keys b/deployable-website/templates/authorized_keys
new file mode 100644
index 0000000000000000000000000000000000000000..090be19b98ff9202d05e19e9e5edbcf6ede5cd3d
--- /dev/null
+++ b/deployable-website/templates/authorized_keys
@@ -0,0 +1 @@
+{{website.pubkey}}