Compare commits

..

22 Commits

Author SHA1 Message Date
szaimen
046aad7b1a increase to 1.1.0
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-26 22:00:02 +02:00
Simon L
0bd106e44a Merge pull request #527 from nextcloud/enh/525/instance-restore-process
make the instance restore process better understandable
2022-04-26 21:59:09 +02:00
Simon L
e7c24196ad Merge pull request #534 from nextcloud/enh/528/php-version
Block Nextcloud from starting if php version is not compatible with i…
2022-04-26 21:58:25 +02:00
Simon L
09f9a24fa2 Merge pull request #533 from nextcloud/enh/529/data-fingerprint
update data fingerprint when restore was done
2022-04-26 21:57:46 +02:00
Simon L
d979383993 Merge pull request #532 from nextcloud/enh/noid/improve-wording-daily-backup
improve wording regarding daily backup
2022-04-26 21:57:28 +02:00
Simon L
ca47e2d912 Merge pull request #523 from nextcloud/enh/522/improve-docker-api-version-message
improve message when docker api version is not supported
2022-04-26 21:56:58 +02:00
Simon L
2b89156bb1 Merge pull request #520 from nextcloud/enh/noid/show-initial-credentials-better
show the initial credentials more prominent when being new
2022-04-26 21:56:44 +02:00
szaimen
316ea5a618 Block Nextcloud from starting if php version is not compatible with installed NC version
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-26 19:17:38 +02:00
szaimen
8e00812e0d update data fingerprint when restore was done
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-26 15:44:13 +02:00
szaimen
e44fbc880b improve wording regarding daily backup
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-26 15:22:00 +02:00
Simon L
77fa851391 Merge pull request #531 from nextcloud/dependabot/docker/Containers/mastercontainer/caddy-2.5.0-alpine
Bump caddy from 2.4.6-alpine to 2.5.0-alpine in /Containers/mastercontainer
2022-04-26 14:44:49 +02:00
Simon L
75446409fb Merge pull request #530 from nextcloud/dependabot/docker/Containers/apache/caddy-2.5.0-alpine
Bump caddy from 2.4.6-alpine to 2.5.0-alpine in /Containers/apache
2022-04-26 14:44:32 +02:00
dependabot[bot]
249a0e4a55 Bump caddy in /Containers/mastercontainer
Bumps caddy from 2.4.6-alpine to 2.5.0-alpine.

---
updated-dependencies:
- dependency-name: caddy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-26 12:34:53 +00:00
dependabot[bot]
6a1ce7cd2e Bump caddy from 2.4.6-alpine to 2.5.0-alpine in /Containers/apache
Bumps caddy from 2.4.6-alpine to 2.5.0-alpine.

---
updated-dependencies:
- dependency-name: caddy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-26 12:34:51 +00:00
szaimen
d288bdd023 make the instance restore process better understandable
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-24 14:12:03 +02:00
szaimen
8da25b6c35 improve message when docker api version is not supported
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-23 22:16:46 +02:00
szaimen
388dadb587 show the initial credentials more prominent when being new
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-23 20:11:33 +02:00
Simon L
6037b4402b Merge pull request #519 from nextcloud/qa-test-plans-2
additional qa test plans
2022-04-23 20:01:39 +02:00
szaimen
933eddae6d additional qa test plans
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-23 19:58:20 +02:00
Simon L
e28a2c4559 Merge pull request #516 from nextcloud/enh/noid/qa-test-plans
add qa test plans
2022-04-23 19:00:54 +02:00
szaimen
1276a1a51f add qa test plans
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-23 18:58:25 +02:00
szaimen
73924df349 fix pecl dependency update regex
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-04-22 18:00:35 +02:00
38 changed files with 308 additions and 74 deletions

View File

@@ -17,9 +17,9 @@ labels: bug, 0. Needs triage
2.
3.
### Expected behaviour <!--- Tell us what should happen -->
### Expected behavior <!--- Tell us what should happen -->
### Actual behaviour <!--- Tell us what happens instead -->
### Actual behavior <!--- Tell us what happens instead -->
### Host OS <!--- (the host OS on which you are trying to install AIO on) -->

View File

@@ -37,7 +37,7 @@ jobs:
apcu_version="$(
git ls-remote --tags https://github.com/krakjoe/apcu.git \
| cut -d/ -f3 \
| grep -vE -- '-rc|-b' \
| grep -viE -- 'rc|b' \
| sed -E 's/^v//' \
| sort -V \
| tail -1

View File

@@ -19,7 +19,7 @@ jobs:
apcu_version="$(
git ls-remote --tags https://github.com/krakjoe/apcu.git \
| cut -d/ -f3 \
| grep -vE -- '-rc|-b' \
| grep -viE -- 'rc|b' \
| sed -E 's/^v//' \
| sort -V \
| tail -1
@@ -30,7 +30,7 @@ jobs:
memcached_version="$(
git ls-remote --tags https://github.com/php-memcached-dev/php-memcached.git \
| cut -d/ -f3 \
| grep -vE -- '-rc|-b' \
| grep -viE -- 'rc|b' \
| sed -E 's/^[rv]//' \
| sort -V \
| tail -1

