+++ /dev/null
-{ 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"
- 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
- ''}'';
- };
- apache = {
- user = "wwwrun";
- group = "wwwrun";
- modules = [ "proxy_fcgi" ];
- vhostConf =
- assert checkEnv "NIXOPS_${varPrefix}_${envName}_SECRET";
- assert checkEnv "NIXOPS_${varPrefix}_${envName}_PSQL_URL";
- ''
- <FilesMatch "\.php$">
- SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost"
- </FilesMatch>
-
- 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 ''
- <Location />
- Use LDAPConnect
- Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://aten.pro\"></html>"
- </Location>
-
- <Location /backend>
- Use LDAPConnect
- Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://aten.pro\"></html>"
- </Location>
- '' else ''
- Use Stats aten.pro
-
- <Location /backend>
- Use LDAPConnect
- Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://aten.pro\"></html>"
- </Location>
- ''}
-
- <Directory ${webRoot}>
- Options Indexes FollowSymLinks MultiViews Includes
- AllowOverride All
- Require all granted
- DirectoryIndex index.php
- FallbackResource /index.php
- </Directory>
- '';
- };
- 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
- 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