diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e630879647405d7d41d198b4c6cfc0c8389723c5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,39 @@
+
+
+https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
+
+Log: /var/discourse/shared/standalone/log/rails/production.log
+
+Usage: launcher COMMAND CONFIG [--skip-prereqs] [--docker-args STRING]
+Commands:
+    start:      Start/initialize a container
+    stop:       Stop a running container
+    restart:    Restart a container
+    destroy:    Stop and remove a container
+    enter:      Use nsenter to get a shell into a container
+    logs:       View the Docker logs for a container
+    bootstrap:  Bootstrap a container for the config based on a template
+    rebuild:    Rebuild a container (destroy old, bootstrap, start new)
+    cleanup:    Remove all containers that have stopped for > 24 hours
+
+Options:
+    --skip-prereqs             Don't check launcher prerequisites
+    --docker-args              Extra arguments to pass when running docker
+
+
+
+Manually create admin:
+
+```
+cd /var/discourse
+./launcher enter app
+rake admin:create
+```
+
+Upgrade: http://172.17.0.1/admin/upgrade
+
+Drupal Integration:
+
+- https://www.drupal.org/project/discourse
+- https://www.drupal.org/project/discourse_sso
+- https://www.drupal.org/node/2880123#comment-12312794
diff --git a/defaults/main.yml b/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..38607144da72653cd6008650afefc9970a471f72
--- /dev/null
+++ b/defaults/main.yml
@@ -0,0 +1 @@
+discourse_git_repo: 'https://github.com/discourse/discourse_docker.git'
diff --git a/meta/main.yml b/meta/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..90005a8ca55c56d66035e250415a02e3d778561d
--- /dev/null
+++ b/meta/main.yml
@@ -0,0 +1,4 @@
+---
+
+dependencies:
+  - { role: docker }
diff --git a/tasks/install.yml b/tasks/install.yml
new file mode 100644
index 0000000000000000000000000000000000000000..41d8a1f2466bff649f1c94fa3cdd707a20ae6424
--- /dev/null
+++ b/tasks/install.yml
@@ -0,0 +1,20 @@
+---
+# file: roles/discourse/tasks/install.yml
+
+- name: "Clone Repository"
+  git:
+    accept_hostkey: yes
+    repo: '{{ discourse_git_repo }}'
+    dest: '/var/discourse'
+  register: discourse_repository
+
+- block:
+
+  - name: "Configure"
+    # /var/discourse/containers/app.yml
+
+  - name: "Install"
+    # /var/discourse/discourse-setup
+    # /var/discourse/launcher rebuild app
+
+  when: discourse_repository.changed
diff --git a/tasks/main.yml b/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..610d18057e5f5da99e3a85b44e339307e6d034b8
--- /dev/null
+++ b/tasks/main.yml
@@ -0,0 +1,12 @@
+---
+# file: roles/discourse/tasks/main.yml
+
+- name: "Docker Discourse"
+  set_fact: role_discourse_started=true
+  tags: always
+
+- block:
+
+  - include_tasks: 'install.yml'
+
+  when: '"discourse" not in excluded_roles'
diff --git a/templates/vhost.conf.jinja2 b/templates/vhost.conf.jinja2
new file mode 100644
index 0000000000000000000000000000000000000000..56592da9386ee9f154633d6c298c897135f02b1b
--- /dev/null
+++ b/templates/vhost.conf.jinja2
@@ -0,0 +1,26 @@
+# See also https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247
+
+<Proxy balancer://unicorns>
+BalancerMember http://127.0.0.1:4000
+</Proxy>
+
+<VirtualHost *:80>
+  ServerName my.example.com
+  CustomLog logs/sites/my.example.com/access_log combined
+  ErrorLog logs/sites/my.example.com/error_log
+  ServerAdmin me@example.com
+
+  DocumentRoot /var/www/my.example.com/htdocs
+  UserDir disabled
+  DirectoryIndex disabled
+
+  <Directory "/var/www/my.example.com/htdocs">
+  AllowOverride All
+  Options -MultiViews
+  Require all granted
+  </Directory>
+
+  RewriteEngine on
+  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
+  RewriteRule ^/(.*)$ balancer://unicorns%{REQUEST_URI} [P,QSA,L]
+</VirtualHost>