Explorar el Código

Create Vagrant + Chef config for setting up ShareLaTeX

James Allen hace 12 años
padre
commit
5933dd60f5

+ 2 - 0
.gitignore

@@ -14,3 +14,5 @@ user_files
 template_files
 
 db.sqlite
+
+.vagrant

+ 52 - 0
Vagrantfile

@@ -0,0 +1,52 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+  config.vm.box = "ubuntu-12.04"
+  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
+
+  config.vm.network :forwarded_port, guest: 3000, host: 3000
+
+  config.ssh.forward_agent = true
+
+  config.vm.provider "virtualbox" do |v|
+    v.memory = 1024
+  end
+
+  config.vm.provision :chef_solo do |chef|
+    chef.cookbooks_path = "chef/cookbooks"
+    chef.add_recipe 'redis-server'
+    chef.add_recipe 'mongodb'
+    chef.add_recipe 'nodejs'
+    chef.add_recipe 'sharelatex'
+
+    # You may also specify custom JSON attributes:
+    chef.json = {}
+  end
+
+  # Enable provisioning with chef server, specifying the chef server URL,
+  # and the path to the validation key (relative to this Vagrantfile).
+  #
+  # The Opscode Platform uses HTTPS. Substitute your organization for
+  # ORGNAME in the URL and validation key.
+  #
+  # If you have your own Chef Server, use the appropriate URL, which may be
+  # HTTP instead of HTTPS depending on your configuration. Also change the
+  # validation key to validation.pem.
+  #
+  # config.vm.provision :chef_client do |chef|
+  #   chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
+  #   chef.validation_key_path = "ORGNAME-validator.pem"
+  # end
+  #
+  # If you're using the Opscode platform, your validator client is
+  # ORGNAME-validator, replacing ORGNAME with your organization name.
+  #
+  # If you have your own Chef Server, the default validation client name is
+  # chef-validator, unless you changed the configuration.
+  #
+  #   chef.validation_client_name = "ORGNAME-validator"
+end

+ 3 - 0
chef/.chef/knife.rb

@@ -0,0 +1,3 @@
+current_dir = File.dirname(__FILE__)
+cookbook_path            ["#{current_dir}/../cookbooks"]
+

+ 12 - 0
chef/cookbooks/mongodb/CHANGELOG.md

@@ -0,0 +1,12 @@
+# CHANGELOG for mongodb
+
+This file is used to list changes made in each version of mongodb.
+
+## 0.1.0:
+
+* Initial release of mongodb
+
+- - -
+Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
+
+The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.

+ 68 - 0
chef/cookbooks/mongodb/README.md

@@ -0,0 +1,68 @@
+mongodb Cookbook
+================
+TODO: Enter the cookbook description here.
+
+e.g.
+This cookbook makes your favorite breakfast sandwhich.
+
+Requirements
+------------
+TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.
+
+e.g.
+#### packages
+- `toaster` - mongodb needs toaster to brown your bagel.
+
+Attributes
+----------
+TODO: List you cookbook attributes here.
+
+e.g.
+#### mongodb::default
+<table>
+  <tr>
+    <th>Key</th>
+    <th>Type</th>
+    <th>Description</th>
+    <th>Default</th>
+  </tr>
+  <tr>
+    <td><tt>['mongodb']['bacon']</tt></td>
+    <td>Boolean</td>
+    <td>whether to include bacon</td>
+    <td><tt>true</tt></td>
+  </tr>
+</table>
+
+Usage
+-----
+#### mongodb::default
+TODO: Write usage instructions for each cookbook.
+
+e.g.
+Just include `mongodb` in your node's `run_list`:
+
+```json
+{
+  "name":"my_node",
+  "run_list": [
+    "recipe[mongodb]"
+  ]
+}
+```
+
+Contributing
+------------
+TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
+
+e.g.
+1. Fork the repository on Github
+2. Create a named feature branch (like `add_component_x`)
+3. Write you change
+4. Write tests for your change (if applicable)
+5. Run the tests, ensuring they all pass
+6. Submit a Pull Request using Github
+
+License and Authors
+-------------------
+Authors: TODO: List authors

+ 8 - 0
chef/cookbooks/mongodb/metadata.rb

