diff --git a/.gitignore b/.gitignore
index f874ec73751183e0ed0761b27b6ba0dad4d727ed..1e4d53f6b3827038da62cc6bf67c784865fcc8d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ document-updater
 clsi
 filestore
 track-changes
+docstore
 
 compiles
 cache
diff --git a/Gruntfile.coffee b/Gruntfile.coffee
index b732143aa46c984e280781e75abb34885ae11e16..add7904afbf086181ef186e3c58432a60b96c9df 100644
--- a/Gruntfile.coffee
+++ b/Gruntfile.coffee
@@ -111,6 +111,9 @@ module.exports = (grunt) ->
 		Helpers.checkMake @async()
 	grunt.registerTask "check", "Check that you have the required dependencies installed", ["check:redis", "check:latexmk", "check:s3", "check:fs"]
 
+	grunt.registerTask "build_deb", "Build an installable .deb file from the current directory", () ->
+		Helpers.buildDeb @async()
+
 	Helpers =
 		installService: (repo_src, dir, callback = (error) ->) ->
 			Helpers.cloneGitRepo repo_src, dir, (error) ->
@@ -302,6 +305,69 @@ module.exports = (grunt) ->
 					grunt.log.write "OK."
 					return callback()
 
+		buildDeb: (callback = (error) ->) ->
+			# TODO: filestore uses local 'uploads' directory, not configurable in settings
+			command = ["fpm", "-s", "dir", "-t", "deb", "-n", "sharelatex", "-v", "0.0.1", "--verbose"]
+			command.push(
+				"--maintainer", "'ShareLaTeX <team@sharelatex.com>'"
+				"--config-files", "/etc/sharelatex/settings.coffee",
+				"--directories",  "/var/data/sharelatex"
+				"--directories",  "/var/log/sharelatex"
+			)
+
+			command.push(
+				"--depends", "'redis-server > 2.6.12'"
+				"--depends", "'mongodb-10gen > 2.4.0'"
+				"--depends", "'nodejs > 0.10.0'"
+			)
+
+			template = fs.readFileSync("package/upstart/sharelatex-template").toString()
+			for service in SERVICES
+				fs.writeFileSync "package/upstart/sharelatex-#{service.name}", template.replace(/SERVICE/g, service.name)
+				command.push(
+					"--deb-upstart", "package/upstart/sharelatex-#{service.name}"
+				)
+
+			after_install_script = """
+				#!/bin/sh
+				sudo adduser --system --group --home /var/www/sharelatex --no-create-home sharelatex
+
+				mkdir -p /var/log/sharelatex
+				chown sharelatex:sharelatex /var/log/sharelatex
+
+			"""
+
+			for dir in ["user_files", "uploads", "compiles", "cache", "dump"]
+				after_install_script += """
+					mkdir -p /var/data/sharelatex/#{dir}
+					chown sharelatex:sharelatex /var/data/sharelatex/#{dir}
+					
+				"""
+
+			for service in SERVICES
+				after_install_script += "service sharelatex-#{service.name} restart\n"
+			fs.writeFileSync "package/scripts/after_install.sh", after_install_script
+			command.push("--after-install", "package/scripts/after_install.sh")
+
+			command.push("--exclude", "'**/.git'")
+			for path in ["filestore/user_files", "filestore/uploads", "clsi/cache", "clsi/compiles"]
+				command.push "--exclude", path
+
+			for service in SERVICES
+				command.push "#{service.name}=/var/www/sharelatex/"
+
+			command.push(
+				"package/config/settings.coffee=/etc/sharelatex/settings.coffee"
+			)
+			console.log command.join(" ")
+			exec command.join(" "), (error, stdout, stderr) ->
+				return callback(error) if error?
+				console.log stdout
+				console.error stderr if stderr?
+				callback()
+
+			
+
 
 
 
