diff --git a/Dockerfile b/Dockerfile index 2f394fed64..bf344b7c9a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,7 +70,7 @@ ADD ${baseDir}/runit /etc/service # Configure nginx # --------------- -ADD ${baseDir}/nginx/nginx.conf /etc/nginx/nginx.conf +ADD ${baseDir}/nginx/nginx.conf.template /etc/nginx/templates/nginx.conf.template ADD ${baseDir}/nginx/sharelatex.conf /etc/nginx/sites-enabled/sharelatex.conf diff --git a/Dockerfile-base b/Dockerfile-base index 15ac43da33..4f88faef9e 100644 --- a/Dockerfile-base +++ b/Dockerfile-base @@ -30,6 +30,11 @@ RUN apt-get update \ /etc/nginx/sites-enabled/default \ /var/lib/apt/lists/* +# Add envsubst +# ------------ +ADD ./vendor/envsubst /usr/bin/envsubst +RUN chmod +x /usr/bin/envsubst + # Install Grunt # ------------ RUN npm install -g \ diff --git a/init_scripts/01_nginx_config_template.sh b/init_scripts/01_nginx_config_template.sh new file mode 100755 index 0000000000..84f39ea637 --- /dev/null +++ b/init_scripts/01_nginx_config_template.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +set -e + +## Generate nginx config files from templates, +## with environment variables substituted + +nginx_dir='/etc/nginx' +nginx_templates_dir="${nginx_dir}/templates" + +if ! [ -d "${nginx_templates_dir}" ]; then + echo "Nginx: no template directory found, skipping" + exit 0 +fi + +nginx_template_file="${nginx_templates_dir}/nginx.conf.template" +nginx_config_file="${nginx_dir}/nginx.conf" + +if [ -f "${nginx_template_file}" ]; then + export NGINX_WORKER_PROCESSES="${NGINX_WORKER_PROCESSES:-4}" + export NGINX_WORKER_CONNECTIONS="${NGINX_WORKER_CONNECTIONS:-768}" + + echo "Nginx: generating config file from template" + + # Note the single-quotes, they are important. + # This is a pass-list of env-vars that envsubst + # should operate on. + envsubst '${NGINX_WORKER_PROCESSES} ${NGINX_WORKER_CONNECTIONS}' \ + < "${nginx_template_file}" \ + > "${nginx_config_file}" + + echo "Nginx: reloading config" + service nginx reload +fi diff --git a/nginx/nginx.conf b/nginx/nginx.conf.template similarity index 80% rename from nginx/nginx.conf rename to nginx/nginx.conf.template index c4311103b0..e3cf283e85 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf.template @@ -1,10 +1,14 @@ +## ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ## +## ! This file was generated from a template ! ## +## ! See /etc/nginx/templates/ ! ## +## ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ## daemon off; user www-data; -worker_processes 4; +worker_processes ${NGINX_WORKER_PROCESSES}; pid /run/nginx.pid; events { - worker_connections 768; + worker_connections ${NGINX_WORKER_CONNECTIONS}; # multi_accept on; } @@ -63,7 +67,7 @@ http { ## # Uncomment it if you installed nginx-passenger ## - + #passenger_root /usr; #passenger_ruby /usr/bin/ruby; diff --git a/vendor/envsubst b/vendor/envsubst new file mode 100644 index 0000000000..f7ad8081d0 Binary files /dev/null and b/vendor/envsubst differ