View File

@@ -1,5 +1,5 @@
# Caddy is a requirement
FROM caddy:2.4.6-alpine as caddy
FROM caddy:2.5.0-alpine as caddy
FROM debian:bullseye-20220418-slim

View File

@@ -233,6 +233,10 @@ if [ "$BORG_MODE" = restore ]; then
# Add file to Nextcloud container so that it skips any update the next time
touch "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/skip.update"
chmod 777 "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/skip.update"
# Add file to Nextcloud container so that it performs a fingerprint update the next time
touch "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/fingerprint.update"
chmod 777 "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/fingerprint.update"
fi
# Do the Backup check
@@ -256,11 +260,15 @@ fi
if [ "$BORG_MODE" = test ]; then
if ! [ -d "$BORG_BACKUP_DIRECTORY" ]; then
echo "No 'borg' directory in the given backup directory found!"
echo "Only the files/folders below have been found in the given directory."
ls -a "$MOUNT_DIR"
echo "Please adjust the directory so that the borg archive is positioned in a folder named 'borg' inside the given directory!"
exit 1
elif ! [ -f "$BORG_BACKUP_DIRECTORY/config" ]; then
echo "A 'borg' directory was found but could not find the borg archive."
echo "It must be positioned directly in the 'borg' subfolder."
echo "Only the files/folders below have been found in the borg directory."
ls -a "$BORG_BACKUP_DIRECTORY"
echo "The archive and most importantly the config file must be positioned directly in the 'borg' subfolder."
exit 1
elif ! borg list "$BORG_BACKUP_DIRECTORY"; then
echo "The entered path seems to be valid but could not open the backup archive."

View File

@@ -1,7 +1,8 @@
#!/bin/bash
# Variables
export BORG_BACKUP_DIRECTORY="/mnt/borgbackup/borg"
export MOUNT_DIR="/mnt/borgbackup"
export BORG_BACKUP_DIRECTORY="$MOUNT_DIR/borg"
# Validate BORG_PASSWORD
if [ -z "$BORG_PASSWORD" ] && [ -z "$BACKUP_RESTORE_PASSWORD" ]; then
@@ -35,7 +36,11 @@ fi
rm -f "/nextcloud_aio_volumes/nextcloud_aio_database_dump/backup-is-running"
# Get a list of all available borg archives
borg list "$BORG_BACKUP_DIRECTORY" | grep "nextcloud-aio" | awk -F " " '{print $1","$3,$4}' > "/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/backup_archives.list"
if borg list "$BORG_BACKUP_DIRECTORY" &>/dev/null; then
borg list "$BORG_BACKUP_DIRECTORY" | grep "nextcloud-aio" | awk -F " " '{print $1","$3,$4}' > "/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/backup_archives.list"
else
echo "" > "/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/backup_archives.list"
fi
chmod +r "/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/backup_archives.list"
if [ -n "$FAILED" ]; then

View File

@@ -2,7 +2,7 @@
FROM docker:20.10.14-dind-alpine3.15 as dind
# Caddy is a requirement
FROM caddy:2.4.6-alpine as caddy
FROM caddy:2.5.0-alpine as caddy
# From https://github.com/docker-library/php/blob/master/8.0/bullseye/apache/Dockerfile
FROM php:8.0.18-apache-bullseye

View File

@@ -54,7 +54,7 @@ API_VERSION_NUMB="$(echo "$API_VERSION" | sed 's/\.//')"
LOCAL_API_VERSION_NUMB="$(sudo -u www-data docker version | grep -i "api version" | grep -oP '[0-9]+.[0-9]+' | head -1 | sed 's/\.//')"
if [ -n "$LOCAL_API_VERSION_NUMB" ] && [ -n "$API_VERSION_NUMB" ]; then
if ! [ "$LOCAL_API_VERSION_NUMB" -ge "$API_VERSION_NUMB" ]; then
echo "Docker v$API_VERSION is not supported by your docker engine. Cannot proceed."
echo "Docker API v$API_VERSION is not supported by your docker engine. Cannot proceed. Please upgrade your docker engine if you want to run Nextcloud AIO!"
exit 1
fi
else

View File

