Add some basic testcases, fix the tools on multi-user Nix installations, fix pure-sysvinit examples
This commit is contained in:
parent
e980e4e95f
commit
3d7d17b770
|
@ -19,6 +19,6 @@ let
|
|||
in
|
||||
{
|
||||
webapp = import webappExpr {
|
||||
inherit createManagedProcess runtimeDir;
|
||||
inherit createManagedProcess tmpDir;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
{ pkgs ? import <nixpkgs> { inherit system; }
|
||||
, system ? builtins.currentSystem
|
||||
, stateDir ? "/var"
|
||||
, runtimeDir ? "${stateDir}/run"
|
||||
, logDir ? "${stateDir}/log"
|
||||
, cacheDir ? "${stateDir}/cache"
|
||||
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
|
||||
, forceDisableUserChange ? false
|
||||
, processManager
|
||||
}:
|
||||
|
||||
{
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
{createManagedProcess, runtimeDir}:
|
||||
{createManagedProcess, tmpDir}:
|
||||
{port, instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
|
@ -16,7 +16,7 @@ createManagedProcess {
|
|||
|
||||
environment = {
|
||||
PORT = port;
|
||||
PID_FILE = "${runtimeDir}/${instanceName}.pid";
|
||||
PID_FILE = "${tmpDir}/${instanceName}.pid";
|
||||
};
|
||||
user = instanceName;
|
||||
credentials = {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{createManagedProcess, runtimeDir}:
|
||||
{createManagedProcess, tmpDir}:
|
||||
{port, instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{createManagedProcess, runtimeDir}:
|
||||
{createManagedProcess, tmpDir}:
|
||||
{port, instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
|
@ -17,7 +17,7 @@ createManagedProcess {
|
|||
|
||||
environment = {
|
||||
PORT = port;
|
||||
PID_FILE = "${runtimeDir}/${instanceName}.pid";
|
||||
PID_FILE = "${tmpDir}/${instanceName}.pid";
|
||||
};
|
||||
user = instanceName;
|
||||
credentials = {
|
||||
|
|
|
@ -24,11 +24,11 @@ let
|
|||
in
|
||||
{
|
||||
webapp = import ./webapp.nix {
|
||||
inherit createSystemVInitScript runtimeDir;
|
||||
inherit createSystemVInitScript tmpDir;
|
||||
};
|
||||
|
||||
nginxReverseProxy = import ./nginx-reverse-proxy.nix {
|
||||
inherit createSystemVInitScript stateDir logDir runtimeDir;
|
||||
inherit createSystemVInitScript stateDir logDir runtimeDir forceDisableUserChange;
|
||||
inherit (pkgs) stdenv writeTextFile nginx;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,22 +1,32 @@
|
|||
{createSystemVInitScript, stdenv, writeTextFile, nginx, runtimeDir, stateDir, logDir}:
|
||||
{createSystemVInitScript, stdenv, writeTextFile, nginx, runtimeDir, stateDir, logDir, forceDisableUserChange}:
|
||||
{port ? 80, webapps ? [], instanceSuffix ? ""}:
|
||||
interDeps:
|
||||
interDependencies:
|
||||
|
||||
let
|
||||
instanceName = "nginx${instanceSuffix}";
|
||||
user = instanceName;
|
||||
group = instanceName;
|
||||
|
||||
nginxStateDir = "${stateDir}/${instanceName}";
|
||||
dependencies = webapps ++ (builtins.attrValues interDeps);
|
||||
nginxLogDir = "${nginxStateDir}/logs";
|
||||
in
|
||||
import ./nginx.nix {
|
||||
inherit createSystemVInitScript nginx;
|
||||
inherit createSystemVInitScript stdenv nginx forceDisableUserChange;
|
||||
stateDir = nginxStateDir;
|
||||
} {
|
||||
inherit instanceSuffix;
|
||||
|
||||
dependencies = map (webapp: webapp.pkg) webapps
|
||||
++ map (interDependency: interDependency.pkgs."${stdenv.system}") (builtins.attrValues interDependencies);
|
||||
|
||||
configFile = writeTextFile {
|
||||
name = "nginx.conf";
|
||||
text = ''
|
||||
error_log ${nginxStateDir}/logs/error.log;
|
||||
pid ${runtimeDir}/${instanceName}.pid;
|
||||
error_log ${nginxLogDir}/error.log;
|
||||
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
user ${user} ${group};
|
||||
''}
|
||||
|
||||
events {
|
||||
worker_connections 190000;
|
||||
|
@ -29,15 +39,15 @@ import ./nginx.nix {
|
|||
}
|
||||
'') webapps}
|
||||
|
||||
${stdenv.lib.concatMapStrings (dependencyName:
|
||||
${stdenv.lib.concatMapStrings (paramName:
|
||||
let
|
||||
dependency = builtins.getAttr dependencyName interDeps;
|
||||
dependency = builtins.getAttr paramName interDependencies;
|
||||
in
|
||||
''
|
||||
upstream webapp${toString dependency.port} {
|
||||
server ${dependency.target.properties.hostname}:${toString dependency.port};
|
||||
}
|
||||
'') (builtins.attrNames interDeps)}
|
||||
'') (builtins.attrNames interDependencies)}
|
||||
|
||||
# Fallback virtual host displaying an error page. This is what users see
|
||||
# if they connect to a non-deployed web application.
|
||||
|
@ -56,12 +66,11 @@ import ./nginx.nix {
|
|||
server_name ${dependency.dnsName};
|
||||
|
||||
location / {
|
||||
proxy_pass http://webapp${toString dependency.port};
|
||||
proxy_pass http://webapp${toString dependency.port};
|
||||
}
|
||||
}
|
||||
'') dependencies}
|
||||
'') (webapps ++ builtins.attrValues interDependencies)}
|
||||
}
|
||||
'';
|
||||
};
|
||||
dependencies = map (webapp: webapp.pkg) dependencies;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
{createSystemVInitScript, nginx, stateDir}:
|
||||
{createSystemVInitScript, stdenv, nginx, stateDir, forceDisableUserChange}:
|
||||
{configFile, dependencies ? [], instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
instanceName = "nginx${instanceSuffix}";
|
||||
user = instanceName;
|
||||
group = instanceName;
|
||||
nginxLogDir = "${stateDir}/${instanceName}/logs";
|
||||
nginxLogDir = "${stateDir}/logs";
|
||||
in
|
||||
createSystemVInitScript {
|
||||
name = instanceName;
|
||||
description = "Nginx";
|
||||
initialize = ''
|
||||
mkdir -p ${nginxLogDir}
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
chown ${user}:${group} ${nginxLogDir}
|
||||
''}
|
||||
'';
|
||||
process = "${nginx}/bin/nginx";
|
||||
args = [ "-c" configFile "-p" stateDir ];
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{ pkgs ? import <nixpkgs> { inherit system; }
|
||||
, system ? builtins.currentSystem
|
||||
, stateDir ? "/var"
|
||||
, runtimeDir ? "${stateDir}/run"
|
||||
, logDir ? "${stateDir}/log"
|
||||
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
|
||||
, forceDisableUserChange ? false
|
||||
}:
|
||||
|
||||
{
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
{createSystemVInitScript, runtimeDir}:
|
||||
{createSystemVInitScript, tmpDir}:
|
||||
{port, instanceSuffix ? ""}:
|
||||
|
||||
let
|
||||
|
@ -12,7 +12,7 @@ createSystemVInitScript {
|
|||
args = [ "-D" ];
|
||||
environment = {
|
||||
PORT = port;
|
||||
PID_FILE = "${runtimeDir}/${instanceName}.pid";
|
||||
PID_FILE = "${tmpDir}/${instanceName}.pid";
|
||||
};
|
||||
|
||||
runlevels = [ 3 4 5 ];
|
||||
|
|
Loading…
Reference in New Issue