@@ -0,0 +1,8 @@
+name             'mongodb'
+maintainer       'ShareLaTeX'
+maintainer_email 'team@sharelatex.com'
+license          'AGPLv3'
+description      'Installs/Configures mongodb'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          '0.1.0'
+depends          'apt'

+ 19 - 0
chef/cookbooks/mongodb/recipes/default.rb

@@ -0,0 +1,19 @@
+#
+# Cookbook Name:: mongodb
+# Recipe:: default
+#
+# Copyright 2014, ShareLaTeX
+#
+
+# See http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
+apt_repository 'mongodb-10gen' do
+  uri          'http://downloads-distro.mongodb.org/repo/ubuntu-upstart'
+  distribution 'dist'
+  components   ['10gen']
+  keyserver    'keyserver.ubuntu.com'
+  key          '7F0CEB10'
+end
+
+package 'mongodb-10gen' do
+  action :install
+end

+ 12 - 0
chef/cookbooks/nodejs/CHANGELOG.md

@@ -0,0 +1,12 @@
+# CHANGELOG for nodejs
+
+This file is used to list changes made in each version of nodejs.
+
+## 0.1.0:
+
+* Initial release of nodejs
+
+- - -
+Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
+
+The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.

+ 68 - 0
chef/cookbooks/nodejs/README.md

@@ -0,0 +1,68 @@
+nodejs Cookbook
+===============
+TODO: Enter the cookbook description here.
+
+e.g.
+This cookbook makes your favorite breakfast sandwhich.
+
+Requirements
+------------
+TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.
+
+e.g.
+#### packages
+- `toaster` - nodejs needs toaster to brown your bagel.
+
+Attributes
+----------
+TODO: List you cookbook attributes here.
+
+e.g.
+#### nodejs::default
+<table>
+  <tr>
+    <th>Key</th>
+    <th>Type</th>
+    <th>Description</th>
+    <th>Default</th>
+  </tr>
+  <tr>
+    <td><tt>['nodejs']['bacon']</tt></td>
+    <td>Boolean</td>
+    <td>whether to include bacon</td>
+    <td><tt>true</tt></td>
+  </tr>
+</table>
+
+Usage
+-----
+#### nodejs::default
+TODO: Write usage instructions for each cookbook.
+
+e.g.
+Just include `nodejs` in your node's `run_list`:
+
+```json
+{
+  "name":"my_node",
+  "run_list": [
+    "recipe[nodejs]"
+  ]
+}
+```
+
+Contributing
+------------
+TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
+
+e.g.
+1. Fork the repository on Github
+2. Create a named feature branch (like `add_component_x`)
+3. Write you change
+4. Write tests for your change (if applicable)
+5. Run the tests, ensuring they all pass
+6. Submit a Pull Request using Github
+
+License and Authors
+-------------------
+Authors: TODO: List authors

+ 8 - 0
chef/cookbooks/nodejs/metadata.rb

@@ -0,0 +1,8 @@
+name             'nodejs'
+maintainer       'YOUR_COMPANY_NAME'
+maintainer_email 'YOUR_EMAIL'
+license          'AGPLv3'
+description      'Installs/Configures nodejs'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          '0.1.0'
+depends          'apt'

+ 24 - 0
chef/cookbooks/nodejs/recipes/default.rb

@@ -0,0 +1,24 @@
+#
+# Cookbook Name:: nodejs
+# Recipe:: default
+#
+# Copyright 2014, ShareLaTeX
+#
+
+# See https://launchpad.net/~chris-lea/+archive/nodejs
+apt_repository 'node.js' do
+  uri          'http://ppa.launchpad.net/chris-lea/node.js/ubuntu'
+  distribution node['lsb']['codename']
+  components   ['main']
+  keyserver    'keyserver.ubuntu.com'
+  key          'C7917B12'
+end
+
+package 'nodejs' do
+  action :install
+end
+
+execute 'install grunt' do
+  command "npm install -g grunt-cli"
+  not_if "npm --no-color -g ls 'grunt-cli' 2> /dev/null | grep 'grunt-cli'"
+end

+ 12 - 0
chef/cookbooks/redis-server/CHANGELOG.md

@@ -0,0 +1,12 @@
+# CHANGELOG for redis
+
+This file is used to list changes made in each version of redis.
+
+## 0.1.0:
+
+* Initial release of redis
+
+- - -
+Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
+
+The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.

