{ lib, checkEnv, writeText, fetchedGitPrivate, stdenv, php, git, cacert, phpPackages, yarn }: let aten = { environment ? "dev" }: rec { varPrefix = "ATEN"; varDir = "/var/lib/aten_${environment}"; envName= lib.strings.toUpper environment; phpFpm = rec { 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" ${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 ''}''; }; apache = { user = "wwwrun"; group = "wwwrun"; modules = [ "proxy_fcgi" ]; vhostConf = assert checkEnv "NIXOPS_${varPrefix}_${envName}_SECRET"; assert checkEnv "NIXOPS_${varPrefix}_${envName}_PSQL_URL"; '' Use Stats aten.pro SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" SetEnv APP_ENV "${environment}" SetEnv APP_SECRET "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_SECRET"} SetEnv DATABASE_URL "${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_PSQL_URL"} ${if 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 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} if [ ! -f "${varDir}/currentWebappDir" -o \ "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ]; then pushd ${webappDir} > /dev/null $wrapperDir/sudo -u wwwrun APP_ENV=${environment} ./bin/console --env=${environment} cache:clear --no-warmup popd > /dev/null echo -n "${webappDir}" > ${varDir}/currentWebappDir fi ''; }; webappDir = stdenv.mkDerivation (fetchedGitPrivate ./aten.json // rec { # FIXME: can we do better than symlink? # FIXME: initial sync # FIXME: backup # FIXME: usage statistics buildPhase = '' export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt export APP_ENV="${environment}" export DATABASE_URL="${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_PSQL_URL"}" export APP_SECRET="${builtins.getEnv "NIXOPS_${varPrefix}_${envName}_SECRET"}" ${if environment == "dev" then '' composer install '' else '' SYMFONY_ENV=prod composer install --no-dev ''} yarn install yarn run encore production rm -rf var ln -sf ../../../../../${varDir} var ''; installPhase = '' cp -a . $out ''; buildInputs = [ php git cacert phpPackages.composer yarn ]; }); webRoot = "${webappDir}/public"; }; in aten