소스 검색

Merge branch 'master' of https://github.com/sharelatex/sharelatex

Henry Oswald 11 년 전
부모
커밋
dae47efa1c

+ 20 - 0
CHANGELOG.md

@@ -1,3 +1,23 @@
+v0.1.4
+------
+
+* Move to a private registration scheme where users must be added by an admin.
+* Proxy websockets connection through web to real-time service so no websocketsUrl parameter is needed.
+* Use worker aspell processes in spelling to prevent excessing forking.
+* Properly clean up after long running ImageMagick conversions in the filestore.
+* Allow a configurable app name and email contact address.
+* Switch to new PDF viewer with partial page loading for immediate preview of visible page.
+
+v0.1.3
+------
+
+* Fix bug with large files being corrupted when downloaded.
+* Update Ace editor to lastest release.
+* Lots of added null checks in the front-end javascript.
+* Don't crash if 'unzip' program isn't present.
+* Allow track-changes history to be packed into compressed 'packs'. This must be done manually for now.
+* Escape any shell special characters in the CLSI root path.
+
 v0.1.2
 ------
 

+ 2 - 90
Gruntfile.coffee

@@ -161,8 +161,6 @@ 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", "check:aspell"]
 
-	grunt.registerTask "build:deb", "Build an installable .deb file from the current directory", () ->
-		Helpers.buildDeb @async()
 	grunt.registerTask "build:upstart_scripts", "Create upstart scripts for each service", () ->
 		Helpers.buildUpstartScripts()
 
@@ -457,93 +455,7 @@ module.exports = (grunt) ->
 					return callback()
 
 		buildUpstartScripts: () ->
-			template = fs.readFileSync("package/upstart/sharelatex-template").toString()
+			template = fs.readFileSync("package/upstart/sharelatex-template.conf").toString()
 			for service in SERVICES
-				fs.writeFileSync "package/upstart/sharelatex-#{service.name}", template.replace(/__SERVICE__/g, service.name)
-
-		buildPackageSettingsFile: () ->
-			config = fs.readFileSync("config/settings.development.coffee.example").toString()
-			config = config.replace /DATA_DIR.*/, "DATA_DIR = '/var/lib/sharelatex/data'"
-			config = config.replace /TMP_DIR.*/, "TMP_DIR = '/var/lib/sharelatex/tmp'"
-			fs.writeFileSync "package/config/settings.coffee", config
-
-		buildDeb: (callback = (error) ->) ->
-			command = ["-s", "dir", "-t", "deb", "-n", "sharelatex", "-v", "0.0.1", "--verbose"]
-			command.push(
-				"--maintainer", "ShareLaTeX <team@sharelatex.com>"
-				"--config-files", "/etc/sharelatex/settings.coffee"
-				"--config-files", "/etc/nginx/conf.d/sharelatex.conf"
-				"--directories",  "/var/lib/sharelatex"
-				"--directories",  "/var/log/sharelatex"
-			)
-
-			command.push(
-				"--depends", "redis-server > 2.6.12"
-				"--depends", "mongodb-org > 2.4.0"
-				"--depends", "nodejs > 0.10.0"
-			)
-			
-			@buildPackageSettingsFile()
-
-			@buildUpstartScripts()
-			for service in SERVICES
-				command.push(
-					"--deb-upstart", "package/upstart/sharelatex-#{service.name}"
-				)
-
-			after_install_script = """
-				#!/bin/sh
-				# Create random secret keys (twice, once for http auth pass, once for cookie secret).
-				sed -i "0,/CRYPTO_RANDOM/s/CRYPTO_RANDOM/$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 64 | head -n 1)/" /etc/sharelatex/settings.coffee
-				sed -i "0,/CRYPTO_RANDOM/s/CRYPTO_RANDOM/$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 64 | head -n 1)/" /etc/sharelatex/settings.coffee
-				
-				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/lib/sharelatex
-
-			"""
-
-			for dir in ["data/user_files", "tmp/uploads", "data/compiles", "data/cache", "tmp/dumpFolder"]
-				after_install_script += """
-					mkdir -p /var/lib/sharelatex/#{dir}
-					
-				"""
-			
-			after_install_script += """
-				chown -R sharelatex:sharelatex /var/lib/sharelatex
-				
-			"""	
-
-			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")
-			command.push("--exclude", "**/node_modules/grunt-*")
-			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"
-				"package/nginx/sharelatex=/etc/nginx/conf.d/sharelatex.conf"
-			)
-			console.log "fpm " + command.join(" ")
-			proc = spawn "fpm", command, stdio: "inherit"
-			proc.on "close", (code) ->
-				if code != 0
-					callback(new Error("exit code: #{code}"))
-				else
-					callback()
-
-			
-
-
-
+				fs.writeFileSync "package/upstart/sharelatex-#{service.name}.conf", template.replace(/__SERVICE__/g, service.name)
 

+ 0 - 219
package/config/settings.coffee