@@ -48,6 +48,14 @@ if [ "$installed_version" != "0.0.0.0" ]; then
unset ADMIN_PASSWORD
fi
# Don't start the container if Nextcloud is not compatible with the PHP version
if [ -f "/var/www/html/lib/versioncheck.php" ] && ! php /var/www/html/lib/versioncheck.php; then
echo "It seems like your installed Nextcloud is not compatible with the by the container provided PHP version."
echo "This most likely happened because you tried to restore an old Nextcloud version from backup that is not compatible with the PHP version that comes with the container."
echo "Please try to restore a more recent backup which contains a Nextcloud version that is compatible with the PHP version that comes with the container."
exit 1
fi
# Skip any update if Nextcloud was just restored
if ! [ -f "/mnt/ncdata/skip.update" ]; then
if version_greater "$image_version" "$installed_version"; then
@@ -250,6 +258,12 @@ if [ -z "$(find "/mnt/ncdata/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*"
exit 1
fi
# Perform fingerprint update if instance was restored
if [ -f "/mnt/ncdata/fingerprint.update" ]; then
php /var/www/html/occ maintenance:data-fingerprint
rm "/mnt/ncdata/fingerprint.update"
fi
# Apply 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

View File

@@ -14,6 +14,9 @@ nextcloud/all-in-one:develop
And you are done :)
It will now also select the developer channel for all other containers automatically.
## How to publish new releases?
Simply use https://github.com/nextcloud/all-in-one/issues/180 as template.
## How to build new containers
Go to https://github.com/nextcloud-releases/all-in-one/actions/workflows/repo-sync.yml and run the workflow that will first sync the repo and then build new container that automatically get published to `develop` and `develop-arm64`.

View File

