mirror of
https://github.com/mail-in-a-box/mailinabox.git
synced 2026-03-04 15:54:48 +01:00
Make backups more configurable
Backup location and maximum age can now be configured in the admin panel. For now only S3 is supported, but adding other duplicity supported backends should be straightforward.
This commit is contained in:
@@ -7,12 +7,53 @@
|
||||
|
||||
<h3>Copying Backup Files</h3>
|
||||
|
||||
<p>The box makes an incremental backup each night. The backup is stored on the machine itself. You are responsible for copying the backup files off of the machine.</p>
|
||||
|
||||
<p>Many cloud providers make this easy by allowing you to take snapshots of the machine's disk.</p>
|
||||
<p>The box makes an incremental backup each night. By default the backup is stored on the machine itself, but you can also have it stored on Amazon S3</p>
|
||||
|
||||
<p>You can also use SFTP (FTP over SSH) to copy files from <tt id="backup-location"></tt>. These files are encrypted, so they are safe to store anywhere. Copy the encryption password from <tt id="backup-encpassword-file"></tt> also but keep it in a safe location.</p>
|
||||
|
||||
<h3>Backup Configuration</h3>
|
||||
|
||||
<form class="form-horizontal" role="form" onsubmit="set_custom_backup(); return false;">
|
||||
<div class="form-group">
|
||||
<label for="target" class="col-sm-2 control-label">Backup target</label>
|
||||
<div class="col-sm-2">
|
||||
<select class="form-control" rows="1" id="target-type" onchange="toggle_form()">
|
||||
<option value="file">Store locally</option>
|
||||
<option value="s3">Amazon S3</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="target" class="col-sm-2 control-label">Maximum time to keep old backups (in days)</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" rows="1" id="max-age"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-advanced">
|
||||
<label for="target" class="col-sm-2 control-label">S3 URL</label>
|
||||
<div class="col-sm-8">
|
||||
<textarea class="form-control" rows="1" id="target"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-advanced">
|
||||
<label for="target-user" class="col-sm-2 control-label">S3 Key</label>
|
||||
<div class="col-sm-8">
|
||||
<textarea class="form-control" rows="1" id="target-user"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-advanced">
|
||||
<label for="target-pass" class="col-sm-2 control-label">S3 Secret</label>
|
||||
<div class="col-sm-8">
|
||||
<textarea class="form-control" rows="1" id="target-pass"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-11">
|
||||
<button id="set-s3-backup-button" type="submit" class="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<h3>Current Backups</h3>
|
||||
|
||||
<p>The backup directory currently contains the backups listed below. The total size on disk of the backups is currently <span id="backup-total-size"></span>.</p>
|
||||
@@ -27,8 +68,17 @@
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
function toggle_form() {
|
||||
var target_type = $("#target-type").val();
|
||||
if (target_type == 'file') {
|
||||
$(".form-advanced").hide();
|
||||
} else {
|
||||
$(".form-advanced").show();
|
||||
}
|
||||
}
|
||||
|
||||
function nice_size(bytes) {
|
||||
var powers = ['bytes', 'KB', 'MB', 'GB', 'TB'];
|
||||
while (true) {
|
||||
@@ -46,6 +96,8 @@ function nice_size(bytes) {
|
||||
}
|
||||
|
||||
function show_system_backup() {
|
||||
show_custom_backup()
|
||||
|
||||
$('#backup-status tbody').html("<tr><td colspan='2' class='text-muted'>Loading...</td></tr>")
|
||||
api(
|
||||
"/system/backup/status",
|
||||
@@ -83,4 +135,45 @@ function show_system_backup() {
|
||||
$('#backup-total-size').text(nice_size(total_disk_size));
|
||||
})
|
||||
}
|
||||
|
||||
function show_custom_backup() {
|
||||
api(
|
||||
"/system/backup/get-custom",
|
||||
"GET",
|
||||
{ },
|
||||
function(r) {
|
||||
$("#target").val(r.target);
|
||||
$("#target-type").val(r.target_type);
|
||||
$("#target-user").val(r.target_user);
|
||||
$("#target-pass").val(r.target_pass);
|
||||
$("#max-age").val(r.max_age_in_days);
|
||||
toggle_form()
|
||||
})
|
||||
}
|
||||
|
||||
function set_custom_backup() {
|
||||
var target = $("#target").val();
|
||||
var target_type = $("#target-type").val();
|
||||
var target_user = $("#target-user").val();
|
||||
var target_pass = $("#target-pass").val();
|
||||
var max_age = $("#max-age").val();
|
||||
api(
|
||||
"/system/backup/set-custom",
|
||||
"POST",
|
||||
{
|
||||
target: target,
|
||||
target_type: target_type,
|
||||
target_user: target_user,
|
||||
target_pass: target_pass,
|
||||
max_age: max_age
|
||||
},
|
||||
function(r) {
|
||||
// Responses are multiple lines of pre-formatted text.
|
||||
show_modal_error("Backup configuration", $("<pre/>").text(r));
|
||||
},
|
||||
function(r) {
|
||||
show_modal_error("Backup configuration (error)", r);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user