@@ -1,219 +0,0 @@
-Path = require('path')
-
-# These credentials are used for authenticating api requests
-# between services that may need to go over public channels
-httpAuthUser = "sharelatex"
-httpAuthPass = "CRYPTO_RANDOM" # Randomly generated for you
-httpAuthUsers = {}
-httpAuthUsers[httpAuthUser] = httpAuthPass
-
-DATA_DIR = '/var/lib/sharelatex/data'
-TMP_DIR = '/var/lib/sharelatex/tmp'
-
-module.exports =
-	# Databases
-	# ---------
-
-	# ShareLaTeX's main persistant data store is MongoDB (http://www.mongodb.org/)
-	# Documentation about the URL connection string format can be found at:
-	#
-	#    http://docs.mongodb.org/manual/reference/connection-string/
-	# 
-	# The following works out of the box with Mongo's default settings:
-	mongo:
-		url : 'mongodb://127.0.0.1/sharelatex'
-
-	# Redis is used in ShareLaTeX for high volume queries, like real-time
-	# editing, and session management.
-	#
-	# The following config will work with Redis's default settings:
-	redis:
-		web:
-			host: "localhost"
-			port: "6379"
-			password: ""
-
-	# The compile server (the clsi) uses a SQL database to cache files and
-	# meta-data. sqllite is the default, and the load is low enough that this will
-	# be fine in production (we use sqllite at sharelatex.com).
-	#
-	# If you want to configure a different database, see the Sequelize documentation
-	# for available options:
-	#
-	#    https://github.com/sequelize/sequelize/wiki/API-Reference-Sequelize#example-usage
-	#
-	mysql:
-		clsi:
-			database: "clsi"
-			username: "clsi"
-			password: ""
-			dialect: "sqlite"
-			storage: Path.join(DATA_DIR, "db.sqlite")
-
-	# File storage
-	# ------------
-
-	# ShareLaTeX can store binary files like images either locally or in Amazon
-	# S3. The default is locally:
-	filestore:
-		backend: "fs"	
-		stores:
-			user_files: Path.join(DATA_DIR, "user_files")
-			
-	# To use Amazon S3 as a storage backend, comment out the above config, and
-	# uncomment the following, filling in your key, secret, and bucket name:
-	#
-	# filestore:
-	# 	backend: "s3"
-	# 	stores:
-	# 		user_files: "BUCKET_NAME"
-	# 	s3:
-	# 		key: "AWS_KEY"
-	# 		secret: "AWS_SECRET"
-	# 		
-
-	# Local disk caching
-	# ------------------
-	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.join(TMP_DIR, "dumpFolder")
-		# Where to write uploads before they are processed
-		uploadFolder: Path.join(TMP_DIR, "uploads")
-		# Where to write the project to disk before running LaTeX on it
-		compilesDir:  Path.join(DATA_DIR, "compiles")
-		# Where to cache downloaded URLs for the CLSI
-		clsiCacheDir: Path.join(DATA_DIR, "cache")
-
-	# Server Config
-	# -------------
-
-	# Where your instance of ShareLaTeX can be found publicly. This is used
-	# when emails are sent out and in generated links:
-	siteUrl : 'http://localhost:3000'
-	
-	# If provided, a sessionSecret is used to sign cookies so that they cannot be
-	# spoofed. This is recommended.
-	security:
-		sessionSecret: "CRYPTO_RANDOM" # This was randomly generated for you
-
-	# These credentials are used for authenticating api requests
-	# between services that may need to go over public channels
-	httpAuthUsers: httpAuthUsers
-	
-	# 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. This should be false in development where changes are being made,
-	# but should be set to true in production.
-	cacheStaticAssets: false
-
-	# If you are running ShareLaTeX over https, set this to true to send the
-	# cookie with a secure flag (recommended).
-	secureCookie: false
-	
-	# If you are running ShareLaTeX behind a proxy (like Apache, Nginx, etc)
-	# then set this to true to allow it to correctly detect the forwarded IP
-	# address and http/https protocol information.
-	behindProxy: false
-
-	# Sending Email
-	# -------------
-	#
-	# You must configure a mail server to be able to send invite emails from
-	# ShareLaTeX. The config settings are passed to nodemailer. See the nodemailer
-	# documentation for available options:
-	#
-	#     http://www.nodemailer.com/docs/transports
-	#
-	# email:
-	#	fromAddress: ""
-	#	replyTo: ""
-	#	transport: "SES"
-	#	parameters:
-	#		AWSAccessKeyID: ""
-	#		AWSSecretKey: ""
-
-	# Spell Check Languages
-	# ---------------------
-	#
-	# You must have the corresponding aspell dictionary installed to 
-	# be able to use a language. Run `grunt check:aspell` to check which
-	# dictionaries you have installed. These should be set for the `code` for
-	# each language.
-	languages: [
-		{name: "English", code: "en"}
-	]
-	
-	# Service locations
-	# -----------------
-
-	# ShareLaTeX is comprised of many small services, which each expose
-	# an HTTP API running on a different port. 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"
-	# 	filestore:
-	# 		port: filestorePort = 3009
-	# 		host: "localhost"
-	# 	chat:
-	# 		port: chatPort = 3010
-	# 		host: "localhost"
-	# 	tags:
-	# 		port: tagsPort = 3012
-	# 		host: "localhost"
-	# 	clsi:
-	# 		port: clsiPort = 3013
-	# 		host: "localhost"
-	# 	trackchanges:
-	# 		port: trackchangesPort = 3015
-	# 		host: "localhost"
-	# 	docstore:
-	# 		port: docstorePort = 3016
-	# 		host: "localhost"
-	# 	spelling:
-	# 		port: spellingPort = 3005
-	# 		host: "localhost"
-
-	# If you change the above config, or run some services on remote servers,
-	# you need to tell the other services where to find them:
-	apis:
-		web:
-			url: "http://localhost:3000"
-			user: httpAuthUser
-			pass: httpAuthPass
-	# 	documentupdater:
-	# 		url : "http://localhost:#{docUpdaterPort}"
-	# 	clsi:
-	# 		url: "http://localhost:#{clsiPort}"
-	# 	filestore:
-	# 		url: "http://localhost:#{filestorePort}"
-	# 	trackchanges:
-	# 		url: "http://localhost:#{trackchangesPort}"
-	# 	docstore:
-	# 		url: "http://localhost:#{docstorePort}"
-	# 	tags:
-	# 		url: "http://localhost:#{tagsPort}"
-	# 	spelling:
-	# 		url: "http://localhost:#{spellingPort}"
-	# 	chat:
-	# 		url: "http://localhost:#{chatPort}"
-	
-
-# With lots of incoming and outgoing HTTP connections to different services,
-# sometimes long running, it is a good idea to increase the default number
-# of sockets that Node will hold open.
-http = require('http')
-http.globalAgent.maxSockets = 300
-https = require('https')
-https.globalAgent.maxSockets = 300

