]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - virtual/eldiron.nix
Move some more configuration for websites
[perso/Immae/Config/Nix.git] / virtual / eldiron.nix
index 7189c3912c587b8e07501207a6c8d97f03ef97fb..fa5cb5123c95b9b5609fddb3ffc03e77993c3562 100644 (file)
@@ -4,16 +4,23 @@
     enableRollback = true;
   };
 
-  eldiron = { config, pkgs, mylibs, ... }:
+  eldiron = { config, pkgs, mylibs, myconfig, ... }:
     with mylibs;
     let
         mypkgs = pkgs.callPackage ./packages.nix {
-          inherit checkEnv fetchedGit fetchedGitPrivate fetchedGithub;
+          inherit checkEnv fetchedGit fetchedGithub;
         };
     in
   {
     _module.args = {
       mylibs = import ../libs.nix;
+      myconfig = {
+        ips = {
+          main = "176.9.151.89";
+          production = "176.9.151.154";
+          integration = "176.9.151.155";
+        };
+      };
     };
 
     imports = [
       ./modules/gitolite.nix
       ./modules/gitweb.nix
       ./modules/databases.nix
-      ./modules/websites/chloe.nix
-      ./modules/websites/ludivine.nix
-      ./modules/websites/aten.nix
-      ./modules/websites/piedsjaloux.nix
-      ./modules/websites/connexionswing.nix
+      ./modules/websites
     ];
     services.myGitolite.enable = true;
     services.myGitweb.enable = true;
     services.myDatabases.enable = true;
-    services.myWebsites.Chloe.production.enable = true;
-    services.myWebsites.Chloe.integration.enable = true;
-    services.myWebsites.Ludivine.production.enable = true;
-    services.myWebsites.Ludivine.integration.enable = true;
-    services.myWebsites.Aten.production.enable = true;
-    services.myWebsites.Aten.integration.enable = true;
-    services.myWebsites.PiedsJaloux.production.enable = true;
-    services.myWebsites.PiedsJaloux.integration.enable = true;
-    services.myWebsites.Connexionswing.production.enable = true;
-    services.myWebsites.Connexionswing.integration.enable = true;
-
-    nixpkgs.config.packageOverrides = oldpkgs: rec {
-      goaccess = oldpkgs.goaccess.overrideAttrs(old: rec {
-        name = "goaccess-${version}";
-        version = "1.3";
-        src = pkgs.fetchurl {
-          url = "https://tar.goaccess.io/${name}.tar.gz";
-          sha256 = "16vv3pj7pbraq173wlxa89jjsd279004j4kgzlrsk1dz4if5qxwc";
-        };
-        configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ];
-        buildInputs = old.buildInputs ++ [ pkgs.tokyocabinet pkgs.bzip2 ];
-      });
-    };
+    services.myWebsites.production.enable = true;
+    services.myWebsites.integration.enable = true;
 
     networking = {
       firewall = {
         enable = true;
-        allowedTCPPorts = [ 22 80 443 9418 ];
+        allowedTCPPorts = [ 22 9418 ];
       };
     };
 
@@ -66,7 +48,7 @@
       hetzner = {
         #robotUser = "defined in HETZNER_ROBOT_USER";
         #robotPass = "defined in HETZNER_ROBOT_PASS";
-        mainIPv4 = "176.9.151.89";
+        mainIPv4 = myconfig.ips.main;
         partitions = ''
           clearpart --all --initlabel --drives=sda,sdb
 
@@ -96,7 +78,6 @@
       pkgs.telnet
       pkgs.htop
       pkgs.vim
-      pkgs.goaccess
       occ
     ];
 
         install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions
         install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/adminer
         install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/mantisbt
-        install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/ttrss
         install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions/davical
         '';
-      redis = ''
-        mkdir -p /run/redis
-        chown redis /run/redis
-        '';
-      # FIXME: initial sync
-      goaccess = ''
-        mkdir -p /var/lib/goaccess
-        mkdir -p /var/lib/goaccess/aten.pro
-        mkdir -p /var/lib/goaccess/ludivinecassal.com
-        mkdir -p /var/lib/goaccess/piedsjaloux.fr
-        mkdir -p /var/lib/goaccess/osteopathe-cc.fr
-        mkdir -p /var/lib/goaccess/connexionswing.com
-        '';
     };
 
     environment.etc."ssh/ldap_authorized_keys" = let
         sslServerKey = "/var/lib/acme/${domain}/key.pem";
         sslServerChain = "/var/lib/acme/${domain}/fullchain.pem";
         logFormat = "combinedVhost";
