Merge pull request #326 from nextcloud/enh/271/allow-to-change-datadir

allow to change the location of Nextclouds datadir
This commit is contained in:
Simon L 2022-03-09 12:41:58 +01:00 committed by GitHub
commit d170feb1e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 65 additions and 2 deletions

View file

@ -72,6 +72,19 @@ elif ! docker volume ls | grep -q "nextcloud_aio_mastercontainer"; then
fi fi
# Check for other options # Check for other options
if [ -n "$NEXTCLOUD_DATADIR" ]; then
if ! echo "$NEXTCLOUD_DATADIR" | grep -q "^/mnt/" \
&& ! echo "$NEXTCLOUD_DATADIR" | grep -q "^/media/"
then
echo "You've set NEXTCLOUD_DATADIR but not to an allowed value.
The string must start with '/mnt/' or '/media/'. E.g. '/mnt/ncdata'"
exit 1
elif [ "$NEXTCLOUD_DATADIR" = "/mnt/" ] || [ "$NEXTCLOUD_DATADIR" = "/media/" ]; then
echo "You've set NEXTCLOUD_DATADIR but not to an allowed value.
The string must start with '/mnt/' or '/media/' and not be equal to these."
exit 1
fi
fi
if [ -n "$NEXTCLOUD_MOUNT" ]; then if [ -n "$NEXTCLOUD_MOUNT" ]; then
if ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/mnt/" \ if ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/mnt/" \
&& ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/media/" \ && ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/media/" \
@ -85,6 +98,12 @@ The string must be equal to/start with '/mnt/' or '/media/' or be equal to '/var
exit 1 exit 1
fi fi
fi fi
if [ -n "$NEXTCLOUD_DATADIR" ] && [ -n "$NEXTCLOUD_MOUNT" ]; then
if [ "$NEXTCLOUD_DATADIR" = "$NEXTCLOUD_MOUNT" ]; then
echo "NEXTCLOUD_DATADIR and NEXTCLOUD_MOUNT are not allowed to be equal."
exit 1
fi
fi
if [ -n "$APACHE_PORT" ]; then if [ -n "$APACHE_PORT" ]; then
if ! check_if_number "$APACHE_PORT"; then if ! check_if_number "$APACHE_PORT"; then
echo "You provided an Apache port but did not only use numbers" echo "You provided an Apache port but did not only use numbers"

View file

@ -21,6 +21,15 @@ redis.session.lock_retries = -1
redis.session.lock_wait_time = 10000 redis.session.lock_wait_time = 10000
REDIS_CONF REDIS_CONF
# Check permissions in ncdata
touch "/mnt/ncdata/this-is-a-test-file"
if ! [ -f "/mnt/ncdata/this-is-a-test-file" ]; then
echo "The www-data user doesn't seem to have access rights in /mnt/ncdata.
Did you maybe change the datadir and did forget to apply the correct permissions?"
exit 1
fi
rm "/mnt/ncdata/this-is-a-test-file"
if [ -f /var/www/html/version.php ]; then if [ -f /var/www/html/version.php ]; then
# shellcheck disable=SC2016 # shellcheck disable=SC2016
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')" installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
@ -223,6 +232,13 @@ if ! [ -f "/mnt/ncdata/skip.update" ]; then
fi fi
fi fi
# Check if appdata is present
# If not, something broke (e.g. changing ncdatadir after aio was first started)
if [ -z "$(find "/mnt/ncdata/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*")" ]; then
echo "Appdata is not present. Did you maybe change the datadir after aio was first started?"
exit 1
fi
# Apply one-click-instance settings # Apply one-click-instance settings
echo "Applying one-click-instance settings..." echo "Applying one-click-instance settings..."
php /var/www/html/occ config:system:set one-click-instance --value=true --type=bool php /var/www/html/occ config:system:set one-click-instance --value=true --type=bool

View file

@ -96,7 +96,7 @@
"writeable": true "writeable": true
}, },
{ {
"name": "nextcloud_aio_nextcloud_data", "name": "%NEXTCLOUD_DATADIR%",
"location": "/mnt/ncdata", "location": "/mnt/ncdata",
"writeable": true "writeable": true
}, },
@ -215,7 +215,7 @@
"writeable": true "writeable": true
}, },
{ {
"name": "nextcloud_aio_nextcloud_data", "name": "%NEXTCLOUD_DATADIR%",
"location": "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data", "location": "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data",
"writeable": true "writeable": true
}, },

View file

@ -78,6 +78,11 @@ class ContainerDefinitionFetcher
if($value['name'] === '') { if($value['name'] === '') {
continue; continue;
} }
} elseif ($value['name'] === '%NEXTCLOUD_DATADIR%') {
$value['name'] = $this->configurationManager->GetNextcloudDatadirMount();
if ($value['name'] === '') {
continue;
}
} }
if($value['location'] === '%NEXTCLOUD_MOUNT%') { if($value['location'] === '%NEXTCLOUD_MOUNT%') {
$value['location'] = $this->configurationManager->GetNextcloudMount(); $value['location'] = $this->configurationManager->GetNextcloudMount();

View file

@ -337,4 +337,27 @@ class ConfigurationManager
return $mount; return $mount;
} }
} }
public function GetNextcloudDatadirMount() : string {
$mount = getenv('NEXTCLOUD_DATADIR');
if ($mount === false) {
$config = $this->GetConfig();
if (!isset($config['nextcloud_datadir']) || $config['nextcloud_datadir'] === '') {
$config['nextcloud_datadir'] = 'nextcloud_aio_nextcloud_data';
}
return $config['nextcloud_datadir'];
} else {
if(file_exists(DataConst::GetConfigFile())) {
$config = $this->GetConfig();
if (!isset($config['nextcloud_datadir'])) {
$config['nextcloud_datadir'] = '';
}
if ($mount !== $config['nextcloud_datadir']) {
$config['nextcloud_datadir'] = $mount;
$this->WriteConfig($config);
}
}
return $mount;
}
}
} }