From 7864d5b6a21913918dabfe842d218629f1f783f9 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Sun, 27 Oct 2019 22:13:40 +0100 Subject: [PATCH] first attempt at adding the nginx service --- services/nginx.spec | 7 +++++++ services/www.spec | 5 +++++ src/gen-config.cr | 13 +++++++++++++ templates/nginx.conf.j2 | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 services/nginx.spec create mode 100644 services/www.spec create mode 100644 templates/nginx.conf.j2 diff --git a/services/nginx.spec b/services/nginx.spec new file mode 100644 index 0000000..0938bde --- /dev/null +++ b/services/nginx.spec @@ -0,0 +1,7 @@ +command: nginx -c ${SERVICE_ROOT}/nginx.conf +provides: www + +#%directory ${SERVICE_ROOT}/ +# name: working directory + +%configuration nginx.conf ${SERVICE_ROOT}/nginx.conf diff --git a/services/www.spec b/services/www.spec new file mode 100644 index 0000000..4362cdb --- /dev/null +++ b/services/www.spec @@ -0,0 +1,5 @@ +command: echo "coucou" +consumes: www + +%directory ${SERVICE_ROOT}/ + name: data directory diff --git a/src/gen-config.cr b/src/gen-config.cr index 5ea81c1..3047ef0 100644 --- a/src/gen-config.cr +++ b/src/gen-config.cr @@ -50,6 +50,7 @@ class GenConfig::Context def generate(template, target : String, options : Hash(String, Variables)) ServiceDefinition.load SERVICES_DIRECTORY Service.load RC_DIRECTORY + Environment.load ENVIRONMENTS_DIRECTORY target_file = File.open target, "w" @@ -99,6 +100,18 @@ class GenConfig::Context end end options["providers"] = providers + + consumers = Hash(String, Variables).new + service.provides.each do |provider_data| + token = provider_data.token + + consumers[token] = Service.all.select do |s2| + s2.providers.each do |t2, id| + token == t2 && id == service.id + end + end.map &.full_id + end + options["consumers"] = consumers end end diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 new file mode 100644 index 0000000..119b48d --- /dev/null +++ b/templates/nginx.conf.j2 @@ -0,0 +1,36 @@ + +# worker_processes 1; +daemon off; + +worker_rlimit_nofile 1024; +events { + worker_connections 800; +} + +http { + error_log /var/log/{{ id | replace("/", "_") }}_error.log warn; + access_log /var/log/{{ id | replace("/", "_") }}_access.log; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + index index.html index.htm index.xhtml; + + fastcgi_param HTTP_PROXY ""; + + keepalive_timeout 65; + + server_tokens off; + + {% for user in consumers["www"] %} + server { + listen {{ port(user.id) }} ; + listen [::]:{{ port(user.id) }} ; + server_name {{ user.domain }} ; + + location / { + root {{ user.root }} ; + } + } + {% endfor %} + +}