-        listen = [ { ip = "*"; port = 443; } ];
-      };
-      apacheConfig = {
-        gzip = {
-          modules = [ "deflate" "filter" ];
-          extraConfig = ''
-            AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
-          '';
-        };
-        ldap = {
-          modules = [ "ldap" "authnz_ldap" ];
-          extraConfig = assert checkEnv "NIXOPS_HTTP_LDAP_PASSWORD"; ''
-            <IfModule ldap_module>
-              LDAPSharedCacheSize 500000
-              LDAPCacheEntries 1024
-              LDAPCacheTTL 600
-              LDAPOpCacheEntries 1024
-              LDAPOpCacheTTL 600
-            </IfModule>
-
-            <Macro LDAPConnect>
-              <IfModule authnz_ldap_module>
-                AuthLDAPURL          ldap://ldap.immae.eu:389/dc=immae,dc=eu
-                AuthLDAPBindDN       cn=httpd,ou=services,dc=immae,dc=eu
-                AuthLDAPBindPassword "${builtins.getEnv "NIXOPS_HTTP_LDAP_PASSWORD"}"
-                AuthType             Basic
-                AuthName             "Authentification requise (Acces LDAP)"
-                AuthBasicProvider    ldap
-              </IfModule>
-            </Macro>
-
-            <Macro Stats %{domain}>
-              Alias /awstats /var/lib/goaccess/%{domain}
-              <Directory /var/lib/goaccess/%{domain}>
-                DirectoryIndex index.html
-                AllowOverride None
-                Require all granted
-              </Directory>
-              <Location /awstats>
-                Use LDAPConnect
-                Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu
-              </Location>
-            </Macro>
-          '';
-        };
-        http2 = {
-          modules = [ "http2" ];
-          extraConfig = ''
-            Protocols h2 http/1.1
-          '';
-        };
-        customLog = {
-          modules = [];
-          extraConfig = ''
-            LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost
-          '';
-        };
+        listen = [
+          { ip = "176.9.151.89";  port = 443; }
+        ];
       };
+      apacheConfig = config.services.myWebsites.apacheConfig;
     in rec {
       enable = true;
       logPerVirtualHost = true;
       extraModules = pkgs.lib.lists.unique (
         mypkgs.adminer.apache.modules ++
         mypkgs.nextcloud.apache.modules ++
-        mypkgs.connexionswing_dev.apache.modules ++
-        mypkgs.connexionswing_prod.apache.modules ++
-        mypkgs.ludivinecassal_dev.apache.modules ++
-        mypkgs.ludivinecassal_prod.apache.modules ++
-        mypkgs.piedsjaloux_dev.apache.modules ++
-        mypkgs.piedsjaloux_prod.apache.modules ++
-        mypkgs.chloe_dev.apache.modules ++
-        mypkgs.chloe_prod.apache.modules ++
-        mypkgs.aten_dev.apache.modules ++
-        mypkgs.aten_prod.apache.modules ++
         mypkgs.ympd.apache.modules ++
         mypkgs.git.web.apache.modules ++
         mypkgs.mantisbt.apache.modules ++
         mypkgs.ttrss.apache.modules ++
         mypkgs.roundcubemail.apache.modules ++
-        pkgs.lib.lists.flatten (pkgs.lib.attrsets.mapAttrsToList (n: v: v.modules) apacheConfig) ++
-        [ "macro" ]);
+        pkgs.lib.lists.flatten (pkgs.lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig));
       extraConfig = builtins.concatStringsSep "\n"
-        (pkgs.lib.attrsets.mapAttrsToList (n: v: v.extraConfig) apacheConfig);
+        (builtins.filter (x: x != null) (pkgs.lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig));
       virtualHosts = [
         (withConf "eldiron" // {
           hostName = "eldiron.immae.eu";
             mypkgs.davical.apache.vhostConf
           ];
         })
