Move Nginx to services examples, add second reverse proxy example that works path based
This commit is contained in:
parent
064752aa15
commit
41be24eb3f
|
@ -2,6 +2,7 @@
|
|||
, stateDir
|
||||
, logDir
|
||||
, runtimeDir
|
||||
, cacheDir
|
||||
, tmpDir
|
||||
, forceDisableUserChange
|
||||
, processManager
|
||||
|
@ -46,4 +47,19 @@ in
|
|||
jre = pkgs.jre8;
|
||||
tomcat = pkgs.tomcat9;
|
||||
};
|
||||
|
||||
nginx = import ./nginx.nix {
|
||||
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
|
||||
inherit (pkgs) stdenv nginx;
|
||||
};
|
||||
|
||||
nginxReverseProxyHostBased = import ./nginx-reverse-proxy-hostbased.nix {
|
||||
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
|
||||
inherit (pkgs) stdenv writeTextFile nginx;
|
||||
};
|
||||
|
||||
nginxReverseProxyPathBased = import ./nginx-reverse-proxy-pathbased.nix {
|
||||
inherit createManagedProcess stateDir runtimeDir cacheDir forceDisableUserChange;
|
||||
inherit (pkgs) stdenv writeTextFile nginx;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Disnix VirtualHosts example</title>
|
||||
<title>Error page</title>
|
||||
</head>
|
||||
|
||||
<body>
|
|
@ -1,4 +1,4 @@
|
|||
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, logDir, forceDisableUserChange}:
|
||||
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, cacheDir, forceDisableUserChange}:
|
||||
{port ? 80, webapps ? [], instanceSuffix ? ""}:
|
||||
interDeps:
|
||||
|
||||
|
@ -8,10 +8,11 @@ let
|
|||
group = instanceName;
|
||||
|
||||
nginxStateDir = "${stateDir}/${instanceName}";
|
||||
nginxLogDir = "${nginxStateDir}/logs";
|
||||
dependencies = webapps ++ (builtins.attrValues interDeps);
|
||||
in
|
||||
import ./nginx.nix {
|
||||
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir;
|
||||
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir cacheDir;
|
||||
} {
|
||||
inherit instanceSuffix;
|
||||
|
||||
|
@ -20,7 +21,7 @@ import ./nginx.nix {
|
|||
configFile = writeTextFile {
|
||||
name = "nginx.conf";
|
||||
text = ''
|
||||
error_log ${nginxStateDir}/logs/error.log;
|
||||
error_log ${nginxLogDir}/error.log;
|
||||
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
user ${user} ${group};
|
|
@ -0,0 +1,74 @@
|
|||
{createManagedProcess, stdenv, writeTextFile, nginx, runtimeDir, stateDir, cacheDir, forceDisableUserChange}:
|
||||
{port ? 80, webapps ? [], instanceSuffix ? "", enableCache ? false}:
|
||||
interDeps:
|
||||
|
||||
let
|
||||
instanceName = "nginx${instanceSuffix}";
|
||||
user = instanceName;
|
||||
group = instanceName;
|
||||
|
||||
nginxStateDir = "${stateDir}/${instanceName}";
|
||||
nginxLogDir = "${nginxStateDir}/logs";
|
||||
nginxCacheDir = "${cacheDir}/${instanceName}";
|
||||
|
||||
dependencies = webapps ++ (builtins.attrValues interDeps);
|
||||
in
|
||||
import ./nginx.nix {
|
||||
inherit createManagedProcess stdenv nginx stateDir forceDisableUserChange runtimeDir cacheDir;
|
||||
} {
|
||||
inherit instanceSuffix;
|
||||
|
||||
dependencies = map (webapp: builtins.trace ("we have a: ${toString (builtins.toJSON (builtins.functionArgs webapp.pkg))}") webapp.pkg) webapps;# dependencies;
|
||||
|
||||
configFile = writeTextFile {
|
||||
name = "nginx.conf";
|
||||
text = ''
|
||||
error_log ${nginxLogDir}/error.log;
|
||||
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
user ${user} ${group};
|
||||
''}
|
||||
|
||||
events {
|
||||
worker_connections 190000;
|
||||
}
|
||||
|
||||
http {
|
||||
${stdenv.lib.optionalString enableCache ''
|
||||
${stdenv.lib.concatMapStrings (dependency:
|
||||
''
|
||||
proxy_cache_path ${nginxCacheDir}/${dependency.name} keys_zone=${dependency.name}:8m inactive=5m max_size=128m;
|
||||
''
|
||||
) dependencies}
|
||||
''}
|
||||
|
||||
${stdenv.lib.concatMapStrings (dependency:
|
||||
''
|
||||
upstream ${dependency.name} {
|
||||
ip_hash;
|
||||
${if dependency ? targets
|
||||
then stdenv.lib.concatMapStrings (target: "server ${target.properties.hostname}:${toString dependency.port};\n") dependency.targets
|
||||
else "server localhost:${dependency.port};\n"
|
||||
}
|
||||
}
|
||||
''
|
||||
) dependencies}
|
||||
|
||||
server {
|
||||
${stdenv.lib.concatMapStrings (dependency:
|
||||
''
|
||||
location ${dependency.baseURL} {
|
||||
proxy_pass http://${dependency.name};
|
||||
${stdenv.lib.optionalString enableCache ''
|
||||
proxy_cache ${dependency.name};
|
||||
proxy_cache_key $host$uri$is_args$args;
|
||||
proxy_cache_valid 200 5m;
|
||||
proxy_cache_lock on;
|
||||
''}
|
||||
}
|
||||
'') dependencies}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,23 +1,28 @@
|
|||
{createManagedProcess, stdenv, nginx, stateDir, runtimeDir, forceDisableUserChange}:
|
||||
{createManagedProcess, stdenv, nginx, stateDir, runtimeDir, cacheDir, forceDisableUserChange}:
|
||||
{configFile, dependencies ? [], instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
instanceName = "nginx${instanceSuffix}";
|
||||
user = instanceName;
|
||||
group = instanceName;
|
||||
nginxLogDir = "${stateDir}/${instanceName}/logs";
|
||||
|
||||
nginxStateDir = "${stateDir}/${instanceName}";
|
||||
nginxLogDir = "${nginxStateDir}/logs";
|
||||
nginxCacheDir = "${cacheDir}/${instanceName}";
|
||||
in
|
||||
createManagedProcess {
|
||||
name = instanceName;
|
||||
description = "Nginx";
|
||||
initialize = ''
|
||||
mkdir -p ${nginxLogDir}
|
||||
mkdir -p ${nginxCacheDir}
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
chown ${user}:${group} ${nginxLogDir}
|
||||
chown ${user}:${group} ${nginxCacheDir}
|
||||
''}
|
||||
'';
|
||||
process = "${nginx}/bin/nginx";
|
||||
args = [ "-p" "${stateDir}/${instanceName}" "-c" configFile ];
|
||||
args = [ "-p" "${nginxStateDir}" "-c" configFile ];
|
||||
foregroundProcessExtraArgs = [ "-g" "daemon off;" ];
|
||||
daemonExtraArgs = [ "-g" "pid ${runtimeDir}/${instanceName}.pid;" ];
|
||||
|
|
@ -21,9 +21,4 @@ in
|
|||
webapp = import webappExpr {
|
||||
inherit createManagedProcess runtimeDir;
|
||||
};
|
||||
|
||||
nginxReverseProxy = import ./nginx-reverse-proxy.nix {
|
||||
inherit createManagedProcess stateDir logDir runtimeDir forceDisableUserChange;
|
||||
inherit (pkgs) stdenv writeTextFile nginx;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
, stateDir ? "/var"
|
||||
, runtimeDir ? "${stateDir}/run"
|
||||
, logDir ? "${stateDir}/log"
|
||||
, cacheDir ? "${stateDir}/cache"
|
||||
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
|
||||
, forceDisableUserChange ? false
|
||||
, processManager ? "sysvinit"
|
||||
|
@ -10,6 +11,10 @@
|
|||
}:
|
||||
|
||||
let
|
||||
sharedConstructors = import ../services-agnostic/constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
|
||||
};
|
||||
|
||||
constructors = import ./constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager webappMode;
|
||||
};
|
||||
|
@ -58,7 +63,7 @@ rec {
|
|||
nginxReverseProxy = rec {
|
||||
port = 8080;
|
||||
|
||||
pkg = constructors.nginxReverseProxy {
|
||||
pkg = sharedConstructors.nginxReverseProxyHostBased {
|
||||
webapps = [ webapp1 webapp2 webapp3 webapp4 ];
|
||||
inherit port;
|
||||
} {};
|
||||
|
@ -87,7 +92,7 @@ rec {
|
|||
nginxReverseProxy2 = rec {
|
||||
port = 8081;
|
||||
|
||||
pkg = constructors.nginxReverseProxy {
|
||||
pkg = sharedConstructors.nginxReverseProxyHostBased {
|
||||
webapps = [ webapp5 webapp6 ];
|
||||
inherit port;
|
||||
instanceSuffix = "2";
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
, stateDir ? "/var"
|
||||
, runtimeDir ? "${stateDir}/run"
|
||||
, logDir ? "${stateDir}/log"
|
||||
, cacheDir ? "${stateDir}/cache"
|
||||
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
|
||||
, forceDisableUserChange ? false
|
||||
, processManager
|
||||
|
@ -10,6 +11,10 @@
|
|||
}:
|
||||
|
||||
let
|
||||
sharedConstructors = import ../services-agnostic/constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
|
||||
};
|
||||
|
||||
constructors = import ./constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager webappMode;
|
||||
};
|
||||
|
@ -27,7 +32,7 @@ rec {
|
|||
nginxReverseProxy = rec {
|
||||
port = 8080;
|
||||
|
||||
pkg = constructors.nginxReverseProxy {
|
||||
pkg = sharedConstructors.nginxReverseProxyHostBased {
|
||||
webapps = [ webapp ];
|
||||
inherit port;
|
||||
} {};
|
||||
|
|
|
@ -2,12 +2,17 @@
|
|||
, stateDir ? "/var"
|
||||
, runtimeDir ? "${stateDir}/run"
|
||||
, logDir ? "${stateDir}/log"
|
||||
, cacheDir ? "${stateDir}/cache"
|
||||
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
|
||||
, forceDisableUserChange ? false
|
||||
, processManager ? null # "sysvinit"
|
||||
}:
|
||||
|
||||
let
|
||||
sharedConstructors = import ../services-agnostic/constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir cacheDir tmpDir forceDisableUserChange processManager;
|
||||
};
|
||||
|
||||
constructors = import ./constructors.nix {
|
||||
inherit pkgs stateDir runtimeDir logDir tmpDir forceDisableUserChange processManager;
|
||||
webappMode = null;
|
||||
|
@ -20,6 +25,7 @@ let
|
|||
else if processManager == "supervisord" then "supervisord-program"
|
||||
else if processManager == "bsdrc" then "bsdrc-script"
|
||||
else if processManager == "cygrunsrv" then "cygrunsrv-service"
|
||||
else if processManager == "launchd" then "launchd-daemon"
|
||||
else throw "Unknown process manager: ${processManager}";
|
||||
in
|
||||
rec {
|
||||
|
@ -36,7 +42,7 @@ rec {
|
|||
nginxReverseProxy = rec {
|
||||
name = "nginxReverseProxy";
|
||||
port = 8080;
|
||||
pkg = constructors.nginxReverseProxy {
|
||||
pkg = sharedConstructors.nginxReverseProxyHostBased {
|
||||
inherit port;
|
||||
};
|
||||
dependsOn = {
|
||||
|
|
Loading…
Reference in New Issue