Преглед изворни кода

Variables in Nginx configuration (#853)

* Add envsubst binary to image

* Generate nginx.conf from template, with env-vars

* Remove nginx.conf, now generated from template

* Reload nginx config after writing file

Co-authored-by: Shane Kilkelly <shane.kilkelly@overleaf.com>
Shane Kilkelly пре 5 година
родитељ
комит
d674a12167
5 измењених фајлова са 47 додато и 4 уклоњено
  1. 1 1
      Dockerfile
  2. 5 0
      Dockerfile-base
  3. 34 0
      init_scripts/01_nginx_config_template.sh
  4. 7 3
      nginx/nginx.conf.template
  5. BIN
      vendor/envsubst

+ 1 - 1
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
 
 

+ 5 - 0
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 \

+ 34 - 0
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

+ 7 - 3
nginx/nginx.conf → 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;