-        (withConf "eldiron" // {
-          hostName = "connexionswing.immae.eu";
-          serverAliases = [ "sandetludo.immae.eu" ];
-          documentRoot = mypkgs.connexionswing_dev.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.connexionswing_dev.apache.vhostConf
-          ];
-        })
-        (withConf "connexionswing" // {
-          hostName = "connexionswing.com";
-          serverAliases = [ "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ];
-          documentRoot = mypkgs.connexionswing_prod.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.connexionswing_prod.apache.vhostConf
-          ];
-        })
-        (withConf "eldiron" // {
-          hostName = "ludivine.immae.eu";
-          documentRoot = mypkgs.ludivinecassal_dev.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.ludivinecassal_dev.apache.vhostConf
-          ];
-        })
-        (withConf "ludivinecassal" // {
-          hostName = "ludivinecassal.com";
-          serverAliases = [ "www.ludivinecassal.com" ];
-          documentRoot = mypkgs.ludivinecassal_prod.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.ludivinecassal_prod.apache.vhostConf
-          ];
-        })
-        (withConf "eldiron" // {
-          hostName = "piedsjaloux.immae.eu";
-          documentRoot = mypkgs.piedsjaloux_dev.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.piedsjaloux_dev.apache.vhostConf
-          ];
-        })
-        (withConf "piedsjaloux" // {
-          hostName = "piedsjaloux.fr";
-          serverAliases = [ "www.piedsjaloux.fr" ];
-          documentRoot = mypkgs.piedsjaloux_prod.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.piedsjaloux_prod.apache.vhostConf
-          ];
-        })
-        (withConf "eldiron" // {
-          hostName = "chloe.immae.eu";
-          documentRoot = mypkgs.chloe_dev.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.chloe_dev.apache.vhostConf
-          ];
-        })
-        (withConf "chloe" // {
-          hostName = "osteopathe-cc.fr";
-          serverAliases = [ "www.osteopathe-cc.fr" ];
-          documentRoot = mypkgs.chloe_prod.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.chloe_prod.apache.vhostConf
-          ];
-        })
-        (withConf "eldiron" // {
-          hostName = "dev.aten.pro";
-          documentRoot = mypkgs.aten_dev.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.aten_dev.apache.vhostConf
-          ];
-        })
-        (withConf "aten" // {
-          hostName = "aten.pro";
-          serverAliases = [ "www.aten.pro" ];
-          documentRoot = mypkgs.aten_prod.webRoot;
-          extraConfig = builtins.concatStringsSep "\n" [
-            mypkgs.aten_prod.apache.vhostConf
-          ];
-        })
         (withConf "eldiron" // {
           hostName = "cloud.immae.eu";
           documentRoot = mypkgs.nextcloud.webRoot;
       ];
     };
 
-    services.cron = {
-      enable = true;
-      systemCronJobs = let
-        stats = domain: conf: let
-          d = pkgs.writeScriptBin "stats-${domain}" ''
-            #!${pkgs.stdenv.shell}
-            set -e
-            shopt -s nullglob
-            date_regex=$(LC_ALL=C date -d yesterday +'%d\/%b\/%Y')
-            TMPFILE=$(mktemp)
-            trap "rm -f $TMPFILE" EXIT
-
-            cat /var/log/httpd/access_log-${domain} | sed -n "/\\[$date_regex/ p" > $TMPFILE
-            for i in /var/log/httpd/access_log-${domain}*.gz; do
-              zcat "$i" | sed -n "/\\[$date_regex/ p" >> $TMPFILE
-            done
-            goaccess $TMPFILE --no-progress -o /var/lib/goaccess/${domain}/index.html -p ${conf}
-            '';
-          in "${d}/bin/stats-${domain}";
-      # FIXME: running several goaccess simultaneously seems to be
-      # bugged?
-      in [
-        "5 0 * * * root ${stats "aten.pro" ./packages/aten_goaccess.conf}"
-        "6 0 * * * root ${stats "ludivinecassal.com" ./packages/ludivinecassal_goaccess.conf}"
-        "7 0 * * * root ${stats "piedsjaloux.fr" ./packages/piedsjaloux_goaccess.conf}"
-        "8 0 * * * root ${stats "osteopathe-cc.fr" ./packages/chloe_goaccess.conf}"
-        "9 0 * * * root ${stats "connexionswing.com" ./packages/connexionswing_goaccess.conf}"
-        ];
-    };
-
     systemd.services.tt-rss = {
       description = "Tiny Tiny RSS feeds update daemon";
       serviceConfig = {