@@ -81,6 +81,7 @@ $app->get('/containers', function ($request, $response, $args) use ($container)
'has_backup_run_once' => $configurationManager->hasBackupRunOnce(),
'is_backup_container_running' => $dockerActionManger->isBackupContainerRunning(),
'backup_exit_code' => $dockerActionManger->GetBackupcontainerExitCode(),
'is_instance_restore_attempt' => $configurationManager->isInstanceRestoreAttempt(),
'borg_backup_mode' => $configurationManager->GetBorgBackupMode(),
'was_start_button_clicked' => $configurationManager->wasStartButtonClicked(),
'has_update_available' => $dockerActionManger->isAnyUpdateAvailable(),

View File

@@ -115,6 +115,7 @@ class DockerController
public function StartBackupContainerTest(Request $request, Response $response, $args) : Response {
$config = $this->configurationManager->GetConfig();
$config['backup-mode'] = 'test';
$config['instance_restore_attempt'] = 0;
$this->configurationManager->WriteConfig($config);
$id = self::TOP_CONTAINER;

View File

@@ -22,9 +22,9 @@ $isMastercontainerUpdateAvailable = $dockerActionManger->IsMastercontainerUpdate
$isAnyUpdateAvailable = $dockerActionManger->isAnyUpdateAvailable();
if ($isMastercontainerUpdateAvailable === true) {
$dockerActionManger->sendNotification($nextcloudContainer, 'Mastercontainer update available!', 'Please open your management interface to update it.');
$dockerActionManger->sendNotification($nextcloudContainer, 'Mastercontainer update available!', 'Please open your AIO interface to update it. If you do not want to do it manually each time, you can enable the daily backup feature from the AIO interface which also automatically updates the mastercontainer.');
}
if ($isAnyUpdateAvailable === true) {
$dockerActionManger->sendNotification($nextcloudContainer, 'Container updates available!', 'Please open your management interface to update them.');
$dockerActionManger->sendNotification($nextcloudContainer, 'Container updates available!', 'Please open your AIO interface to update them. If you do not want to do it manually each time, you can enable the daily backup feature from the AIO interface which also automatically updates your containers and your Nextcloud apps.');
}

View File

@@ -334,6 +334,7 @@ class ConfigurationManager
$config = $this->GetConfig();
$config['borg_backup_host_location'] = $location;
$config['borg_restore_password'] = $password;
$config['instance_restore_attempt'] = 1;
$this->WriteConfig($config);
}
@@ -422,6 +423,18 @@ class ConfigurationManager
return $config['borg_restore_password'];
}
public function isInstanceRestoreAttempt() : bool {
$config = $this->GetConfig();
if(!isset($config['instance_restore_attempt'])) {
$config['instance_restore_attempt'] = '';
}
if ($config['instance_restore_attempt'] === 1) {
return true;
}
return false;
}
public function GetBorgBackupMode() : string {
$config = $this->GetConfig();
if(!isset($config['backup-mode'])) {

View File

@@ -16,7 +16,7 @@
</header>
<div class="content">
<h1>Nextcloud AIO v1.0.2</h1>
<h1>Nextcloud AIO v1.1.0</h1>
{% set isAnyRunning = false %}
{% set isAnyRestarting = false %}
@@ -51,7 +51,7 @@
{% if is_daily_backup_running == true %}
<span class="status running"></span> Daily backup currently running. (<a href="/api/docker/logs?id=nextcloud-aio-mastercontainer">Logs</a>)<br /><br />
It will update all containers and all apps if the backup is successful.<br /><br />
It will update your containers, the mastercontainer and your Nextcloud apps if the backup is successful.<br /><br />
{% if is_mastercontainer_update_available == true %}
Since the mastercontainer gets updated, it will restart the container which will make it unavailable for a moment. (<a href="/api/docker/logs?id=nextcloud-aio-watchtower">Logs</a>)<br /><br />
{% endif %}
@@ -88,70 +88,69 @@
Make sure that this server is reachable on Port 443 and you've correctly set up the DNS config for the domain that you enter. <br><br>
If you have a dynamic IP-address, you can use e.g. <a href="https://ddclient.net/">DDclient</a> with a compatible domain provider for DNS updates. <br /><br/>
<h2>Restore AIO instance from backup</h2>
You can alternatively restore an AIO instance from backup.<br><br>
<h2>Restore former AIO instance from backup</h2>
You can alternatively restore a former AIO instance from backup.<br><br>
{% endif %}
{% if borg_backup_host_location != '' and borg_restore_password != '' %}
{% if borg_backup_mode in ['test', 'check'] %}
{% if backup_exit_code > 0 %}
<span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
{% if borg_backup_mode == 'test' %}
Please adjust the path and/or password in order to make it work! After changing and submitting the values, click on 'Test path and password' button at the bottom of this page to verify and test the new settings!<br><br>
{% elseif borg_backup_mode == 'check' %}
The backup archive seems to be corrupt. Please try to use a different intact backup archive or try to fix it by following <a href="https://borgbackup.readthedocs.io/en/stable/faq.html?highlight=repair#:~:text=repairing%20a%20damaged%20repository"><b>this documentation</b></a>
{% endif %}
{% elseif backup_exit_code == 0 %}
<span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
{% if borg_backup_mode == 'test' %}
Feel free to check the integrity of the backup archive below before starting the restore process in order to make double-sure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.<br><br>
<form method="POST" action="/api/docker/backup-check" class="xhr">
{% if is_instance_restore_attempt == false %}
{% if borg_backup_host_location != '' and borg_restore_password != '' %}
{% if borg_backup_mode in ['test', 'check'] %}
{% if backup_exit_code > 0 %}
<span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
{% if borg_backup_mode == 'test' %}
Please adjust the path and/or the password in order to make it work!<br><br>
{% elseif borg_backup_mode == 'check' %}
The backup archive seems to be corrupt. Please try to use a different intact backup archive or try to fix it by following <a href="https://borgbackup.readthedocs.io/en/stable/faq.html?highlight=repair#:~:text=repairing%20a%20damaged%20repository"><b>this documentation</b></a>
{% endif %}
{% elseif backup_exit_code == 0 %}
<span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
{% if borg_backup_mode == 'test' %}
Feel free to check the integrity of the backup archive below before starting the restore process in order to make double-sure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.<br><br>
<form method="POST" action="/api/docker/backup-check" class="xhr">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Check backup integrity"/><br/>
</form>
{% endif %}
Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance from backup. Please not that the current AIO password will be kept and the AIO password not restored from backup!<br><br>
<form method="POST" action="/api/docker/restore" class="xhr" id="restore_selection">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Check backup integrity"/><br/>
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
{% for restore_time in backup_times %}
<option value="{{ restore_time }}">{{ restore_time }} UTC</option>
{% endfor %}
</select>
<input class="button" type="submit" value="Restore selected backup"/>
</form>
{% endif %}
Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance from backup. Please not that the current AIO password will be kept and the AIO password not restored from backup!<br><br>
<form method="POST" action="/api/docker/restore" class="xhr" id="restore_selection">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
{% for restore_time in backup_times %}
<option value="{{ restore_time }}">{{ restore_time }} UTC</option>
{% endfor %}
</select>
<input class="button" type="submit" value="Restore selected backup"/>
</form>
{% endif %}
{% elseif borg_backup_mode == 'restore' %}
{% if backup_exit_code > 0 %}
<span class="status error"></span> Last restore failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
Somehow the restore failed which is unexpected! Please adjust the path and password, test it and try to restore again!
{% elseif borg_backup_mode == 'restore' %}
{% if backup_exit_code > 0 %}
<span class="status error"></span> Last restore failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
Somehow the restore failed which is unexpected! Please adjust the path and password, test it and try to restore again!
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% if borg_backup_host_location == '' or borg_restore_password == '' or borg_backup_mode not in ['test', 'check', ''] or backup_exit_code > 0 %}
Please enter the location of the backup archive on your host and the password of the backup archive below:<br><br>
<form method="POST" action="/api/configuration" class="xhr">
<input type="text" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/>
<input type="text" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="enter the borg password"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Submit" />
</form>
The folder path that you enter may start with <b>/mnt/</b>, <b>/media/</b> or <b>/host_mnt/</b> or may be equal to <b>/var/backups</b>.<br><br>So e.g. <b>/mnt/backup</b> on Linux and macOS or <b>/host_mnt/c/backup/directory</b> on Windows. (This Windows example would be equivalent to 'C:\backup\directory' on the Windows host. So you need to translate the path that you want to use into the correct format.)<br><br>
⚠ Note that the backup archive must be located in a subfolder of the folder that you enter here and the subfolder which contains the archive must be named 'borg'. Otherwise will the backup container not find the backup archive!<br><br>
{% endif %}
{% if borg_backup_host_location != '' and borg_restore_password != '' %}
{% if borg_backup_mode not in ['test', 'check'] or backup_exit_code != 0 %}
<b>Everything set!</b> Click on the button below to test the path and password:<br/><br/>
<form method="POST" action="/api/docker/backup-test" class="xhr">
{% if borg_backup_host_location == '' or borg_restore_password == '' or borg_backup_mode not in ['test', 'check', ''] or backup_exit_code > 0 %}
Please enter the location of the backup archive on your host and the password of the backup archive below:<br><br>
<form method="POST" action="/api/configuration" class="xhr">
<input type="text" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/>
<input type="text" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="enter the borg password"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Test path and password"/><br/>
<input class="button" type="submit" value="Submit" />
</form>
The folder path that you enter may start with <b>/mnt/</b>, <b>/media/</b> or <b>/host_mnt/</b> or may be equal to <b>/var/backups</b>.<br><br>So e.g. <b>/mnt/backup</b> on Linux and macOS or <b>/host_mnt/c/backup/directory</b> on Windows. (This Windows example would be equivalent to 'C:\backup\directory' on the Windows host. So you need to translate the path that you want to use into the correct format.)<br><br>
⚠ Note that the backup archive must be located in a subfolder of the folder that you enter here and the subfolder which contains the archive must be named 'borg'. Otherwise will the backup container not find the backup archive!<br><br>
{% endif %}
{% else %}
<b>Everything set!</b> Click on the button below to test the path and password:<br/><br/>
<form method="POST" action="/api/docker/backup-test" class="xhr">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Test path and password"/><br/>
</form>
{% endif %}
{% endif %}
{% endif %}
@@ -168,11 +167,17 @@
{% if domain != "" %}
{% if isAnyRunning == true %}
{% if isApacheStarting != true %}
<details>
<summary>Click here to reveal the initial Nextcloud credentials</summary><br />
Initial Nextcloud username: <b>admin</b><br />
Initial Nextcloud password: <b>{{ nextcloud_password }}</b>
</details><br /><br />
{% if borg_backup_host_location != '' %}
<details>
<summary>Click here to reveal the initial Nextcloud credentials</summary><br />
{% endif %}
Initial Nextcloud username: <b>admin</b><br />
Initial Nextcloud password: <b>{{ nextcloud_password }}</b>
{% if borg_backup_host_location != '' %}
</details><br /><br />
{% else %}
<br><br>
{% endif %}
<a href="https://{{ domain }}" class="button" target="_blank" rel="noopener">Open your Nextcloud ↗</a><br/>
{% else %}
{% if isAnyRestarting == false %}
@@ -347,7 +352,7 @@
<input class="button" type="submit" value="Restore selected backup" onclick="return confirm('Restore the selected backup? Are you sure that you want to restore the selected backup? This will stop all running containers and restore the selected backup. It is recommended to create a backup first. You might also want to check the backup integrity.')" />
</form>
<h3>Daily backup creation</h3>
<h3>Daily backup</h3>
{% if daily_backup_time == "" %}
By entering a time below, you can enable daily backups. It will create them at the entered time in 24h format. E.g. <b>04:00</b> will create backups at 4 am UTC and <b>16:00</b> at 4 pm UTC.<br><br/>
<form method="POST" action="/api/configuration" class="xhr">
@@ -356,9 +361,9 @@
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Submit" />
</form>
This option will also automatically update your containers and apps and will send a notification about the result of the backup.<br><br/>
This option will also automatically update your containers, the mastercontainer and your Nextcloud apps and will send a notification about the result of the backup.<br><br/>
{% else %}
Daily backups will be created at <b>{{ daily_backup_time }} UTC</b> which includes a notification about the result of the backup and automatic updates of your containers and apps. You can disable this option again by clicking on the button below.<br><br/>
Daily backups will be created at <b>{{ daily_backup_time }} UTC</b> which includes a notification about the result of the backup and automatic updates of your containers, the mastercontainer and your Nextcloud apps. You can disable this option again by clicking on the button below.<br><br/>
<form method="POST" action="/api/configuration" class="xhr">
<input type="hidden" name="delete_daily_backup_time" value="yes"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">

View File

@@ -0,0 +1,10 @@
# Initial setup
- [ ] Verify that after starting the test container, you can access the AIO interface using https://internal.ip.address:8080
- [ ] After clicking the self-signed-certificate warning away, it should show the setup page with an explanation what AIO is and the initial password and a button that contains a link to the AIO login page
- [ ] After copying the password and clicking on this button, it should open a new tab with the login page
- [ ] The login page should show an input field that allows to enter the AIO password and a `Log in` button
- [ ] After pasting the new password into the input field and clicking on this button button, you should be logged in
- [ ] You should now see the containers page and you should see three sections: one general section which explains what AIO is, one `New AIO instance` section and one section that allows to restore the whole AIO instance from backup.
You can now continue with [002-new-instance.md](./002-new-instance.md) or [010-restore-instance.md](./010-restore-instance.md).

View File

@@ -0,0 +1,31 @@
# New instance
For the below to work, it is important that you have a domain that you point onto your testserver and open port 443 in your router/firewall.
- [ ] The `New AIO instance` section should show an input field that allows to enter a domain that will be used for Nextcloud later on as well as a short explanation regarding dynamic DNS
- [ ] Now test a few examples in the input box:
- [ ] Entering `djfslkklk` should report that DNS config is not set or the domain is not in a valid format
- [ ] Entering `https://sdjflkjk.cpm` should report that this is not a valid domain
- [ ] Entering `10.0.0.1` should report that ip-addresses are not supported
- [ ] Entering `nextcloud.com` should report that the domain does not point to this server
- [ ] Entering the domain that does point to your server e.g. `yourdomain.com` should finally redirect you to the next screen (if you did not configure your domain yet or did not open port 443, it should report that to you)
- [ ] Now you should see a button `Start containers` and an explanation which points out that clicking on the button will start the containers and that this can take a long time.
- [ ] Below that you should see a section `Optional addons` which shows a checkbox list with addons that can be enabled or disabled.
- [ ] Collabora and Nextcloud Talk should be enabled, the rest disabled
- [ ] Unchecking/Checking any of these should insert a button that allows to save the set config
- [ ] Checking OnlyOffice and Collabora at the same time should show a warning that this is not supported and should not saving the new config
- [ ] Recommended is to uncheck all options now
- [ ] Clicking on the save button should reload the page and activate the new config
- [ ] Clickig on the `Start containers` button should finally reveal a big spinning wheel that should block all elements on the side of being clicked.
- [ ] After waiting a few minutes, it should reload and show a new page
- [ ] On top of the page should be shown which channel you are running
- [ ] Below that, it should show that containers are currently starting
- [ ] Below that it should show a section with Containers: Apache, Database, Nextcloud and Redis and that your containers are up-to-date
- [ ] On the bottom should be the Optional addons section shown but with disabled checkboxes (not clickable)
- [ ] A automatic reload every 5s should happen until all Containers are started (as long as this window is focused)
- [ ] After waiting a bit longer it should instead of the advice that your containers are currently running show the initial Nextcloud credentials (username, password) and below that a button that allows to open the Nextcloud interface in a new tab
- [ ] Clicking on that button should open the Nextcloud interface in a new tab and you should be able to log in using the provided credentials
- [ ] Below the Containers section it should show a `Stop containers` button
- [ ] Below the Containers section and above the Optional Addons section, you should see a Backup and restore section and an AIO password change section
You can now continue with [003-automatic-login.md](./003-automatic-login.md).

View File

@@ -0,0 +1,8 @@
# Automatic login
- [ ] After you log in to Nextcloud using the provided initial credentials, open https://yourdomain.com/settings/admin/overview
- [ ] There you should see a Nextcloud AIO section and a button that allows to log into the AIO interface.
- [ ] Clicking on this button should open the AIO interface in a new tab and should automatically log you in
- [ ] All sessions in other tabs that are currently open should be closed (you can verify by reloading all other AIO tabs)
You can now continue with [004-initial-backup.md](./004-initial-backup.md).

View File

@@ -0,0 +1,18 @@
# Initial backup
- [ ] In the Backup and restore section, you should now see and input box where you should type in the path where the backup should get created and some explanation below
- [ ] Enter `/` which should send an error
- [ ] Enter `/mnt/` or `/media/` or `/host_mnt/` or `/var/backups/` should send an error as well
- [ ] Accepted should be `/mnt/backup`, `/media/backup`, `/host_mnt/c/backup` and `/var/backups`.
- [ ] The side should now reload
- [ ] The initial Nextcloud credentials on top of the page that are visible when the containers are running should now be hidden in a details tag
- [ ] In the Backup restore section you should now see a Backup information section with important info like the encryption password, the backup location and more.
- [ ] Also you should see a Backup cretion section that contains a `Create backup` button.
- [ ] Clicking on the `Create backup` button should open a window prompt that allows to cancel the operation.
- [ ] Canceling should return to the website, confirming should reveal the big spinner again which should block the website again.
- [ ] After a while you should see the information that Backup container is currently running
- [ ] Below the Containers section you should see the option to `Start containers` again.
- [ ] After a while and a few automatic reloads (as long as the side is focused), you should be redirected to the usual page and seen in the Backup and restore section that the last backup was successful.
- [ ] Below thhat you should see a details tag that allows to reveal all backup options
You can now continue with [020-backup-and-restore.md](.//020-backup-and-restore.md)

View File

@@ -0,0 +1,19 @@
# Restore instance
For the below to work, you need a backup archive of an AIO instance and the location on the test machine and the password for the backup archive. You can get one here: [backup-archive](./assets/backup-archive/)
- [ ] The section that allows to restore the whole AIO instance from backup should show two input fields: one that allows to enter a location where the backup archive is located and one that allows to enter password of the archive. It should also show a short explanation regarding the path requirements
- [ ] Entering an incorrect path and/or password should let you continue and test your settings in the next step
- [ ] Clicking on the test button should after a reload bring you back to the initial screen where it should say that the test was unsuccessful. Also you should be able to have a look at the backup container logs for investigation what exactly failed.
- [ ] You should also now see the input boxes again where you can change the path and password, confirm it and bring you again to the screen where you can test your settings.
- [ ] Entering the correct path to the backup archive and the correct password here should:
- [ ] Should reload and should hide all options except the option to test the path and password
- [ ] After the test you should see the options to check the integrity of the backup and a list of backup archives that you can choose from to restore your instance
- [ ] Clicking on either option should show a window prompt that lets you cancel the operation
- [ ] Clicking on the integrity check option should check the integrity and report that the backup integrity is good after a while which should then only show the option to choose the backup archive that should be restored
- [ ] Choosing the restore option should finally restore your files.
- [ ] After waiting a while it should reload the page and should show the usual container interface again with the state of your containers (stopped) and the option to start and update the containers again.
- [ ] Clicking on `Start and update containers` should show a window prompt that you should create a backup. Canceling should cancel the operation, confirming should reveal the big spinner again.
- [ ] After waiting a bit, all containers should be green and your instance should be fully functional again
You can now continue with [020-backup-and-restore.md](./020-backup-and-restore.md)

View File

@@ -0,0 +1,11 @@
# Backup and restore
- [ ] Expanding all backup options in the Backup and restore sectioin should reveal a Backup information section, Backup creation section, Backup check section, Backup restore section and a Daily backup section.
- [ ] The backup restore section should list all available backup archives and list them from most recent to least recent.
- [ ] Clicking on either option of Create backup, Check backup integrity or Restore selected backup should run the corresponding action and report after a while in the last check, backup or restore was successful.
- [ ] Daily backup creatio should allow to enter a time in 24h format e.g. `04:00` should be accepted, `24:00` or `dfjlk` not.
- [ ] Submitting a time here should reload the page and reveal at the same place the option to delete the setting again.
- [ ] When the time of the automatic backup has come (you can test it by choosing a time that is e.g. only a minute away), it should automatically log you out (you can verify by reloading) and after you log in again you should see that the automatic backup is currently running.
- [ ] After a while you should see that your container are starting and in the Backup and restore section you should see that the backup was successful
You can now continue with [030-aio-password-change.md](./030-aio-password-change.md)

View File

@@ -0,0 +1,12 @@
# AIO password change
- [ ] In the AIO password change section you should see two input fields. And below the requirements for a new password
- [ ] When entering nothing it should report that you need to enter your current aio password
- [ ] When entering a false password, it should report that to you
- [ ] After entering your current password and leaving the new password empty it should report that you need to enter a new password
- [ ] After entering a new passwort shorter than 24 characters or not allowed characters, it should report that the password requirements are not met.
- [ ] `sdfjlksj` should not be accepted
- [ ] `jdsfklöjiroewoäsadjkfölk` should not be accepted
- [ ] `sdjlfj SDJFLK 32489 sdjklf` should which should reload the page
You can now continue with [040-login-behavior.md](./040-login-behavior.md)

View File

@@ -0,0 +1,7 @@
# Login behavior
- [ ] When opening the AIO interface in a new tab while the apache container is running, it should report on the login page that Nextcloud is running and you should use the automatic login
- [ ] When the apache container is stopped, you should see here an input field that allows you to enter the AIO password which should log you in
- [ ] Starting and stopping the containers multiple times should every time produce a new token that is used in the admin overview in Nextcloud as link in the button to log you into the AIO interface. (see [003-automatic-login.md](./003-automatic-login.md))
You can now continue with [050-optional-addons.md](./050-optional-addons.md)

View File

@@ -0,0 +1,12 @@
# Optional addons
- [ ] At the bottom of the page in the AIO interface, you should see the optional addons section
- [ ] You should be able to change optional addons when containers are stopped and not change them when containers are running
- [ ] Enabling either of the options should start a new container with the same or comparable name and should also list them in the containers section
- [ ] After all containers are started with the new config active, you should verify that the options were automatically activated/deactivated.
- [ ] ClamAV by trying to upload a testvirus to Nextcloud https://www.eicar.org/?page_id=3950
- [ ] Collabora by trying to open a .docx or .odt file in Nextcloud
- [ ] Nextcloud Talk by opening the Talk app in Nextcloud, creating a new chat and trying to join a call in this chat. Also verifying in the settings that the HPB and turn server work.
- [ ] Onlyoffice by trying to open a .docx file in Nextcloud
You can now continue with [060-environmental-variables.md](./060-environmental-variables.md)

View File

@@ -0,0 +1,6 @@
# Environmental variables
- [ ] When starting the mastercontainer with `-e APACHE_PORT=11000` on a clean instance, the domaincheck container should be started with that same port published. That makes sure that also the Apache container will use that port later on. Using a value here that is not a port will not allow the mastercontainer to start correctly.
- [ ] Make also sure that reverse proxies work by following https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#reverse-proxy-documentation and following [001-initial-setup.md](./001-initial-setup.md) and [002-new-instance.md](./002-new-instance.md)
- [ ] When starting the mastercontainer with `-e NEXTCLOUD_DATADIR="/mnt/testdata"` it should map that location from `/mnt/testdata` to `/mnt/ncdata` inside the Nextcloud container. Not having adjusted the permissions correctly before starting the Nextcloud container the first time will not allow the Nextcloud container to start correctly. See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir for allowed values.
- [ ] When starting the mastercontainer with `-e NEXTCLOUD_MOUNT="/mnt/"` it should map `/mnt/` to `/mnt/` inside the Nextcloud container. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host for allowed values.

View File

@@ -0,0 +1 @@
data/** filter=lfs diff=lfs merge=lfs -text

View File

@@ -0,0 +1,2 @@
This is a Borg Backup repository.
See https://borgbackup.readthedocs.io/

View File

@@ -0,0 +1,20 @@
[repository]
version = 1
segments_per_dir = 1000
max_segment_size = 524288000
append_only = 0
storage_quota = 0
additional_free_space = 2G
id = 341f36bcb3656a000339ea3fb75f9e1645bbad6ee5299b38a9fd9d9e9412125b
key = hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAZ4HfIjdJek4CCc15EJdZ5IPdhMgSKu1RDimS1
C6Xj/zZtbmLXp9wTzDJzVq2DAhM9Vl2wZo766gyywzz5oUuVocbIlLD2JNEHsWL08W8QYC
mEjufkvRPCgupuz/ZOjfJmtKzKm56t1K4jUf0oaYtt3pKlEY7RQStdYTq43JNYFI23bNH4
u+OnGDEYa/Y4XZkl6K4yDZgc1jpDf5uHzNTX1MiJpCWJlBQbJQC03i1bVqBlZpAo+x23Z3
4Hg5Is5n24f2+AhFtdeD4NY6CzoHa+HQR7K67ZGIA6hUOHo7xPKaKKBlBvORgWppItq7j6
Ch+K1Z+/N1MBn4ltCSNtTmsCe2QT+4Xz7je7DzUNhmt3yx9Kuxe/e8NBSXXRb3eMuyGovT
Cs8JCWwQStDMgt+4s88wwaTfbt93f5d9W65tw+Z7x0gNUz0bZAzM3wld8vFqk3Vc2EQ5t0
azBuOzCFTL7sdyNqns+sgIs83sEfpyi872+IRX+bMBrXPwGL+J1+yaLvTuShjuq3Wv1Q9l
wqFMDUMB/ELSPYWS8Bj+Lix0dqmkaGFzaNoAINdDmXejBcvEcHa7qq0m3IzSyjhSDwpjgg
i7o64njD73qml0ZXJhdGlvbnPOAAGGoKRzYWx02gAgAYrIc2bmhIDmLmiQi2oFFrmQ3TlH
AW0UIpa4AtxkdXindmVyc2lvbgE=

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0a2e55f51c5d5125dfd8d4677af5c80d5d366b65ff70838d7ced6ef3bc152361
size 17

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:565329299be8c85dc70d1231f365d210829785b67ff5edefee8ec37db324ad86
size 217476296

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0a2e55f51c5d5125dfd8d4677af5c80d5d366b65ff70838d7ced6ef3bc152361
size 17

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0a2e55f51c5d5125dfd8d4677af5c80d5d366b65ff70838d7ced6ef3bc152361
size 17

View File

@@ -0,0 +1 @@
„§version¨segments<74>ÍR§compact<63>)±storage_quota_useÎ öl—

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
0000000020000082

View File

@@ -0,0 +1,6 @@
# Backup archive
This is a backup archive only for testing.
You need to copy the archive onto your test machine.
The password is `65e5feb92b9765f7de003151b59fd1fc46f5bdc1f16c0c48`.

7
tests/QA/readme.md Normal file
View File

@@ -0,0 +1,7 @@
# QA test plans
In this folder are manual test plans for QA located that allow to manually step through certain features and make sure that everything works as expected.
For a test instance, you should make sure that all potentially breaking changes are merged, build new containers by following https://github.com/nextcloud/all-in-one/blob/main/develop.md#how-to-build-new-containers, stop a potential old instance, remove it and delete all volumes. Afterwards start a new clean test instance by following https://github.com/nextcloud/all-in-one/blob/main/develop.md#developer-channel.
Best is to start testing with [001-initial-setup.md](./001-initial-setup.md).