From 623fce6c08bd8e552b847fc95cd68b631e64695f Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 18 Aug 2020 18:10:26 +0200 Subject: [PATCH] Run multi instances by making GROCY_DATAPATH customizable (#939) Previously the data directory was fixed to the GROCY_DATAPATH constant. This commit allows overriding the default GROCY_DATAPATH location by the FastCGI parameter `GROCY_DATAPATH`. Relative paths are modified and get rooted at the top level grocy installation directory. The previous behaviour is preserved in case the new parameter is absent. The following example nginx config snippet shows how to run multiple instances. ```nginx server { location /instance1/ { alias /var/www/grocy/; set $instance instance1; try_files $uri @grocy; } location /instane2/ { alias /var/www/grocy/; set $instance instance2; try_files $uri @grocy; } location @grocy { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME index.php; fastcgi_param GROCY_DATAPATH data/$instance; } } ``` --- public/index.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/public/index.php b/public/index.php index 4d7356ce..55eef364 100644 --- a/public/index.php +++ b/public/index.php @@ -10,7 +10,22 @@ if (file_exists(__DIR__ . '/../embedded.txt')) else { define('GROCY_IS_EMBEDDED_INSTALL', false); - define('GROCY_DATAPATH', __DIR__ . '/../data'); + + $datapath = 'data'; + if (getenv('GROCY_DATAPATH') !== false) + { + $datapath = getenv('GROCY_DATAPATH'); + } + elseif (array_key_exists('GROCY_DATAPATH', $_SERVER)) + { + $datapath = $_SERVER['GROCY_DATAPATH']; + } + + if ($datapath[0] != '/') + { + $datapath = __DIR__ . '/../' . $datapath; + } + define('GROCY_DATAPATH', $datapath); } require_once __DIR__ . '/../helpers/PrerequisiteChecker.php';