From 1bd8b03eeaafa9345282d8aaf6499bc80adf062f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Sat, 11 May 2019 12:16:57 +0200 Subject: [PATCH] Move Aten packages to pkgs --- nixops/modules/websites/aten/aten.nix | 249 +++++++----------- nixops/modules/websites/aten/default.nix | 21 +- pkgs/default.nix | 7 +- pkgs/private/default.nix | 8 + .../private/webapps}/aten/aten.json | 0 pkgs/private/webapps/aten/default.nix | 56 ++++ .../private/webapps}/aten/php-packages.nix | 0 pkgs/private/webapps/default.nix | 4 + 8 files changed, 183 insertions(+), 162 deletions(-) create mode 100644 pkgs/private/default.nix rename {nixops/modules/websites => pkgs/private/webapps}/aten/aten.json (100%) create mode 100644 pkgs/private/webapps/aten/default.nix rename {nixops/modules/websites => pkgs/private/webapps}/aten/php-packages.nix (100%) create mode 100644 pkgs/private/webapps/default.nix diff --git a/nixops/modules/websites/aten/aten.nix b/nixops/modules/websites/aten/aten.nix index c35af6f..04876a1 100644 --- a/nixops/modules/websites/aten/aten.nix +++ b/nixops/modules/websites/aten/aten.nix @@ -1,157 +1,104 @@ -{ lib, writeText, fetchedGitPrivate, stdenv, runCommand, composerEnv, fetchurl, fetchgit, jq, python, nodejs, libsass, yarn2nixPackage }: -let - aten = { config }: rec { - environment = config.environment; - varDir = "/var/lib/aten_${environment}"; - phpFpm = rec { - preStart = '' - if [ ! -f "${varDir}/currentWebappDir" -o \ - ! -f "${varDir}/currentKey" -o \ - "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ - || ! sha512sum -c --status ${varDir}/currentKey; then - pushd ${webappDir} > /dev/null - /run/wrappers/bin/sudo -u wwwrun APP_ENV=${environment} ./bin/console --env=${environment} cache:clear --no-warmup - popd > /dev/null - echo -n "${webappDir}" > ${varDir}/currentWebappDir - sha512sum /var/secrets/webapps/${environment}-aten > ${varDir}/currentKey - fi - ''; - serviceDeps = [ "postgresql.service" ]; - socket = "/var/run/phpfpm/aten-${environment}.sock"; - pool = '' - listen = ${socket} - user = ${apache.user} - group = ${apache.group} - listen.owner = ${apache.user} - listen.group = ${apache.group} - php_admin_value[upload_max_filesize] = 20M - php_admin_value[post_max_size] = 20M - ;php_admin_flag[log_errors] = on - php_admin_value[open_basedir] = "${webappDir}:${varDir}:/tmp" - php_admin_value[session.save_path] = "${varDir}/phpSessions" - ${if environment == "dev" then '' - pm = ondemand - pm.max_children = 5 - pm.process_idle_timeout = 60 - env[SYMFONY_DEBUG_MODE] = "yes" - '' else '' - pm = dynamic - pm.max_children = 20 - pm.start_servers = 2 - pm.min_spare_servers = 1 - pm.max_spare_servers = 3 - ''}''; - }; - keys = [{ - dest = "webapps/${environment}-aten"; - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - SetEnv APP_ENV "${environment}" - SetEnv APP_SECRET "${config.secret}" - SetEnv DATABASE_URL "${config.psql_url}" - ''; - }]; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - webappName = "aten_${environment}"; - root = "/run/current-system/webapps/${webappName}"; - vhostConf = '' - - SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" - +{ aten, lib, config }: rec { + app = aten.override { inherit (config) environment; }; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u wwwrun APP_ENV=${app.environment} ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-aten > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "postgresql.service" ]; + socket = "/var/run/phpfpm/aten-${app.environment}.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + keys = [{ + dest = "webapps/${app.environment}-aten"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + SetEnv APP_ENV "${app.environment}" + SetEnv APP_SECRET "${config.secret}" + SetEnv DATABASE_URL "${config.psql_url}" + ''; + }]; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "aten_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + - Include /var/secrets/webapps/${environment}-aten + Include /var/secrets/webapps/${app.environment}-aten - ${if environment == "dev" then '' - - Use LDAPConnect - Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + - - Use LDAPConnect - Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - '' else '' - Use Stats aten.pro + + Use LDAPConnect + Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + '' else '' + Use Stats aten.pro - - Use LDAPConnect - Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - ''} + + Use LDAPConnect + Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + ''} - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - DirectoryIndex index.php - FallbackResource /index.php - - ''; - }; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - yarnModules = let - info = fetchedGitPrivate ./aten.json; - packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' - cat ${info.src}/package.json | jq -r '.version = "v1.0.0"|.name="aten"' > $out - ''; - in - yarn2nixPackage.mkYarnModules rec { - name = "aten-yarn"; - pname = name; - version = "v1.0.0"; - packageJSON = packagejson; - yarnLock = "${info.src}/yarn.lock"; - pkgConfig = { - all = { - buildInputs = [ yarn2nixPackage.src ]; - }; - node-sass = { - buildInputs = [ libsass python ]; - postInstall = let - nodeHeaders = fetchurl { - url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; - sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; - }; - in - '' - node scripts/build.js --tarball=${nodeHeaders} - ''; - }; - }; - }; - webappDir = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // - fetchedGitPrivate ./aten.json // - rec { - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - export APP_ENV="${environment}" - ''; - postInstall = '' - ln -sf ${yarnModules}/node_modules . - yarn run --offline encore production - rm -rf var/{log,cache} - ln -sf ${varDir}/{log,cache} var/ - ''; - buildInputs = [ yarnModules yarn2nixPackage.yarn ]; - }); - webRoot = "${webappDir}/public"; + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + DirectoryIndex index.php + FallbackResource /index.php + + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${app.varDir} + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${app.varDir}/phpSessions + ''; }; -in - aten +} diff --git a/nixops/modules/websites/aten/default.nix b/nixops/modules/websites/aten/default.nix index fd3f7cc..efd3619 100644 --- a/nixops/modules/websites/aten/default.nix +++ b/nixops/modules/websites/aten/default.nix @@ -1,14 +1,15 @@ { lib, pkgs, config, myconfig, mylibs, ... }: let - aten = pkgs.callPackage ./aten.nix { inherit (mylibs) fetchedGitPrivate yarn2nixPackage; }; - aten_dev = aten { - config = myconfig.env.websites.aten.integration; - }; - aten_prod = aten { - config = myconfig.env.websites.aten.production; - }; + aten_dev = pkgs.callPackage ./aten.nix { + inherit (pkgs.private.webapps) aten; + config = myconfig.env.websites.aten.integration; + }; + aten_prod = pkgs.callPackage ./aten.nix { + inherit (pkgs.private.webapps) aten; + config = myconfig.env.websites.aten.production; + }; - cfg = config.services.myWebsites.Aten; + cfg = config.services.myWebsites.Aten; in { options.services.myWebsites.Aten = { production = { @@ -37,7 +38,7 @@ in { system.activationScripts.aten_prod = aten_prod.activationScript; system.extraSystemBuilderCmds = '' mkdir -p $out/webapps - ln -s ${aten_prod.webRoot} $out/webapps/${aten_prod.apache.webappName} + ln -s ${aten_prod.app.webRoot} $out/webapps/${aten_prod.apache.webappName} ''; services.myWebsites.apacheConfig.aten_prod.modules = aten_prod.apache.modules; services.myWebsites.production.modules = aten_prod.apache.modules; @@ -57,7 +58,7 @@ in { system.activationScripts.aten_dev = aten_dev.activationScript; system.extraSystemBuilderCmds = '' mkdir -p $out/webapps - ln -s ${aten_dev.webRoot} $out/webapps/${aten_dev.apache.webappName} + ln -s ${aten_dev.app.webRoot} $out/webapps/${aten_dev.apache.webappName} ''; services.myWebsites.integration.modules = aten_dev.apache.modules; services.myWebsites.integration.vhostConfs.aten = { diff --git a/pkgs/default.nix b/pkgs/default.nix index b97b267..18fc3b3 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,6 +1,7 @@ { pkgs }: with pkgs; -let mylibs = import ../libs.nix { inherit pkgs; }; +let + mylibs = import ../libs.nix { inherit pkgs; }; in rec { boinctui = callPackage ../pkgs/boinctui {}; @@ -38,4 +39,8 @@ rec { composerEnv = callPackage ./composer-env {}; webapps = callPackage ./webapps { inherit mylibs composerEnv; }; + + private = if builtins.pathExists (./. + "/private") + then import ./private { inherit pkgs; } + else { webapps = {}; }; } diff --git a/pkgs/private/default.nix b/pkgs/private/default.nix new file mode 100644 index 0000000..951a23f --- /dev/null +++ b/pkgs/private/default.nix @@ -0,0 +1,8 @@ +{ pkgs }: +with pkgs; +let + mylibs = import ../../libs.nix { inherit pkgs; }; +in +rec { + webapps = callPackage ./webapps { inherit mylibs; inherit (pkgs) composerEnv; }; +} diff --git a/nixops/modules/websites/aten/aten.json b/pkgs/private/webapps/aten/aten.json similarity index 100% rename from nixops/modules/websites/aten/aten.json rename to pkgs/private/webapps/aten/aten.json diff --git a/pkgs/private/webapps/aten/default.nix b/pkgs/private/webapps/aten/default.nix new file mode 100644 index 0000000..e6ca048 --- /dev/null +++ b/pkgs/private/webapps/aten/default.nix @@ -0,0 +1,56 @@ +{ environment ? "prod" +, varDir ? "/var/lib/aten_${environment}" +, mylibs, composerEnv, fetchgit, runCommand, nodejs, jq, libsass, python, fetchurl }: +let + packagesource = mylibs.fetchedGitPrivate ./aten.json; + packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' + cat ${packagesource.src}/package.json | jq -r '.version = "v1.0.0"|.name="aten"' > $out + ''; + yarnModules = mylibs.yarn2nixPackage.mkYarnModules rec { + name = "aten-yarn"; + pname = name; + version = "v1.0.0"; + packageJSON = packagejson; + yarnLock = "${packagesource.src}/yarn.lock"; + pkgConfig = { + all = { + buildInputs = [ mylibs.yarn2nixPackage.src ]; + }; + node-sass = { + buildInputs = [ libsass python ]; + postInstall = let + nodeHeaders = fetchurl { + url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; + sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; + }; + in + '' + node scripts/build.js --tarball=${nodeHeaders} + ''; + }; + }; + }; + app = composerEnv.buildPackage ( + import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // + packagesource // + rec { + noDev = (environment == "prod"); + preInstall = '' + export SYMFONY_ENV="${environment}" + export APP_ENV="${environment}" + ''; + postInstall = '' + ln -sf ${yarnModules}/node_modules . + yarn run --offline encore production + rm -rf var/{log,cache} + ln -sf ${varDir}/{log,cache} var/ + ''; + buildInputs = [ yarnModules mylibs.yarn2nixPackage.yarn ]; + passthru = { + inherit varDir; + inherit environment; + webRoot = "${app}/public"; + }; + } + ); +in app diff --git a/nixops/modules/websites/aten/php-packages.nix b/pkgs/private/webapps/aten/php-packages.nix similarity index 100% rename from nixops/modules/websites/aten/php-packages.nix rename to pkgs/private/webapps/aten/php-packages.nix diff --git a/pkgs/private/webapps/default.nix b/pkgs/private/webapps/default.nix new file mode 100644 index 0000000..8c45b89 --- /dev/null +++ b/pkgs/private/webapps/default.nix @@ -0,0 +1,4 @@ +{ callPackage, mylibs, composerEnv, lib }: +rec { + aten = callPackage ./aten {}; +} -- 2.41.0