+ 12 - 0
package/nginx/sharelatex → package/nginx/sharelatex.conf

@@ -14,6 +14,18 @@ server {
 		proxy_read_timeout 3m;
 		proxy_send_timeout 3m;
 	}
+	
+	location /socket.io {
+		proxy_pass http://localhost:3026;
+		proxy_set_header X-Forwarded-Proto $scheme;
+		proxy_set_header Host $http_x_forwarded_host;
+		proxy_http_version 1.1;
+		proxy_set_header Upgrade $http_upgrade;
+		proxy_set_header Connection "upgrade";
+		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+		proxy_read_timeout 3m;
+		proxy_send_timeout 3m;
+	}
 
 	location /stylesheets {
 		expires 1y;

+ 0 - 26
package/scripts/after_install.sh

@@ -1,26 +0,0 @@
-#!/bin/sh
-# Create random secret keys (twice, once for http auth pass, once for cookie secret).
-sed -i "0,/CRYPTO_RANDOM/s/CRYPTO_RANDOM/$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 64 | head -n 1)/" /etc/sharelatex/settings.coffee
-sed -i "0,/CRYPTO_RANDOM/s/CRYPTO_RANDOM/$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 64 | head -n 1)/" /etc/sharelatex/settings.coffee
-
-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/lib/sharelatex
-mkdir -p /var/lib/sharelatex/data/user_files
-mkdir -p /var/lib/sharelatex/tmp/uploads
-mkdir -p /var/lib/sharelatex/data/compiles
-mkdir -p /var/lib/sharelatex/data/cache
-mkdir -p /var/lib/sharelatex/tmp/dumpFolder
-chown -R sharelatex:sharelatex /var/lib/sharelatex
-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
-service sharelatex-chat restart
-service sharelatex-tags restart
-service sharelatex-spelling restart

+ 0 - 0
package/upstart/sharelatex-chat → package/upstart/sharelatex-chat.conf


+ 0 - 0
package/upstart/sharelatex-clsi → package/upstart/sharelatex-clsi.conf


+ 0 - 0
package/upstart/sharelatex-docstore → package/upstart/sharelatex-docstore.conf


+ 0 - 0
package/upstart/sharelatex-document-updater → package/upstart/sharelatex-document-updater.conf


+ 0 - 0
package/upstart/sharelatex-filestore → package/upstart/sharelatex-filestore.conf


+ 1 - 1
package/upstart/sharelatex-real-time → package/upstart/sharelatex-real-time.conf

@@ -25,4 +25,4 @@ script
     echo $$ > /var/run/sharelatex-$SERVICE.pid
     cd /var/www/sharelatex/$SERVICE
     exec sudo -u $USER -g $GROUP env SHARELATEX_CONFIG=$SHARELATEX_CONFIG NODE_ENV=production PATH=$PATH:$LATEX_PATH $NODE app.js >> /var/log/sharelatex/$SERVICE.log 2>&1
-end script
+end script

+ 0 - 0
package/upstart/sharelatex-spelling → package/upstart/sharelatex-spelling.conf


+ 0 - 0
package/upstart/sharelatex-tags → package/upstart/sharelatex-tags.conf


+ 0 - 0
package/upstart/sharelatex-template → package/upstart/sharelatex-template.conf


+ 0 - 0
package/upstart/sharelatex-track-changes → package/upstart/sharelatex-track-changes.conf


+ 0 - 0
package/upstart/sharelatex-web → package/upstart/sharelatex-web.conf