mirror of
https://github.com/nextcloud/all-in-one.git
synced 2025-12-19 22:16:49 +00:00
allow to define nextcloud_exec_commands in containers definition
Signed-off-by: Simon L <szaimen@e.mail.de>
This commit is contained in:
parent
3e04dd5c2e
commit
e4de4dcb67
10 changed files with 77 additions and 17 deletions
|
|
@ -241,7 +241,7 @@ RUN set -ex; \
|
||||||
chmod +x /cron.sh && \
|
chmod +x /cron.sh && \
|
||||||
chmod +x /notify.sh && \
|
chmod +x /notify.sh && \
|
||||||
chmod +x /notify-all.sh && \
|
chmod +x /notify-all.sh && \
|
||||||
chmod +x /activate-collabora.sh && \
|
chmod +x /run-exec-commands.sh && \
|
||||||
chmod +x /healthcheck.sh
|
chmod +x /healthcheck.sh
|
||||||
|
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [ "$COLLABORA_ENABLED" != yes ]; then
|
|
||||||
# Basically sleep for forever if collabora is not enabled
|
|
||||||
sleep inf
|
|
||||||
fi
|
|
||||||
while ! nc -z "$NC_DOMAIN" 443; do
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
sleep 10
|
|
||||||
echo "Activating collabora config..."
|
|
||||||
php /var/www/html/occ richdocuments:activate-config
|
|
||||||
sleep inf
|
|
||||||
23
Containers/nextcloud/run-exec-commands.sh
Normal file
23
Containers/nextcloud/run-exec-commands.sh
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
while ! nc -z "$NC_DOMAIN" 443; do
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
if [ -n "$NEXTCLOUD_EXEC_COMMANDS" ]; then
|
||||||
|
echo "#!/bin/bash" > /tmp/nextcloud-exec-commands
|
||||||
|
echo "$NEXTCLOUD_EXEC_COMMANDS" >> /tmp/nextcloud-exec-commands
|
||||||
|
if ! grep "one-click-instance" /tmp/nextcloud-exec-commands; then
|
||||||
|
bash /tmp/nextcloud-exec-commands
|
||||||
|
rm /tmp/nextcloud-exec-commands
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Collabora must work also if using manual-install
|
||||||
|
if [ "$COLLABORA_ENABLED" = yes ]; then
|
||||||
|
echo "Activating collabora config..."
|
||||||
|
php /var/www/html/occ richdocuments:activate-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep inf
|
||||||
|
|
@ -33,10 +33,10 @@ stderr_logfile_maxbytes=0
|
||||||
command=/var/www/html/custom_apps/notify_push/bin/%(ENV_CPU_ARCH)s/notify_push /var/www/html/config/config.php --port 7867 --redis-url redis://:%(ENV_REDIS_HOST_PASSWORD)s@%(ENV_REDIS_HOST)s
|
command=/var/www/html/custom_apps/notify_push/bin/%(ENV_CPU_ARCH)s/notify_push /var/www/html/config/config.php --port 7867 --redis-url redis://:%(ENV_REDIS_HOST_PASSWORD)s@%(ENV_REDIS_HOST)s
|
||||||
user=www-data
|
user=www-data
|
||||||
|
|
||||||
[program:activate-collabora]
|
[program:run-exec-commands]
|
||||||
stdout_logfile=/dev/stdout
|
stdout_logfile=/dev/stdout
|
||||||
stdout_logfile_maxbytes=0
|
stdout_logfile_maxbytes=0
|
||||||
stderr_logfile=/dev/stderr
|
stderr_logfile=/dev/stderr
|
||||||
stderr_logfile_maxbytes=0
|
stderr_logfile_maxbytes=0
|
||||||
command=/activate-collabora.sh
|
command=/run-exec-commands.sh
|
||||||
user=www-data
|
user=www-data
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].internal_port)')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].secrets)')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].secrets)')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].devices)')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].devices)')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].backup_volumes)')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].backup_volumes)')"
|
||||||
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].nextcloud_exec_commands)')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-watchtower"))')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-watchtower"))')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-domaincheck"))')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-domaincheck"))')"
|
||||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-borgbackup"))')"
|
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-borgbackup"))')"
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,14 @@
|
||||||
"pattern": "^nextcloud_aio_[a-z_]+$"
|
"pattern": "^nextcloud_aio_[a-z_]+$"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nextcloud_exec_commands": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^(php /var/www/html/occ .*|echo .*)$",
|
||||||
|
"minlength": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
"volumes": {
|
"volumes": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
|
|
|
||||||
|
|
@ -228,7 +228,11 @@
|
||||||
"writeable": true
|
"writeable": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"restart": "unless-stopped"
|
"restart": "unless-stopped",
|
||||||
|
"nextcloud_exec_commands": [
|
||||||
|
"echo 'Activating collabora config...'",
|
||||||
|
"php /var/www/html/occ richdocuments:activate-config"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"container_name": "nextcloud-aio-talk",
|
"container_name": "nextcloud-aio-talk",
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ class Container {
|
||||||
private bool $apparmorUnconfined;
|
private bool $apparmorUnconfined;
|
||||||
/** @var string[] */
|
/** @var string[] */
|
||||||
private array $backupVolumes;
|
private array $backupVolumes;
|
||||||
|
private array $nextcloudExecCommands;
|
||||||
private DockerActionManager $dockerActionManager;
|
private DockerActionManager $dockerActionManager;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
|
|
@ -48,6 +49,7 @@ class Container {
|
||||||
int $shmSize,
|
int $shmSize,
|
||||||
bool $apparmorUnconfined,
|
bool $apparmorUnconfined,
|
||||||
array $backupVolumes,
|
array $backupVolumes,
|
||||||
|
array $nextcloudExecCommands,
|
||||||
DockerActionManager $dockerActionManager
|
DockerActionManager $dockerActionManager
|
||||||
) {
|
) {
|
||||||
$this->identifier = $identifier;
|
$this->identifier = $identifier;
|
||||||
|
|
@ -66,6 +68,7 @@ class Container {
|
||||||
$this->shmSize = $shmSize;
|
$this->shmSize = $shmSize;
|
||||||
$this->apparmorUnconfined = $apparmorUnconfined;
|
$this->apparmorUnconfined = $apparmorUnconfined;
|
||||||
$this->backupVolumes = $backupVolumes;
|
$this->backupVolumes = $backupVolumes;
|
||||||
|
$this->nextcloudExecCommands = $nextcloudExecCommands;
|
||||||
$this->dockerActionManager = $dockerActionManager;
|
$this->dockerActionManager = $dockerActionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -148,6 +151,10 @@ class Container {
|
||||||
return $this->dependsOn;
|
return $this->dependsOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function GetNextcloudExecCommands() : array {
|
||||||
|
return $this->nextcloudExecCommands;
|
||||||
|
}
|
||||||
|
|
||||||
public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
|
public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
|
||||||
return $this->containerEnvironmentVariables;
|
return $this->containerEnvironmentVariables;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,11 @@ class ContainerDefinitionFetcher
|
||||||
$backupVolumes = $entry['backup_volumes'];
|
$backupVolumes = $entry['backup_volumes'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$nextcloudExecCommands = [];
|
||||||
|
if (isset($entry['nextcloud_exec_commands'])) {
|
||||||
|
$nextcloudExecCommands = $entry['nextcloud_exec_commands'];
|
||||||
|
}
|
||||||
|
|
||||||
$containers[] = new Container(
|
$containers[] = new Container(
|
||||||
$entry['container_name'],
|
$entry['container_name'],
|
||||||
$displayName,
|
$displayName,
|
||||||
|
|
@ -250,6 +255,7 @@ class ContainerDefinitionFetcher
|
||||||
$shmSize,
|
$shmSize,
|
||||||
$apparmorUnconfined,
|
$apparmorUnconfined,
|
||||||
$backupVolumes,
|
$backupVolumes,
|
||||||
|
$nextcloudExecCommands,
|
||||||
$this->container->get(DockerActionManager::class)
|
$this->container->get(DockerActionManager::class)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,10 @@ class DockerActionManager
|
||||||
}
|
}
|
||||||
|
|
||||||
$envs = $container->GetEnvironmentVariables()->GetVariables();
|
$envs = $container->GetEnvironmentVariables()->GetVariables();
|
||||||
|
// Special thing for the nextcloud container
|
||||||
|
if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||||
|
$envs[] = $this->GetAllNextcloudExecCommands();
|
||||||
|
}
|
||||||
foreach($envs as $key => $env) {
|
foreach($envs as $key => $env) {
|
||||||
// TODO: This whole block below is a hack and needs to get reworked in order to support multiple substitutions per line by default for all envs
|
// TODO: This whole block below is a hack and needs to get reworked in order to support multiple substitutions per line by default for all envs
|
||||||
if (str_starts_with($env, 'extra_params=')) {
|
if (str_starts_with($env, 'extra_params=')) {
|
||||||
|
|
@ -533,6 +537,26 @@ class DockerActionManager
|
||||||
return array_unique($backupVolumesArrayFlat);
|
return array_unique($backupVolumesArrayFlat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function GetNextcloudExecCommands(string $id) : string
|
||||||
|
{
|
||||||
|
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||||
|
|
||||||
|
$nextcloudExecCommands = '';
|
||||||
|
foreach ($container->GetNextcloudExecCommands() as $execCommand) {
|
||||||
|
$nextcloudExecCommands .= $execCommand . PHP_EOL;
|
||||||
|
}
|
||||||
|
foreach ($container->GetDependsOn() as $dependency) {
|
||||||
|
$nextcloudExecCommands .= $this->GetNextcloudExecCommands($dependency);
|
||||||
|
}
|
||||||
|
return $nextcloudExecCommands;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function GetAllNextcloudExecCommands() : string
|
||||||
|
{
|
||||||
|
$id = 'nextcloud-aio-apache';
|
||||||
|
return 'NEXTCLOUD_EXEC_COMMANDS=' . $this->GetNextcloudExecCommands($id);
|
||||||
|
}
|
||||||
|
|
||||||
private function GetRepoDigestsOfContainer(string $containerName) : ?array {
|
private function GetRepoDigestsOfContainer(string $containerName) : ?array {
|
||||||
try {
|
try {
|
||||||
$containerUrl = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
$containerUrl = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue