X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=nixops%2Fmodules%2Fwebsites%2Faten%2Faten.nix;h=04876a1a2afc95b3c2bc58338b87abe06dfd51bb;hb=1bd8b03eeaafa9345282d8aaf6499bc80adf062f;hp=e27688d26c23014713b1adb1666ffb5e120c072e;hpb=7da3ceece7fe6c49046e97f37fc353db9b8a981c;p=perso%2FImmae%2FConfig%2FNix.git
diff --git a/nixops/modules/websites/aten/aten.nix b/nixops/modules/websites/aten/aten.nix
index e27688d..04876a1 100644
--- a/nixops/modules/websites/aten/aten.nix
+++ b/nixops/modules/websites/aten/aten.nix
@@ -1,137 +1,104 @@
-{ lib, writeText, fetchedGitPrivate, stdenv, composerEnv, fetchurl, fetchgit, python, nodejs, libsass, yarn2nix }:
-let
- aten = { config }: rec {
- environment = config.environment;
- varDir = "/var/lib/aten_${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 = 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"
-
-
- SetEnv APP_ENV "${environment}"
+{ 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"
+
- ${if environment == "dev" then ''
-
- Use LDAPConnect
- Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 ""
-
+ Include /var/secrets/webapps/${app.environment}-aten
-
- Use LDAPConnect
- Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu
- ErrorDocument 401 ""
-
- '' else ''
- Use Stats aten.pro
+ ${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=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
-
- 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
- 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
- '';
- };
- yarnModules = let
- info = fetchedGitPrivate ./aten.json;
- in
- yarn2nix.mkYarnModules {
- name = "aten-yarn-modules";
- packageJSON = "${info.src}/package.json";
- yarnLock = "${info.src}/yarn.lock";
- pkgConfig = {
- 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 = "12zzsf8my43b8qnlacp871ih5vqafl2vlpqp51xp6h3gckn2frwy";
- };
- 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}"
- export DATABASE_URL="${config.psql_url}"
- export APP_SECRET="${config.secret}"
- '';
- postInstall = ''
- cd $out
- ln -sf ${yarnModules}/node_modules .
- yarn run --offline encore production
- rm -rf var/{log,cache}
- ln -sf ../../../../../../../${varDir}/{log,cache} var/
- '';
- buildInputs = [ yarnModules yarn2nix yarn2nix.yarn ];
- });
- webRoot = "${webappDir}/public";
+
+ 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 ${app.varDir}
+ install -m 0750 -o ${apache.user} -g ${apache.group} -d ${app.varDir}/phpSessions
+ '';
};
-in
- aten
+}