+ 68 - 0
chef/cookbooks/redis-server/README.md

@@ -0,0 +1,68 @@
+redis Cookbook
+==============
+TODO: Enter the cookbook description here.
+
+e.g.
+This cookbook makes your favorite breakfast sandwhich.
+
+Requirements
+------------
+TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.
+
+e.g.
+#### packages
+- `toaster` - redis needs toaster to brown your bagel.
+
+Attributes
+----------
+TODO: List you cookbook attributes here.
+
+e.g.
+#### redis::default
+<table>
+  <tr>
+    <th>Key</th>
+    <th>Type</th>
+    <th>Description</th>
+    <th>Default</th>
+  </tr>
+  <tr>
+    <td><tt>['redis']['bacon']</tt></td>
+    <td>Boolean</td>
+    <td>whether to include bacon</td>
+    <td><tt>true</tt></td>
+  </tr>
+</table>
+
+Usage
+-----
+#### redis::default
+TODO: Write usage instructions for each cookbook.
+
+e.g.
+Just include `redis` in your node's `run_list`:
+
+```json
+{
+  "name":"my_node",
+  "run_list": [
+    "recipe[redis]"
+  ]
+}
+```
+
+Contributing
+------------
+TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
+
+e.g.
+1. Fork the repository on Github
+2. Create a named feature branch (like `add_component_x`)
+3. Write you change
+4. Write tests for your change (if applicable)
+5. Run the tests, ensuring they all pass
+6. Submit a Pull Request using Github
+
+License and Authors
+-------------------
+Authors: TODO: List authors

+ 8 - 0
chef/cookbooks/redis-server/metadata.rb

@@ -0,0 +1,8 @@
+name             'redis-server'
+maintainer       'ShareLaTeX'
+maintainer_email 'team@sharelatex.com'
+license          'AGPLv3'
+description      'Installs/Configures redis-server'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          '0.1.0'
+depends          'apt'

+ 20 - 0
chef/cookbooks/redis-server/recipes/default.rb

@@ -0,0 +1,20 @@
+#
+# Cookbook Name:: redis
+# Recipe:: default
+#
+# Copyright 2014, ShareLaTeX
+#
+
+# See https://launchpad.net/~chris-lea/+archive/redis-server
+apt_repository 'redis-server' do
+  uri          'http://ppa.launchpad.net/chris-lea/redis-server/ubuntu'
+  distribution node['lsb']['codename']
+  components   ['main']
+  keyserver    'keyserver.ubuntu.com'
+  key          'C7917B12'
+end
+
+package 'redis-server' do
+  action :upgrade
+  options "--force-yes"
+end

+ 12 - 0
chef/cookbooks/sharelatex/CHANGELOG.md

@@ -0,0 +1,12 @@
+# CHANGELOG for sharelatex
+
+This file is used to list changes made in each version of sharelatex.
+
+## 0.1.0:
+
+* Initial release of sharelatex
+
+- - -
+Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
+
+The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.

+ 68 - 0
chef/cookbooks/sharelatex/README.md

@@ -0,0 +1,68 @@
+sharelatex Cookbook
+===================
+TODO: Enter the cookbook description here.
+
+e.g.
+This cookbook makes your favorite breakfast sandwhich.
+
+Requirements
+------------
+TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.
+
+e.g.
+#### packages
+- `toaster` - sharelatex needs toaster to brown your bagel.
+
+Attributes
+----------
+TODO: List you cookbook attributes here.
+
+e.g.
+#### sharelatex::default
+<table>
+  <tr>
+    <th>Key</th>
+    <th>Type</th>
+    <th>Description</th>
+    <th>Default</th>
+  </tr>
+  <tr>
+    <td><tt>['sharelatex']['bacon']</tt></td>
+    <td>Boolean</td>
+    <td>whether to include bacon</td>
+    <td><tt>true</tt></td>
+  </tr>
+</table>
+
+Usage
+-----
+#### sharelatex::default
+TODO: Write usage instructions for each cookbook.
+
+e.g.
+Just include `sharelatex` in your node's `run_list`:
+
+```json
+{
+  "name":"my_node",
+  "run_list": [
+    "recipe[sharelatex]"
+  ]
+}
+```
+
+Contributing
+------------
+TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
+
+e.g.
+1. Fork the repository on Github
+2. Create a named feature branch (like `add_component_x`)
+3. Write you change
+4. Write tests for your change (if applicable)
+5. Run the tests, ensuring they all pass
+6. Submit a Pull Request using Github
+
+License and Authors
+-------------------
+Authors: TODO: List authors

