diff --git a/flake.nix b/flake.nix index 99f9812..f137edc 100644 --- a/flake.nix +++ b/flake.nix @@ -47,6 +47,7 @@ nixos/systems/liveusb nixos/systems/blowhole + nixng/containers/website nixng/containers/ds3os overlays/udp-over-tcp.nix overlays/emacsclient-remote diff --git a/nixng/containers/website/default.nix b/nixng/containers/website/default.nix new file mode 100644 index 0000000..6dd7f74 --- /dev/null +++ b/nixng/containers/website/default.nix @@ -0,0 +1,88 @@ +{ inputs, ... }: +{ + flake.nixngConfigurations.website = inputs.nixng.nglib.makeSystem { + system = "x86_64-linux"; + name = "nixng-website"; + inherit (inputs) nixpkgs; + config = + { pkgs, lib, ... }: + let + inherit (lib) + singleton; + in + { + dumb-init = { + enable = true; + type.services = {}; + }; + init.services.apache2 = { + ensureSomething.link."documentRoot" = { + src = "${inputs.website."x86_64-linux"}/redalder"; + dst = "/var/www"; + }; + shutdownOnExit = true; + }; + services.apache2 = { + enable = true; + configuration = [ + { + LoadModule = [ + [ "mpm_event_module" "modules/mod_mpm_event.so" ] + [ "log_config_module" "modules/mod_log_config.so" ] + [ "unixd_module" "modules/mod_unixd.so" ] + [ "authz_core_module" "modules/mod_authz_core.so" ] + [ "dir_module" "modules/mod_dir.so" ] + [ "mime_module" "modules/mod_mime.so" ] + ]; + } + { + Listen = "0.0.0.0:80"; + + ServerRoot = "/var/www"; + ServerName = "blowhole"; + PidFile = "/httpd.pid"; + + User = "www-data"; + Group = "www-data"; + + DocumentRoot = "/var/www"; + } + + { + ErrorLog = "/dev/stderr"; + TransferLog = "/dev/stdout"; + + LogLevel = "info"; + } + + { + AddType = singleton [ + "image/svg+xml" + "svg" + "svgz" + ]; + AddEncoding = [ + "gzip" + "svgz" + ]; + + TypesConfig = "${pkgs.apacheHttpd}/conf/mime.types"; + } + + { + Directory."/" = { + Require = [ "all" "denied" ]; + Options = "SymlinksIfOwnerMatch"; + }; + + VirtualHost."*:80".Directory."/var/www" = { + Require = [ "all" "granted" ]; + Options = [ "-Indexes" "+FollowSymlinks" ]; + DirectoryIndex = "index.html"; + }; + } + ]; + }; + }; + }; +}