Add some basic testcases, fix the tools on multi-user Nix installations, fix pure-sysvinit examples

This commit is contained in:
Sander van der Burg 2020-07-06 22:06:51 +02:00 committed by Sander van der Burg
parent e980e4e95f
commit 3d7d17b770
10 changed files with 60 additions and 24 deletions

View File

@ -19,6 +19,6 @@ let
in
{
webapp = import webappExpr {
inherit createManagedProcess runtimeDir;
inherit createManagedProcess tmpDir;
};
}

View File

@ -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
}:
{
}

View File

@ -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 = {

View File

@ -1,4 +1,4 @@
{createManagedProcess, runtimeDir}:
{createManagedProcess, tmpDir}:
{port, instanceSuffix ? ""}:
let

View File

@ -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 = {

View File

@ -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;
};
}

View File

@ -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;
}

View File

@ -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 ];

View File

@ -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
}:
{
}

View File

@ -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 ];