+ 7 - 0
chef/cookbooks/sharelatex/metadata.rb

@@ -0,0 +1,7 @@
+name             'sharelatex'
+maintainer       'YOUR_COMPANY_NAME'
+maintainer_email 'YOUR_EMAIL'
+license          'All rights reserved'
+description      'Installs/Configures sharelatex'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          '0.1.0'

+ 107 - 0
chef/cookbooks/sharelatex/providers/app.rb

@@ -0,0 +1,107 @@
+action :start do
+	package "git"
+	package "build-essential"
+
+	r = new_resource
+
+	deploy_to = "/var/www/" + r.name
+
+	node_environment = "production"
+
+	directory deploy_to do
+		user r.user if r.user
+		recursive true
+	end
+
+	env = {
+		"HOME" => deploy_to
+	}
+
+	directory "#{deploy_to}/releases" do
+		user r.user if r.user
+		recursive true
+	end
+
+	shared_dir = "#{deploy_to}/shared"
+	directory shared_dir do
+		user r.user if r.user
+		recursive true
+	end
+	directory "#{shared_dir}/config" do
+		user r.user if r.user
+		recursive true
+	end
+	directory "#{shared_dir}/log" do
+		user r.user if r.user
+		recursive true
+	end
+
+	deploy_revision deploy_to do
+		repository r.repository
+		revision r.revision
+		user r.user if r.user
+
+		purge_before_symlink [
+			"log", "config", "node_modules"
+		]
+		create_dirs_before_symlink []
+		symlinks({
+			"log"    => "log",
+			"config" => "config"
+		})
+		symlink_before_migrate({
+			"node_modules" => "node_modules"
+		})
+
+		environment env
+
+		migrate true
+		migration_command "npm install; grunt install"
+
+		before_migrate do
+			directory "#{deploy_to}/shared/node_modules" do
+				user r.user if r.user
+				recursive true
+			end
+		end
+
+		#notifies :restart, "service[#{r.name}]"
+	end
+
+	file "/etc/init/#{r.name}.conf" do
+		content <<-EOS
+			description "#{r.name}"
+			author      "ShareLaTeX <team@sharelatex.com>"
+
+			start on started mountall
+			stop on shutdown
+
+			respawn
+
+			limit nofile 8192 8192
+			
+			script
+				echo $$ > /var/run/#{r.name}.pid
+				chdir #{deploy_to}/current
+				exec sudo -u #{r.user} env NODE_ENV=#{node_environment} SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee node app.js >> log/production.log
+			end script
+		EOS
+	end
+
+	service "#{r.name}" do
+		provider Chef::Provider::Service::Upstart
+		action :start
+	end
+
+	file "/etc/logrotate.d/#{r.name}" do
+		content <<-EOS
+			#{deploy_to}/shared/log/*.log {
+				rotate 7
+				size 5M
+				missingok
+				compress
+				copytruncate
+			}
+		EOS
+	end
+end

+ 38 - 0
chef/cookbooks/sharelatex/recipes/default.rb

@@ -0,0 +1,38 @@
+#
+# Cookbook Name:: sharelatex
+# Recipe:: default
+#
+# Copyright 2014, ShareLaTeX
+#
+
+directory "/etc/sharelatex"
+
+template "/etc/sharelatex/settings.coffee" do
+	mode 0400
+	user "www-data"
+end
+
+sharelatex_app "web-sharelatex" do
+	repository "https://github.com/sharelatex/web-sharelatex.git"
+	revision   "master"
+end
+
+sharelatex_app "document-updater-sharelatex" do
+	repository "https://github.com/sharelatex/document-updater-sharelatex.git"
+	revision   "master"
+end
+
+sharelatex_app "filestore-sharelatex" do
+	repository "https://github.com/sharelatex/filestore-sharelatex.git"
+	revision   "master"
+end
+
+sharelatex_app "track-changes-sharelatex" do
+	repository "https://github.com/sharelatex/track-changes-sharelatex.git"
+	revision   "master"
+end
+
+sharelatex_app "clsi-sharelatex" do
+	repository "https://github.com/sharelatex/clsi-sharelatex.git"
+	revision   "master"
+end