diff --git a/package/scripts/after_install.sh b/package/scripts/after_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..e1dc6ff6fa5d472d6e27b11179d312063414009c
--- /dev/null
+++ b/package/scripts/after_install.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+sudo adduser --system --group --home /var/www/sharelatex --no-create-home sharelatex
+
+mkdir -p /var/log/sharelatex
+chown sharelatex:sharelatex /var/log/sharelatex
+mkdir -p /var/data/sharelatex/user_files
+chown sharelatex:sharelatex /var/data/sharelatex/user_files
+mkdir -p /var/data/sharelatex/uploads
+chown sharelatex:sharelatex /var/data/sharelatex/uploads
+mkdir -p /var/data/sharelatex/compiles
+chown sharelatex:sharelatex /var/data/sharelatex/compiles
+mkdir -p /var/data/sharelatex/cache
+chown sharelatex:sharelatex /var/data/sharelatex/cache
+mkdir -p /var/data/sharelatex/dump
+chown sharelatex:sharelatex /var/data/sharelatex/dump
+service sharelatex-web restart
+service sharelatex-document-updater restart
+service sharelatex-clsi restart
+service sharelatex-filestore restart
+service sharelatex-track-changes restart
+service sharelatex-docstore restart
diff --git a/package/upstart/sharelatex-clsi b/package/upstart/sharelatex-clsi
new file mode 100644
index 0000000000000000000000000000000000000000..3dfe85b14a2ff70bbb483cf50c77d7ffbb724a6b
--- /dev/null
+++ b/package/upstart/sharelatex-clsi
@@ -0,0 +1,19 @@
+description "sharelatex-clsi"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-clsi.pid
+	chdir /var/www/sharelatex/clsi
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/clsi.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-docstore b/package/upstart/sharelatex-docstore
new file mode 100644
index 0000000000000000000000000000000000000000..542fe550adf34699dd89b1b99eeb55a9c73c4899
--- /dev/null
+++ b/package/upstart/sharelatex-docstore
@@ -0,0 +1,19 @@
+description "sharelatex-docstore"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-docstore.pid
+	chdir /var/www/sharelatex/docstore
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/docstore.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-document-updater b/package/upstart/sharelatex-document-updater
new file mode 100644
index 0000000000000000000000000000000000000000..ef3113603142f5a88dd04a7022d559a50431ee18
--- /dev/null
+++ b/package/upstart/sharelatex-document-updater
@@ -0,0 +1,19 @@
+description "sharelatex-document-updater"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-document-updater.pid
+	chdir /var/www/sharelatex/document-updater
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/document-updater.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-filestore b/package/upstart/sharelatex-filestore
new file mode 100644
index 0000000000000000000000000000000000000000..6f5c73bc4fff0d6c82f1ae23e4144d6cb7f176e6
--- /dev/null
+++ b/package/upstart/sharelatex-filestore
@@ -0,0 +1,19 @@
+description "sharelatex-filestore"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-filestore.pid
+	chdir /var/www/sharelatex/filestore
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/filestore.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-template b/package/upstart/sharelatex-template
new file mode 100644
index 0000000000000000000000000000000000000000..f9ed4c6a93b23cb2e556a70e987c53f86359dba0
--- /dev/null
+++ b/package/upstart/sharelatex-template
@@ -0,0 +1,19 @@
+description "sharelatex-SERVICE"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-SERVICE.pid
+	chdir /var/www/sharelatex/SERVICE
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/SERVICE.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-track-changes b/package/upstart/sharelatex-track-changes
new file mode 100644
index 0000000000000000000000000000000000000000..2b3b61dfd10ee47cf83b97c20153ae8208c5453c
--- /dev/null
+++ b/package/upstart/sharelatex-track-changes
@@ -0,0 +1,19 @@
+description "sharelatex-track-changes"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-track-changes.pid
+	chdir /var/www/sharelatex/track-changes
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/track-changes.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-web b/package/upstart/sharelatex-web
new file mode 100644
index 0000000000000000000000000000000000000000..86d83bba788133e6505eba49e79b07e57224374e
--- /dev/null
+++ b/package/upstart/sharelatex-web
@@ -0,0 +1,19 @@
+description "sharelatex-web"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-web.pid
+	chdir /var/www/sharelatex/web
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/web.log 2>&1
+end script