diff --git a/server-ce/Dockerfile b/server-ce/Dockerfile index 77e6ea1aba..dbf7241c51 100644 --- a/server-ce/Dockerfile +++ b/server-ce/Dockerfile @@ -59,10 +59,6 @@ ADD runit/web-sharelatex.sh /etc/service/web-sharelatex/run RUN mkdir /etc/sharelatex ADD settings.coffee /etc/sharelatex/settings.coffee -# phusion/baseimage init script -ADD 00_regen_sharelatex_secrets.sh /etc/my_init.d/00_regen_sharelatex_secrets.sh -ADD 00_make_sharelatex_data_dirs.sh /etc/my_init.d/00_make_sharelatex_data_dirs.sh - # TexLive RUN apt-get install -y wget RUN wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz; \ @@ -71,6 +67,8 @@ RUN wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz; \ RUN echo "selected_scheme scheme-basic" >> /install-tl-unx/texlive.profile; \ /install-tl-unx/install-tl -profile /install-tl-unx/texlive.profile +RUN rm -r /install-tl-unx; \ + rm install-tl-unx.tar.gz ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2014/bin/x86_64-linux/ RUN tlmgr install latexmk @@ -78,4 +76,11 @@ RUN tlmgr install latexmk # Aspell RUN apt-get install -y aspell aspell-en aspell-af aspell-am aspell-ar aspell-ar-large aspell-bg aspell-bn aspell-br aspell-ca aspell-cs aspell-cy aspell-da aspell-de aspell-de-alt aspell-el aspell-eo aspell-es aspell-et aspell-eu-es aspell-fa aspell-fo aspell-fr aspell-ga aspell-gl-minimos aspell-gu aspell-he aspell-hi aspell-hr aspell-hsb aspell-hu aspell-hy aspell-id aspell-is aspell-it aspell-kk aspell-kn aspell-ku aspell-lt aspell-lv aspell-ml aspell-mr aspell-nl aspell-no aspell-nr aspell-ns aspell-or aspell-pa aspell-pl aspell-pt-br aspell-ro aspell-ru aspell-sk aspell-sl aspell-ss aspell-st aspell-sv aspell-ta aspell-te aspell-tl aspell-tn aspell-ts aspell-uk aspell-uz aspell-xh aspell-zu +# phusion/baseimage init script +ADD 00_regen_sharelatex_secrets.sh /etc/my_init.d/00_regen_sharelatex_secrets.sh +ADD 00_make_sharelatex_data_dirs.sh /etc/my_init.d/00_make_sharelatex_data_dirs.sh +ADD 00_set_docker_host_ipaddress.sh /etc/my_init.d/00_set_docker_host_ipaddress.sh + +EXPOSE 80 + ENTRYPOINT ["/sbin/my_init"] \ No newline at end of file diff --git a/server-ce/README.md b/server-ce/README.md index ba4eae9155..a9a0a729eb 100644 --- a/server-ce/README.md +++ b/server-ce/README.md @@ -1,32 +1,105 @@ ShareLaTeX Docker Image ======================= -*THIS IS A WORK IN PROGRESS AND THESE INSTRUCTIONS DO NOT WORK YET!* +**Please read this entire file before installing ShareLaTeX via Docker. It's only +short but contains some important information.** The recommended way to install and run ShareLaTeX Community Edition is via Docker: ``` -$ docker run -d -v /sharelatex-data:/var/lib/sharelatex --net=host --name=sharelatex sharelatex/sharelatex +$ docker run -d -v sharelatex:/var/lib/sharelatex --name=sharelatex sharelatex/sharelatex ``` This will download the ShareLaTeX image and start it running in the background. -**Which port does it listen on?**. +To stop ShareLaTeX: + +``` +docker stop sharelatex +``` + +and to start it again: + +``` +docker start sharelatex +``` + +If you want to permanently remove ShareLaTeX from your docker containers: + +``` +docker rm sharelatex +``` + +### Storing Data + +The `-v sharelatex:/var/lib/sharelatex` option in the `run` command tells +Docker to make the host directory `sharelatex` available inside the container for +ShareLaTeX to store data files in. This means that you can back up and access these +files manually outside of the ShareLaTeX container. If you would like to store ShareLaTeX data +in a different location, such as `/home/james/my_data`, just change this parameter: + +``` +$ docker run -d \ + -v /home/james/my_data:/var/lib/sharelatex \ + --name=sharelatex \ + sharelatex/sharelatex +``` + +Do not change the second part of this parameter (after the :). + +This is only where ShareLaTeX stores on-disk data. +Other data is also stored in Mongo and Redis. ### Mongo and Redis -The `--net=host` option to docker will allow the ShareLaTeX container to access -ports on the local system. By default it looks for an instance of -[MongoDB](http://www.mongodb.org/) (must be version 2.4 or later) running on port 27017, and -[Redis](http://redis.io/) (must be version 2.6.12 or later) running on port 6379. These are the default ports for -a standard installation of MongoDB and Redis. +ShareLaTeX depends on [MongoDB](http://www.mongodb.org/) (must be 2.4 or later), and +[Redis](http://redis.io/) (must be version 2.6.12 or later). +These should be running on the host system. -### Persisting and backing up data +By default the ShareLaTeX Docker container looks for these running on the host +machine at port 27017 (for Mongo) and port 6379 (for Redis). These are the defaults +ports for both databases so you shouldn't need to change them. -The `-v /sharelatex-data:/var/lib/sharelatex` option in the `run` command tells Docker to mount the local -directory `/sharelatex-data` in the container at `/var/lib/sharelatex`. This is -where ShareLaTeX will store user uploaded files, and allows you to make external backups -of these files, as well as persist them between updates to the ShareLaTeX image. +If you want to point ShareLaTeX at a database in a different location, you can +configure the container with environment variables. See the **Configuration Options** +section below. + +*Note that `localhost` in the container refers only to the container, so if you +want to access services on the host machine then you should use `dockerhost`.* For example: + +``` +$ docker run -d \ + -v sharelatex:/var/lib/sharelatex \ + --name=sharelatex \ + --env SHARELATEX_MONGO_URL=mongodb://dockerhost/sharelatex \ + sharelatex/sharelatex +``` + +### Backups + +To backup the ShareLaTeX data, you need to backup the directory you have attached +to the container, as above. You also need to backup the Mongo and Redis databases. + +### Running on a different port + +The container listens on port 80 by default so you should be able to access +ShareLaTeX at http://localhost/. If you would like to run ShareLaTeX on a different +port (perhaps you have another service running on port 80, or want to put a proxy +in front of ShareLaTeX), then you can forward port 80 from the Docker container +to any other port with the `-p :80` option. For example, to have ShareLaTeX +listen on port 5000: + +``` +$ docker run -d \ + -v sharelatex:/var/lib/sharelatex \ + --name=sharelatex \ + -p 5000:80 \ + --env SHARELATEX_SITE_URL=http://localhost:5000 \ + sharelatex/sharelatex +``` + +(Note that you also have to update the `SHARELATEX_SITE_URL` parameter so that +it knows where it is publicly available.) ### LaTeX environment @@ -38,7 +111,7 @@ $ docker exec sharelatex tlmgr install scheme-full ``` Or you can install packages manually as you need by replacing `scheme-full` by -the package name +the package name. ### Configuration Options @@ -63,8 +136,21 @@ configured correctly! * `SHARELATEX_REDIS_PORT`: The port of the Redis instance to use * `SHARELATEX_REDIS_PASS`: The password to use when connecting to Redis (if applicable) * `SHARELATEX_SECURE_COOKIE`: Set this to something non-zero to use a secure cookie. - This requires that your ShareLaTeX instance is running behind SSL. + Only use this if your ShareLaTeX instance is running behind a reverse proxy with SSL configured. ### Upgrading from older versions -*TODO: Just stop container, remove 'sharelatex' tag, and run with the new version.* \ No newline at end of file +*Please make sure to back up all Mongo, Redis and on-disk data before upgrading.* + +Stop and remove the currently running ShareLaTeX container: + +``` +$ docker stop sharelatex +$ docker rm sharelatex +``` + +Start a new container with the updated version of ShareLaTeX (to upgrade to version 1.4.0 for example): + +``` +$ docker run -d -v sharelatex:/var/lib/sharelatex --name=sharelatex sharelatex/sharelatex:1.4.0 +``` \ No newline at end of file diff --git a/server-ce/settings.coffee b/server-ce/settings.coffee index d4b6987f85..622529068a 100644 --- a/server-ce/settings.coffee +++ b/server-ce/settings.coffee @@ -21,7 +21,7 @@ module.exports = # # The following works out of the box with Mongo's default settings: mongo: - url : process.env["SHARELATEX_MONGO_URL"] or 'mongodb://127.0.0.1/sharelatex' + url : process.env["SHARELATEX_MONGO_URL"] or 'mongodb://dockerhost/sharelatex' # Redis is used in ShareLaTeX for high volume queries, like real-time # editing, and session management. @@ -29,7 +29,7 @@ module.exports = # The following config will work with Redis's default settings: redis: web: redisConfig = - host: process.env["SHARELATEX_REDIS_HOST"] or "localhost" + host: process.env["SHARELATEX_REDIS_HOST"] or "dockerhost" port: process.env["SHARELATEX_REDIS_PORT"] or "6379" password: process.env["SHARELATEX_REDIS_PASS"] or "" fairy: redisConfig @@ -92,7 +92,7 @@ module.exports = # Where your instance of ShareLaTeX can be found publicly. This is used # when emails are sent out and in generated links: - siteUrl: siteUrl = process.env["SHARELATEX_SITE_URL"] or 'http://localhost:3000' + siteUrl: siteUrl = process.env["SHARELATEX_SITE_URL"] or 'http://localhost' # The websocket layer of ShareLaTeX runs as separate service. # When running locally or in development, you can point the client to this