diff options
| -rw-r--r-- | lass/1systems/prism.nix | 5 | ||||
| -rw-r--r-- | lass/2configs/websites/domsen.nix | 8 | ||||
| -rw-r--r-- | lass/2configs/websites/fritz.nix | 12 | ||||
| -rw-r--r-- | lass/2configs/websites/util.nix | 228 | ||||
| -rw-r--r-- | lass/2configs/websites/wohnprojekt-rhh.de.nix | 10 | ||||
| -rw-r--r-- | lass/4lib/default.nix | 223 | 
6 files changed, 248 insertions, 238 deletions
| diff --git a/lass/1systems/prism.nix b/lass/1systems/prism.nix index b9542bc8e..c83f198cb 100644 --- a/lass/1systems/prism.nix +++ b/lass/1systems/prism.nix @@ -3,8 +3,9 @@  let    ip = config.krebs.build.host.nets.internet.ip4.addr; -  inherit (import ../../4lib { inherit lib pkgs; }) -    manageCerts; +  inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;}) +    manageCerts +  ;  in {    imports = [ diff --git a/lass/2configs/websites/domsen.nix b/lass/2configs/websites/domsen.nix index 43f9b3924..35a391d1b 100644 --- a/lass/2configs/websites/domsen.nix +++ b/lass/2configs/websites/domsen.nix @@ -1,14 +1,10 @@  { config, pkgs, lib, ... }:  let -  inherit (config.krebs.lib) +  inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })      genid -    readFile      ; -  inherit (import ../../4lib { inherit lib pkgs; }) -    manageCert -    manageCerts -    activateACME +  inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})      ssl      servePage      serveOwncloud diff --git a/lass/2configs/websites/fritz.nix b/lass/2configs/websites/fritz.nix index b063504f0..487c4644e 100644 --- a/lass/2configs/websites/fritz.nix +++ b/lass/2configs/websites/fritz.nix @@ -1,12 +1,16 @@  { config, pkgs, lib, ... }:  let -  inherit (import ../../4lib { inherit lib pkgs; }) -    manageCerts -    activateACME +  inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; }) +    genid +    head +    nameValuePair +  ; +  inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})      ssl      servePage -    serveWordpress; +    serveWordpress +  ;  in {    imports = [ diff --git a/lass/2configs/websites/util.nix b/lass/2configs/websites/util.nix new file mode 100644 index 000000000..84a20c711 --- /dev/null +++ b/lass/2configs/websites/util.nix @@ -0,0 +1,228 @@ +{ lib, pkgs, ... }: + +with lib; + +rec { + +  manageCerts = domains: +    let +      domain = head domains; +    in { +      security.acme = { +        certs."${domain}" = { +          email = "lassulus@gmail.com"; +          webroot = "/var/lib/acme/challenges/${domain}"; +          plugins = [ +            "account_key.json" +            "key.pem" +            "fullchain.pem" +          ]; +          group = "nginx"; +          allowKeysForGroup = true; +          extraDomains = genAttrs domains (_: null); +        }; +      }; + +      krebs.nginx.servers."${domain}" = { +        locations = [ +          (nameValuePair "/.well-known/acme-challenge" '' +            root /var/lib/acme/challenges/${domain}/; +          '') +        ]; +      }; +    }; + +  ssl = domains: +    { +      imports = [ +        ( manageCerts domains ) +        ( activateACME (head domains) ) +      ]; +    }; + +  activateACME = domain: +    { +      krebs.nginx.servers.${domain} = { +        ssl = { +          enable = true; +          certificate = "/var/lib/acme/${domain}/fullchain.pem"; +          certificate_key = "/var/lib/acme/${domain}/key.pem"; +        }; +      }; +    }; + +  servePage = domains: +    let +      domain = head domains; +    in { +      krebs.nginx.servers.${domain} = { +        server-names = domains; +        locations = [ +          (nameValuePair "/" '' +            root /srv/http/${domain}; +          '') +        ]; +      }; +    }; + +  serveOwncloud = domains: +    let +      domain = head domains; +    in { +      krebs.nginx.servers."${domain}" = { +        server-names = domains; +        extraConfig = '' +          # Add headers to serve security related headers +          add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; +          add_header X-Content-Type-Options nosniff; +          add_header X-Frame-Options "SAMEORIGIN"; +          add_header X-XSS-Protection "1; mode=block"; +          add_header X-Robots-Tag none; + +          # Path to the root of your installation +          root /srv/http/${domain}/; +          # set max upload size +          client_max_body_size 10G; +          fastcgi_buffers 64 4K; + +          # Disable gzip to avoid the removal of the ETag header +          gzip off; + +          # Uncomment if your server is build with the ngx_pagespeed module +          # This module is currently not supported. +          #pagespeed off; + +          index index.php; +          error_page 403 /core/templates/403.php; +          error_page 404 /core/templates/404.php; + +          rewrite ^/.well-known/carddav /remote.php/carddav/ permanent; +          rewrite ^/.well-known/caldav /remote.php/caldav/ permanent; + +          # The following 2 rules are only needed for the user_webfinger app. +          # Uncomment it if you're planning to use this app. +          rewrite ^/.well-known/host-meta /public.php?service=host-meta last; +          rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; +        ''; +        locations = [ +          (nameValuePair "/robots.txt" '' +            allow all; +            log_not_found off; +            access_log off; +          '') +          (nameValuePair "~ ^/(build|tests|config|lib|3rdparty|templates|data)/" '' +            deny all; +          '') + +          (nameValuePair "~ ^/(?:autotest|occ|issue|indie|db_|console)" '' +            deny all; +          '') + +          (nameValuePair "/" '' +            rewrite ^/remote/(.*) /remote.php last; +            rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; +            try_files $uri $uri/ =404; +          '') + +          (nameValuePair "~ \.php(?:$|/)" '' +            fastcgi_split_path_info ^(.+\.php)(/.+)$; +            include ${pkgs.nginx}/conf/fastcgi_params; +            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +            fastcgi_param PATH_INFO $fastcgi_path_info; +            fastcgi_param HTTPS on; +            fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice +            fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool; +            fastcgi_intercept_errors on; +          '') + +          # Adding the cache control header for js and css files +          # Make sure it is BELOW the location ~ \.php(?:$|/) { block +          (nameValuePair "~* \.(?:css|js)$" '' +            add_header Cache-Control "public, max-age=7200"; +            # Add headers to serve security related headers +            add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; +            add_header X-Content-Type-Options nosniff; +            add_header X-Frame-Options "SAMEORIGIN"; +            add_header X-XSS-Protection "1; mode=block"; +            add_header X-Robots-Tag none; +            # Optional: Don't log access to assets +            access_log off; +          '') + +          # Optional: Don't log access to other assets +          (nameValuePair "~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$" '' +            access_log off; +          '') +        ]; +      }; +      services.phpfpm.poolConfigs."${domain}" = '' +        listen = /srv/http/${domain}/phpfpm.pool +        user = nginx +        group = nginx +        pm = dynamic +        pm.max_children = 5 +        pm.start_servers = 2 +        pm.min_spare_servers = 1 +        pm.max_spare_servers = 3 +        listen.owner = nginx +        listen.group = nginx +        # errors to journal +        php_admin_value[error_log] = 'stderr' +        php_admin_flag[log_errors] = on +        catch_workers_output = yes +      ''; +    }; + +  serveWordpress = domains: +    let +      domain = head domains; + +    in { +      krebs.nginx.servers."${domain}" = { +        server-names = domains; +        extraConfig = '' +          root /srv/http/${domain}/; +          index index.php; +          access_log /tmp/nginx_acc.log; +          error_log /tmp/nginx_err.log; +          error_page 404 /404.html; +          error_page 500 502 503 504 /50x.html; +        ''; +        locations = [ +          (nameValuePair "/" '' +            try_files $uri $uri/ /index.php?$args; +          '') +          (nameValuePair "~ \.php$" '' +            fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool; +            include ${pkgs.nginx}/conf/fastcgi.conf; +          '') +          #(nameValuePair "~ /\\." '' +          #  deny all; +          #'') +          #Directives to send expires headers and turn off 404 error logging. +          (nameValuePair "~* ^.+\.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" '' +            access_log off; +            log_not_found off; +            expires max; +          '') +        ]; +      }; +      services.phpfpm.poolConfigs."${domain}" = '' +        listen = /srv/http/${domain}/phpfpm.pool +        user = nginx +        group = nginx +        pm = dynamic +        pm.max_children = 5 +        pm.start_servers = 2 +        pm.min_spare_servers = 1 +        pm.max_spare_servers = 3 +        listen.owner = nginx +        listen.group = nginx +        # errors to journal +        php_admin_value[error_log] = 'stderr' +        php_admin_flag[log_errors] = on +        catch_workers_output = yes +      ''; +    }; + +} diff --git a/lass/2configs/websites/wohnprojekt-rhh.de.nix b/lass/2configs/websites/wohnprojekt-rhh.de.nix index 858054531..fb1a58109 100644 --- a/lass/2configs/websites/wohnprojekt-rhh.de.nix +++ b/lass/2configs/websites/wohnprojekt-rhh.de.nix @@ -1,11 +1,13 @@  { config, pkgs, lib, ... }:  let -  inherit (config.krebs.lib) genid; -  inherit (import ../../4lib { inherit lib pkgs; }) +  inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; }) +    genid +  ; +  inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})      ssl -    servePage; - +    servePage +  ;  in {    imports = [      ( ssl [ "wohnprojekt-rhh.de" ]) diff --git a/lass/4lib/default.nix b/lass/4lib/default.nix index 30cbced49..56943b7ac 100644 --- a/lass/4lib/default.nix +++ b/lass/4lib/default.nix @@ -1,4 +1,4 @@ -{ lib, pkgs, ... }: +{ lib, ... }:  with lib; @@ -7,225 +7,4 @@ rec {    getDefaultGateway = ip:      concatStringsSep "." (take 3 (splitString "." ip) ++ ["1"]); -  manageCerts = domains: -    let -      domain = head domains; -    in { -      security.acme = { -        certs."${domain}" = { -          email = "lassulus@gmail.com"; -          webroot = "/var/lib/acme/challenges/${domain}"; -          plugins = [ -            "account_key.json" -            "key.pem" -            "fullchain.pem" -          ]; -          group = "nginx"; -          allowKeysForGroup = true; -          extraDomains = genAttrs domains (_: null); -        }; -      }; - -      krebs.nginx.servers."${domain}" = { -        locations = [ -          (nameValuePair "/.well-known/acme-challenge" '' -            root /var/lib/acme/challenges/${domain}/; -          '') -        ]; -      }; -    }; - -  ssl = domains: -    { -      imports = [ -        ( manageCerts domains ) -        ( activateACME (head domains) ) -      ]; -    }; - -  activateACME = domain: -    { -      krebs.nginx.servers."${domain}" = { -        ssl = { -          enable = true; -          certificate = "/var/lib/acme/${domain}/fullchain.pem"; -          certificate_key = "/var/lib/acme/${domain}/key.pem"; -        }; -      }; -    }; - -  servePage = domains: -    let -      domain = head domains; -    in { -      krebs.nginx.servers."${domain}" = { -        server-names = domains; -        locations = [ -          (nameValuePair "/" '' -            root /srv/http/${domain}; -          '') -        ]; -      }; -    }; - -  serveOwncloud = domains: -    let -      domain = head domains; -    in { -      krebs.nginx.servers."${domain}" = { -        server-names = domains; -        extraConfig = '' -          # Add headers to serve security related headers -          add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; -          add_header X-Content-Type-Options nosniff; -          add_header X-Frame-Options "SAMEORIGIN"; -          add_header X-XSS-Protection "1; mode=block"; -          add_header X-Robots-Tag none; - -          # Path to the root of your installation -          root /srv/http/${domain}/; -          # set max upload size -          client_max_body_size 10G; -          fastcgi_buffers 64 4K; - -          # Disable gzip to avoid the removal of the ETag header -          gzip off; - -          # Uncomment if your server is build with the ngx_pagespeed module -          # This module is currently not supported. -          #pagespeed off; - -          index index.php; -          error_page 403 /core/templates/403.php; -          error_page 404 /core/templates/404.php; - -          rewrite ^/.well-known/carddav /remote.php/carddav/ permanent; -          rewrite ^/.well-known/caldav /remote.php/caldav/ permanent; - -          # The following 2 rules are only needed for the user_webfinger app. -          # Uncomment it if you're planning to use this app. -          rewrite ^/.well-known/host-meta /public.php?service=host-meta last; -          rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; -        ''; -        locations = [ -          (nameValuePair "/robots.txt" '' -            allow all; -            log_not_found off; -            access_log off; -          '') -          (nameValuePair "~ ^/(build|tests|config|lib|3rdparty|templates|data)/" '' -            deny all; -          '') - -          (nameValuePair "~ ^/(?:autotest|occ|issue|indie|db_|console)" '' -            deny all; -          '') - -          (nameValuePair "/" '' -            rewrite ^/remote/(.*) /remote.php last; -            rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; -            try_files $uri $uri/ =404; -          '') - -          (nameValuePair "~ \.php(?:$|/)" '' -            fastcgi_split_path_info ^(.+\.php)(/.+)$; -            include ${pkgs.nginx}/conf/fastcgi_params; -            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; -            fastcgi_param PATH_INFO $fastcgi_path_info; -            fastcgi_param HTTPS on; -            fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice -            fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool; -            fastcgi_intercept_errors on; -          '') - -          # Adding the cache control header for js and css files -          # Make sure it is BELOW the location ~ \.php(?:$|/) { block -          (nameValuePair "~* \.(?:css|js)$" '' -            add_header Cache-Control "public, max-age=7200"; -            # Add headers to serve security related headers -            add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; -            add_header X-Content-Type-Options nosniff; -            add_header X-Frame-Options "SAMEORIGIN"; -            add_header X-XSS-Protection "1; mode=block"; -            add_header X-Robots-Tag none; -            # Optional: Don't log access to assets -            access_log off; -          '') - -          # Optional: Don't log access to other assets -          (nameValuePair "~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$" '' -            access_log off; -          '') -        ]; -      }; -      services.phpfpm.poolConfigs."${domain}" = '' -        listen = /srv/http/${domain}/phpfpm.pool -        user = nginx -        group = nginx -        pm = dynamic -        pm.max_children = 5 -        pm.start_servers = 2 -        pm.min_spare_servers = 1 -        pm.max_spare_servers = 3 -        listen.owner = nginx -        listen.group = nginx -        # errors to journal -        php_admin_value[error_log] = 'stderr' -        php_admin_flag[log_errors] = on -        catch_workers_output = yes -      ''; -    }; - -  serveWordpress = domains: -    let -      domain = head domains; - -    in { -      krebs.nginx.servers."${domain}" = { -        server-names = domains; -        extraConfig = '' -          root /srv/http/${domain}/; -          index index.php; -          access_log /tmp/nginx_acc.log; -          error_log /tmp/nginx_err.log; -          error_page 404 /404.html; -          error_page 500 502 503 504 /50x.html; -        ''; -        locations = [ -          (nameValuePair "/" '' -            try_files $uri $uri/ /index.php?$args; -          '') -          (nameValuePair "~ \.php$" '' -            fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool; -            include ${pkgs.nginx}/conf/fastcgi.conf; -          '') -          #(nameValuePair "~ /\\." '' -          #  deny all; -          #'') -          #Directives to send expires headers and turn off 404 error logging. -          (nameValuePair "~* ^.+\.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" '' -            access_log off; -            log_not_found off; -            expires max; -          '') -        ]; -      }; -      services.phpfpm.poolConfigs."${domain}" = '' -        listen = /srv/http/${domain}/phpfpm.pool -        user = nginx -        group = nginx -        pm = dynamic -        pm.max_children = 5 -        pm.start_servers = 2 -        pm.min_spare_servers = 1 -        pm.max_spare_servers = 3 -        listen.owner = nginx -        listen.group = nginx -        # errors to journal -        php_admin_value[error_log] = 'stderr' -        php_admin_flag[log_errors] = on -        catch_workers_output = yes -      ''; -    }; -  } | 