+ 11 - 0
chef/cookbooks/sharelatex/resources/app.rb

@@ -0,0 +1,11 @@
+actions :start
+
+attribute :revision, :kind_of => String, :default => "master"
+attribute :repository, :kind_of => String
+attribute :user, :kind_of => String, :default => "www-data"
+
+def initialize(*args)
+	super
+	@action = :start
+end
+

+ 268 - 0
chef/cookbooks/sharelatex/templates/default/settings.coffee.erb

@@ -0,0 +1,268 @@
+Path = require('path')
+http = require('http')
+http.globalAgent.maxSockets = 300
+
+# Make time interval config easier.
+seconds = 1000
+minutes = 60 * seconds
+
+# These credentials are used for authenticating api requests
+# between services that may need to go over public channels
+httpAuthUser = "sharelatex"
+httpAuthPass = "password"
+httpAuthUsers = {}
+httpAuthUsers[httpAuthUser] = httpAuthPass
+
+sessionSecret = "secret-please-change"
+
+module.exports =
+	# File storage
+	# ------------
+	#
+	# ShareLaTeX needs somewhere to store binary files like images.
+	# There are currently two options:
+	#     Your local filesystem (the default)
+	#     Amazon S3
+	filestore:
+		# which backend persistor to use.
+		# choices are 
+		# s3 - Amazon S3
+		# fs - local filesystem
+		backend: "fs"	
+		stores:
+			# where to store user and template binary files
+			#
+			# For Amazon S3 this is the bucket name to store binary files
+			#
+			# For local filesystem this is the directory to store the files in.
+			# This path must exist, not be tmpfs and be writable to by the user sharelatex is run as.
+			user_files: Path.resolve(__dirname + "/../user_files")
+		# Uncomment if you need to configure your S3 credentials
+		# s3:
+		# 	# if you are using S3, then fill in your S3 details below
+		# 	key: ""
+		# 	secret: ""
+
+	# Databases
+	# ---------
+	mongo:
+		url : 'mongodb://127.0.0.1/sharelatex'
+
+	redis:
+		web:
+			host: "localhost"
+			port: "6379"
+			password: ""
+
+		api:
+			host: "localhost"
+			port: "6379"
+			password: ""
+
+	mysql:
+		clsi:
+			database: "clsi"
+			username: "clsi"
+			password: ""
+			dialect: "sqlite"
+			storage: Path.resolve(__dirname + "/../db.sqlite")
+
+	# Service locations
+	# -----------------
+
+	# Configure which ports to run each service on. Generally you
+	# can leave these as they are unless you have some other services
+	# running which conflict, or want to run the web process on port 80.
+	internal:
+		web:
+			port: webPort = 3000
+			host: "localhost"
+		documentupdater:
+			port: docUpdaterPort = 3003
+			host: "localhost"
+		clsi:
+			port: clsiPort = 3013
+			host: "localhost"
+		filestore:
+			port: filestorePort = 3009
+			host: "localhost"
+		trackchanges:
+			port: trackchangesPort = 3015
+			host: "localhost"
+
+	# Tell each service where to find the other services. If everything
+	# is running locally then this is easy, but they exist as separate config
+	# options incase you want to run some services on remote hosts.
+	apis:
+		web:
+			url: "http://localhost:#{webPort}"
+			user: httpAuthUser
+			pass: httpAuthPass
+		documentupdater:
+			url : "http://localhost:#{docUpdaterPort}"
+		clsi:
+			url: "http://localhost:#{clsiPort}"
+		filestore:
+			url: "http://localhost:#{filestorePort}"
+		trackchanges:
+			url: "http://localhost:#{trackchangesPort}"
+		thirdPartyDataStore:
+			url : "http://localhost:3002"
+			emptyProjectFlushDelayMiliseconds: 5 * seconds
+		tags:
+			url :"http://localhost:3012"
+		spelling:
+			url : "http://localhost:3005"
+		versioning:
+			snapshotwaitms:3000
+			url: "http://localhost:4000"
+			username: httpAuthUser
+			password: httpAuthPass
+		recurly:
+			privateKey: ""
+			apiKey: ""
+			subdomain: ""
+		chat:
+			url: "http://localhost:3010"
+		templates:
+			port: 3007
+		blog:
+			port: 3008
+		templates_api:
+			url: "http://localhost:3007"
+
+	# Where your instance of ShareLaTeX can be found publically. Used in emails
+	# that are sent out, generated links, etc.
+	siteUrl : 'http://localhost:3000'
+
+	# Same, but with http auth credentials.
+	httpAuthSiteUrl: 'http://#{httpAuthUser}:#{httpAuthPass}@localhost:3000'
+
+	# Security
+	# --------
+	security:
+		sessionSecret: sessionSecret
+
+	httpAuthUsers: httpAuthUsers
+
+	# Default features
+	# ----------------
+	#
+	# You can select the features that are enabled by default for new
+	# new users.
+	defaultFeatures: defaultFeatures =
+		collaborators: -1
+		dropbox: true
+		versioning: true
+
+	plans: plans = [{
+		planCode: "personal"
+		name: "Personal"
+		price: 0
+		features: defaultFeatures
+	}]
+
+	# Spelling languages
+	# ------------------
+	#
+	# You must have the corresponding aspell package installed to 
+	# be able to use a language.
+	languages: [
+		{name: "English", code: "en"}
+	]
+
+	# Email support
+	# -------------
+	#
+	#	ShareLaTeX uses nodemailer (http://www.nodemailer.com/) to send transactional emails.
+	#	To see the range of transport and options they support, see http://www.nodemailer.com/docs/transports
+	#email:
+	# Who should emails be from by default?
+	#	fromAddress: ""
+	# The default replyTo field, if it should be set
+	#	replyTo: ""
+	#	lifecycle: false
+	## Example transport and parameter settings for Amazon SES
+	#	transport: "SES"
+	#	parameters:
+	#		AWSAccessKeyID: ""
+	#		AWSSecretKey: ""
+
+
+	# Third party services
+	# --------------------
+	#
+	# ShareLaTeX's regular newsletter is managed by Markdown mail. Add your
+	# credentials here to integrate with this.
+	# markdownmail:
+	# 	secret: ""
+	# 	list_id: ""
+	#
+	# Fill in your unique token from various analytics services to enable
+	# them.
+	# analytics:
+	# 	mixpanel:
+	# 		token: ""
+	# 	ga:
+	# 		token: ""
+	# 	heap:
+	# 		token: ""
+	# 
+	# ShareLaTeX's help desk is provided by tenderapp.com
+	# tenderUrl: ""
+	#
+
+	# Production Settings
+	# -------------------
+
+	# Should javascript assets be served minified or not. Note that you will
+	# need to run `grunt compile:minify` within the web-sharelatex directory
+	# to generate these.
+	useMinifiedJs: false
+
+	# Should static assets be sent with a header to tell the browser to cache
+	# them.
+	cacheStaticAssets: false
+
+	# If you are running ShareLaTeX over https, set this to true to send the
+	# cookie with a secure flag (recommended).
+	secureCookie: false
+
+	# Internal configs
+	# ----------------
+	path:
+		# If we ever need to write something to disk (e.g. incoming requests
+		# that need processing but may be too big for memory, then write
+		# them to disk here).
+		dumpFolder: Path.resolve "data/dumpFolder"
+		# Where to write the project to disk before running LaTeX on it
+		compilesDir:  Path.resolve(__dirname + "/../compiles")
+		# Where to cache downloaded URLs for the CLSI
+		clsiCacheDir: Path.resolve(__dirname + "/../cache")
+	
+	# Automatic Snapshots
+	# -------------------
+	automaticSnapshots:
+		# How long should we wait after the user last edited to 
+		# take a snapshot?
+		waitTimeAfterLastEdit: 5 * minutes
+		# Even if edits are still taking place, this is maximum
+		# time to wait before taking another snapshot.
+		maxTimeBetweenSnapshots: 30 * minutes
+
+	# Smoke test
+	# ----------
+	# Provide log in credentials and a project to be able to run
+	# some basic smoke tests to check the core functionality.
+	#
+	# smokeTest:
+	# 	user: ""
+	# 	password: ""
+	# 	projectId: ""
+
+	# Filestore health check
+	# ----------------------
+	# Project and file details to check in filestore when calling /health_check
+	# health_check:
+	# 	project_id: ""
+	# 	file_id: ""