GithubHelp home page GithubHelp logo

garethgeorge / backrest Goto Github PK

View Code? Open in Web Editor NEW
564.0 6.0 26.0 1.75 MB

Backrest is a web UI and orchestrator for restic backup.

License: GNU General Public License v3.0

Go 48.98% TypeScript 49.08% Shell 1.60% HTML 0.04% Sass 0.08% Dockerfile 0.24%
backups restic restic-backups webui

backrest's Introduction


Overview

Backrest is a web-accessible backup solution built on top of restic. Backrest provides a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.

By building on restic, Backrest leverages restic's mature feature set. Restic provides fast, reliable, and secure backup operations.

Backrest itself is built in Golang (matching restic's implementation) and is shipped as a self-contained and light weight binary with no dependecies other than restic. This project aims to be the easiest way to setup and get started with backups on any system. You can expect to be able to perform all operations from the web interface but should you ever need more control, you are free to browse your repo and perform operations using the restic cli. Additionally, Backrest can safely detect and import your existing snapshots (or externally created snapshots on an ongoing basis).

Preview

Platform Support

  • Docker
  • Linux
  • MacOS
  • Windows
  • FreeBSD

Features

  • WebUI supports local and remote access (e.g. run on a NAS and access from your desktop)
  • Multi-platform support (Linux, MacOS, Windows, FreeBSD, Docker)
  • Import your existing restic repositories
  • Cron scheduled backups and health operations (e.g. prune and forget)
  • UI for browing and restoring files from snapshots
  • Configurable backup notifications (e.g. Discord, Slack, Shoutrrr, Gotify)
  • Add shell command hooks to run before and after backup operations.
  • Compatible with rclone remotes
  • Backup to any restic supported storage (e.g. S3, B2, Azure, GCS, local, SFTP, and all rclone remotes)

User Guide

See the backrest docs.

Installation

Backrest is packaged as a single executable. It can be run directly on Linux, MacOS, and Windows. restic will be downloaded and installed in the data directory on first run.

Download options

  • Download and run a release from the releases page.
  • Build from source (see below).
  • Run with docker: garethgeorge/backrest:latest (see on dockerhub) or garethgeorge/backrest:latest-alpine for an image that includes rclone and common unix utilities.

Backrest is accessible from a web browser. By default it binds to 0.0.0.0:9898 and can be accessed at http://localhost:9898. Change the port with the BACKREST_PORT environment variable e.g. BACKREST_PORT=127.0.0.1 backrest to listen only on local interfaces. On first startup backrest will prompt you to create a default username and password, this can be changed later in the settings page.

Note: backrest installs a specific restic version to ensure that the version of restic matches the version backrest is tested against. This provides the best guarantees for stability. If you wish to use a different version of restic OR if you would prefer to install restic manually you may do so by setting the BACKREST_RESTIC_COMMAND environment variable to the path of the restic binary you wish to use.

Running with Docker Compose

Docker image: https://hub.docker.com/r/garethgeorge/backrest

Example compose file:

version: "3.2"
services:
  backrest:
    image: garethgeorge/backrest
    container_name: backrest
    hostname: backrest #Use this to set the hostname instead of container ID to the config.json and WebUI.
    volumes:
      - ./backrest/data:/data
      - ./backrest/config:/config
      - ./backrest/cache:/cache
      - /MY-BACKUP-DATA:/userdata # mount your directories to backup somewhere in the filesystem
      - /MY-REPOS:/repos # (optional) mount your restic repositories somewhere in the filesystem.
    environment:
      - BACKREST_DATA=/data # path for backrest data. restic binary and the database are placed here.
      - BACKREST_CONFIG=/config/config.json # path for the backrest config file.
      - XDG_CACHE_HOME=/cache # path for the restic cache which greatly improves performance.
    restart: unless-stopped
    ports:
      - 9898:9898

Running on Linux

Arch Linux

Note: Backrest on AUR is not maintained by the backrest official and has made minor adjustments to the recommended services. Please refer to here for details. In [email protected], use restic from the Arch Linux official repository by setting BACKREST_RESTIC_COMMAND. And for information on enable/starting/stopping services, please refer to Systemd#Using_units.

## install backrest from AUR
paru -Sy backrest  # or: yay -Sy backrest

## enable backrest service for current user
sudo systemctl enable --now backrest@$USER.service

Download release

Download a release from the releases page

Using systemd with the install script (Recommended)

Extract the release you downloaded and run the install script:

# extract the release to a subfolder of the current directory
mkdir backrest && tar -xzvf backrest_Linux_x86_64.tar.gz -C backrest
# run the install script
cd backrest && ./install.sh

The install script will:

  • Move the backrest binary to /usr/local/bin
  • Create a systemd service file at /etc/systemd/system/backrest.service
  • Enable and start the service

Read the script before running it to make sure you are comfortable with these operations.

Run on startup with cron (Basic)

Move the backrest binary to /usr/local/bin:

sudo mv backrest /usr/local/bin/backrest

Add the following line to your crontab (e.g. crontab -e):

@reboot /usr/local/bin/backrest

Run on startup with systemd manually

sudo mv backrest /usr/local/bin/backrest

Create a systemd service file at /etc/systemd/system/backrest.service with the following contents:

[Unit]
Description=ResticWeb
After=network.target

[Service]
Type=simple
User=<your linux user>
Group=<your linux group>
ExecStart=/usr/local/bin/backrest
Environment="BACKREST_PORT=127.0.0.1:9898"

[Install]
WantedBy=multi-user.target

Then run the following commands to enable and start the service:

sudo systemctl enable backrest
sudo systemctl start backrest

Note: you can set the linux user and group to your primary user (e.g. whoami when logged in).

Running on MacOS

Using Brew (Recommended)

Backrest is provided as a homebrew tap. To install with brew run:

brew tap garethgeorge/homebrew-backrest-tap
brew install backrest

This tap uses Brew services to launch and manage Backrest's lifecycle. Backrest will launch on startup and run on port ':9898` by default.

Manually using the install script (Recommended)

Download a Darwin release from the releases page and install it to /usr/local/bin.

Extract the release you downloaded and run the install script:

# extract the release to a subfolder of the current directory
mkdir backrest && tar -xzvf backrest_Darwin_arm64.tar.gz -C backrest
# run the install script
cd backrest && ./install.sh

The install script will:

  • Move the backrest binary to /usr/local/bin
  • Create a launch agent file at ~/Library/LaunchAgents/com.backrest.plist
  • Load the launch agent

Read the script before running it to make sure you are comfortable with these operations.

Manually

If setting up backrest manually it's recommended to install the binary to /usr/local/bin and run it manually. You can also create a launch agent to run it on startup or may run it manually when needed.

Running on Windows

Download a Windows release from the releases page and install it to C:\Program Files\Backrest\backrest.exe (create the path if it does not exist). The binary should be run as administrator on first launch, otherwise the restic installation will fail and the process will terminate.

To run the binary on login, create a shortcut to the binary and place it in the shell:startup folder. See this windows support article for more details.

warning: If you get filesystem errors you may need to run Backrest as administrator for full filesystem access.

warning: Backrest is not tested on Windows to the same bar as Linux and MacOS. Some features may not work as expected.

Configuration

Environment Variables

  • BACKREST_PORT - the port to bind to. Defaults to 9898.
  • BACKREST_CONFIG - the path to the config file. Defaults to $HOME/.config/backrest/config.json or if $XDG_CONFIG_HOME is set, $XDG_CONFIG_HOME/backrest/config.json.
  • BACKREST_DATA - the path to the data directory. Defaults to $HOME/.local/share/backrest or if $XDG_DATA_HOME is set, $XDG_DATA_HOME/backrest.
  • BACKREST_RESTIC_COMMAND - the path to the restic binary. Defaults managed version of restic which will be downloaded and installed in the data directory.
  • XDG_CACHE_HOME -- the path to the cache directory. This is propagated to restic.

backrest's People

Contributors

arjenr avatar aschoettler avatar devome avatar dhilgarth avatar edersong avatar eknoes avatar flemesre avatar garethgeorge avatar jancona avatar janhouse avatar johnmaguire avatar marvinjwendt avatar nebulosa-cat avatar stasiumdev avatar zolfariot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

backrest's Issues

SFTP repos fail - ssh not found

At start of install.sh i got the following error on a fresh Linux-Debian-Bookworm:
`++ uname -s

  • OS=Linux
  • '[' Linux = Darwin ']'
  • '[' Linux = Linux ']'
  • echo 'Installing on Linux'
    Installing on Linux
  • install_unix
  • echo 'Installing backrest to /usr/local/bin'
    Installing backrest to /usr/local/bin
  • sudo mkdir -p /usr/local/bin
    ++ ls -1 backrest
    ++ head -n 1
    ls: Zugriff auf 'backrest' nicht möglich: Datei oder Verzeichnis nicht gefunden
  • sudo cp /usr/local/bin
    cp: Fehlender Zieldatei‐Operand hinter '/usr/local/bin'
    „cp --help“ liefert weitere Informationen.
  • create_systemd_service
  • '[' '!' -d /etc/systemd/system ']'
  • echo 'Creating systemd service at /etc/systemd/system/backrest.service'
    Creating systemd service at /etc/systemd/system/backrest.service
  • sudo tee /etc/systemd/system/backrest.service
    ++ whoami
    ++ whoami
  • echo 'Reloading systemd daemon'
    Reloading systemd daemon
  • sudo systemctl daemon-reload
  • echo 'Enabling systemd service backrest.service'
    Enabling systemd service backrest.service
  • sudo systemctl enable backrest
  • sudo systemctl start backrest
    `

Support restic check

Add support to check the repo.

The following checks are available :

  • Repo Integrity
  • Packfile Integrity
    • Full check --read-data
    • Specified subset of repo --read-data-subset=n/t
    • Random subset of repo
      • Random subset by percent --read-data-subset=x%
      • Random subset by size --read-data-subset=nS

The existing plans can be classified into backup plan and check plan. Check plan can be scheduled similar to backup plans.

This could be considered a high priority issue since repo can be corrupted due to updates or existing undiscovered bugs (eg : recent compression bug). If repo corruption is known soon, it can rectified.

Fix Azure blob repo config check

Right now, Backrest requires AZURE_ACCOUNT_KEY when configuring a Azure Blob Repo. However, according to the documentation, both AZURE_ACCOUNT_KEY as well as AZURE_ACCOUNT_SAS are interchangeably valid.

question re: configuring S3 repositories

Hi,

Sorry for the dumb question, but completely new to restic / backrest. HI have an S3 bucket repo setup, and a plan. But how do you configure a client to use backrest to push backups? Sorry if this is a completely stupid question.

Add support for pre / post scripts

First I'd like to thank you for this great project -- very nice idea, can't wait to see further releases! Makes restic so much easier to use and/or setup.

A thing I really miss is the support for pre / post scripts which can run before / after (successful or failed) backups. In my specific case I need to wake up my NAS (via WOL, can be done with an external script) before backrest can start the actual backup.

Would be really great to have such a feature on a per-repo basis. Thanks!

Fix windows installer

Note: windows support is experimental

Right now windows fails to automatically download and install restic from a zip archive.

This can be worked around by manually installing restic to the path prompted at first run.

Forget and prune after running backups

Basic idea

  • Forget operation's retention policy should be configurable in the plan GUI
  • If forget deletes anything append "delete" events for the removed snapshot IDs.

Open questions: how should garbage collection in the case of an offline prune or forget operation be handled?

  • Proposal: schedule indexing snapshots as a task, when it runs a set of known snapshot IDs should be loaded and fully diffed with the state of the repo. This is a bit expensive but far from terrible (e.g. order of hundreds of milliseconds even when scaling to tens of thousands of operations in the log).

Implement cache layer

Improve UI performance with an on-disk caching layer for commonly fetched data -- particularly snapshots

Refresh policy

  • On startup all repos should be checked (e.g. restic.Repo.Init)
  • On startup all snapshot storage should be refreshed
  • After a backup or prune operation the list of snapshots in the cache should be refreshed.

Caching should be done on a per-repository basis.

SIdebar doesn't update status

The sidebar doesn't update its status when one backup finishes and another starts:

image

As you can see, based on the sidebar, companies is the currently running backup. But it already finished and the currently active backup is apps, as correctly indicated by the header.

Duplicate Schedule

Hi Gareth,

for some reason, one of my backups (I have 2), is now scheduled to run twice at the same time:
image

My backup configuration in the json file is the following:

    {
      "id": "Backup",
      "repo": "Backup_Repo",
      "paths": [
        "/raid/2Backup"
      ],
      "excludes": [],
      "cron": "0 11 * * *",
      "retention": {
        "maxUnusedLimit": "",
        "keepLastN": 7,
        "keepHourly": 0,
        "keepDaily": 0,
        "keepWeekly": 0,
        "keepMonthly": 0,
        "keepYearly": 0,
        "keepWithinDuration": ""
      },
      "hooks": []
    },

Any idea why it happened?

documentation: publish a wiki or expanded docs site

Investigate good options for generating a documentation site to elaborate in more detailes on the capability of backrest.

Areas to expand in particular are:

  • Repo configuration
  • Scheduling options and health tasks
  • Hooks and hook templates + working examples (hooks are Golang templates, this is worth an article)

How to find failed backup files

Hi Gareth,

I've got a warning in a job about at least one source file was not able to be added to the backup. This is the log message I have:

2024-02-11T11:00:00.193Z	INFO	running task	{"task": "backup for plan \"Backup_Job\""}
2024-02-11T11:26:11.911Z	DEBUG	hook output: ---- payload ----{"content":"Backrest Notification
Task: \"backup for plan \"Backup_Job\"\" at 2024-02-11T11:26:10Z
Error: failed to backup: command \"/data/restic-0.16.4 backup --json --exclude-caches -o sftp.args=-oBatchMode=yes /source/To_Backup --tag plan:Backup_Job --parent 17fa10ea92cb8342ff6bc620ff5da678c01ac778b003a68f801b8c649b3d062d\" failed: incomplete backup
Process STDOUT: 
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0,\"total_files\":1,\"total_bytes\":288}
{\"message_type\":\"status\",\"seconds_elapsed\":4,\"percent_done\":0,\"total_files\":1,\"total_byt...[17259073 bytes dropped]..._bytes\":46112872238,\"bytes_done\":46112853380,\"error_count\":2}
{\"message_type\":\"summary\",\"files_new\":402,\"files_changed\":818,\"files_unmodified\":134051,\"dirs_new\":6,\"dirs_changed\":807,\"dirs_unmodified\":219415,\"data_blobs\":11842,\"tree_blobs\":579,\"data_added\":6488076064,\"total_files_processed\":135271,\"total_bytes_processed\":46112853380,\"total_duration\":1563.640250311,\"snapshot_id\":\"6fa17b6516676fb8ca86697af0cd2c3de767c66b0fed418068b097dc1b15ba6a\"}
Warning: at least one source file could not be read

"}
2024-02-11T11:26:15.474Z	INFO	task finished	{"task": "collect garbage", "duration": "208.288397ms"}
2024-02-11T11:26:11.911Z	INFO	Backup complete	{"plan": "Backup_Job", "duration": "26m11.121661696s", "summary": {"message_type":"summary","files_new":402,"files_changed":818,"files_unmodified":134051,"dirs_new":6,"dirs_changed":807,"dirs_unmodified":219415,"data_blobs":11842,"tree_blobs":579,"data_added":6488076064,"total_files_processed":135271,"total_bytes_processed":46112853380,"total_duration":1563.640250311,"snapshot_id":"6fa17b6516676fb8ca86697af0cd2c3de767c66b0fed418068b097dc1b15ba6a","percent_done":0,"total_files":0,"files_done":0,"total_bytes":0,"bytes_done":0,"current_files":null}}

How can I know what is the failed file?
Is there any other log available than the one from the docker container?

Create automation to generate PRs updating restic version on restic releases

Background

The UI is built against a specific version of restic. This ensures that changes to restic do not break the way the UI handles it's output (each UI release is validated with a single version of restic).

Proposal

Use https://github.com/marketplace/actions/create-pull-request and simple sed based automation to determine the latest version of restic and create a pull request if the hard coded version is out of date. Each time a PR is generated a new minor release should additionally be published that releases Restic UI with the latest minor version of restic.

How to delete backups from old plan?

During my tests, I created 2 plans to backup to the same repository. I then deleted one of the plans, but the repository still shows the old backup.
Is there a way to remove that data without deleting the repository? I see no option for this in the interface...
image

Command hook fails in docker image

I added a hook to one of my backups with the following configuration:
image

but it seems this hook is generating an error when executed:
image

This is the log I see in the frontend:

------- script -------
#! sh
echo 'Task: "backup for plan "Series"" at 2024-02-06T08:02:08Z
Event: snapshot end
Repo: Series 
Plan: Series 
Snapshot: 0e734343be9e288cafeaec9de515d473f709fb59babb6de0b30fdd6ead50c066
Overview:
- Data added: 1.001 GB
- Total files processed: 6610
- Total bytes processed: 1.001 TB

Backup Statistics:
- Files new: 4
- Files changed: 6
- Files unmodified: 6600
- Dirs new: 0
- Dirs changed: 9
- Dirs unmodified: 227
- Data blobs: 2026
- Tree blobs: 10
- Total duration: 115.67551034s

'
------- output -------
Error: exec: "sh": executable file not found in $PATH

I'm using the latest version 0.11.0, running on Docker.
I also can't open a shell connection to the docker container, so the shell binary is probably missing.

Windows start errors

backrest.exe
2024-02-06T21:44:57.660+0100    INFO    Installing restic C:\Program Files (x86)/restic/restic-0.16.3.exe to 0.16.3...
2024-02-06T21:44:59.574+0100    INFO    Decompressing zip archive (size=9163895)...
2024-02-06T21:45:01.300+0100    INFO    Installed restic 0.16.3
2024-02-06T21:45:01.301+0100    INFO    Generating new auth secret
2024-02-06T21:45:01.301+0100    FATAL   Error writing secret to file: open C:\Users\asd\AppData\Roaming/backrest/data/jwt-secret: The system cannot find the path specified.

Change
/backrest/data/jwt-secret

to \backrest\data\jwt-secret

Improvement: Hook test

Can a hook test button be implemented?
When we create new hooks, it would be nice to force a test hook trigger to test the configuration.

why is a dot an "invalid symbol" for Repo Name?

hello!
FYI - I am trying out backrest on linux, deployed via docker...

When i choose Add Repo to "Add Restic Repository", the first field Repo Name will not accept a dot in the name. As my normal repository nomenclature is myname.repo so Backrest complained: invalid symbol.

Restic allows me to put dots in the name, why not Backrest?

p.s. for now I continued with myname_repo so it is a minor item for me.

Feature: centralized backup management

For me, thr big problem with Restic is to manage, I mean, for each server it's installed, will need a different management location.
It's difficult to manage a big set of servers, so I would like to know if is there a plan for Backrest to manage all the Restic backups from a single WebUI.
It could be like Cockpit do with Linux Server, but it will be better if there is a dashbord where we can follow the latest backups results from all servers.

Error building docker container

Hi,

I tried to build a new docker image from the git code. Everything runs well, the image is created but when I create a container from that image it does not run, instead I get the error:
exec /backrest: no such file or directory

I'm using the following commands to build the image and container:

docker build . -t testbackrest:v1 --no-cache
docker container run -it --name=atest -p 9899:9898 -e BACKREST_DATA=/data -e BACKREST_PORT=9898 -e XDG_CACHE_HOME=/cache -v $(pwd)/.backrest/config:/.config/backrest -v $(pwd)/.backrest/data:/data -v $(pwd)/.backrest/cache:/cache  testbackrest:v1

If I run the built backrest executable, it runs well outside the container.

I then modified the Dockerfile to add a shell, and modified the entrypoint to launch the sheet instead of backrest. I looks as follows:

FROM busybox:1.35.0-uclibc as busybox

FROM golang:alpine as gobuild
RUN mkdir /tmp-orig
COPY backrest /backrest

FROM scratch
COPY --from=gobuild /tmp-orig /tmp
COPY --from=gobuild /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# Now copy the static shell into base image.
COPY --from=busybox /bin/sh /bin/sh
COPY --from=busybox /bin/mkdir /bin/mkdir
COPY --from=busybox /bin/cat /bin/cat
COPY --from=busybox /bin/ls /bin/ls

ENTRYPOINT ["/bin/sh"]
#ENTRYPOINT ["/backrest"]
COPY backrest /backrest

Building the container from the new image now launches the shell, from where I can see the backrest executable, but launching it still throws the same error.

/ # ls -lsa
total 19124
     4 drwxr-xr-x    1 0        0             4096 Feb  7 18:30 .
     4 drwxr-xr-x    1 0        0             4096 Feb  7 18:30 ..
     4 -rw-------    1 0        0                8 Feb  7 18:30 .ash_history
     4 drwxr-xr-x    3 0        0             4096 Feb  7 18:30 .config
     0 -rwxr-xr-x    1 0        0                0 Feb  7 18:30 .dockerenv
 19088 -rwxr-xr-x    1 0        0         19542680 Feb  7 16:50 backrest
     4 drwxr-xr-x    1 0        0             4096 Feb  7 17:18 bin
     4 drwxr-xr-x    2 0        0             4096 Feb  7 16:53 cache
     4 drwxr-xr-x    2 0        0             4096 Feb  7 16:53 data
     0 drwxr-xr-x    5 0        0              340 Feb  7 18:30 dev
     4 drwxr-xr-x    1 0        0             4096 Feb  7 18:30 etc
     0 dr-xr-xr-x  224 0        0                0 Feb  7 18:30 proc
     0 dr-xr-xr-x   12 0        0                0 Feb  7 18:30 sys
     4 drwxr-xr-x    2 0        0             4096 Feb  7 17:18 tmp
/ # ./backrest
/bin/sh: ./backrest: not found

Am I doing something wrong? Why is backrest not working inside the container, but works outside?

The only problem I had when creating the development environment was running this command:

go install github.com/GeertJohan/go.rice@latest

package github.com/GeertJohan/go.rice is not a main package

Tried to remove the @latest part from the command, but it does not seem to do anything, but there's no error as well.

I get the error package github.com/GeertJohan/go.rice is not a main package

I then installed rice from the package manager:

sudo apt install -y golang-rice

At least I learned how to add the shell command and external cli tools.

Schedule-less plans / on-demand backup of repos?

On my laptop, I prefer to trigger backups on-demand rather than using a schedule. It would be great if it were possible to create a plan without a schedule - or offer on-demand backups directly from the repo. The only issue I see with the latter is that I do still want to prune after a backup, and retention polices are currently configured on the plan.

By the way, how do retention polices work with multiple plans? Does the restic forget command target the plan tag so it only applies to snapshots created by a given plan? Is there a way to see the actual command that was run (or params passed to a restic library) in the operation list?

macOS install.sh error

Hi there! Thanks for mentioning backrest on HN. I downloaded the version for macOS and first ran backrest via Right Click > Open. This ran the program in a foreground shell, so I realized I should run install.sh. I opened a terminal, ran it, and got the following output:

❯ ./install.sh
Installing on Darwin
Installing backrest to /usr/local/bin
Password:
Creating launchd plist at /Library/LaunchAgents/com.backrest.plist
Enabling launchd plist com.backrest.plist
Unload failed: 5: Input/output error
Try running `launchctl bootout` as root for richer errors.

That being said, it apperas to be running successfully. Anything I should be aware of?

rclone support with macOS install script

rclone is ostensibly supported by repo URI's such as rclone:name:path but users hit an error when backrest tries to fork the rclone executable (e.g. it can not be found on the path).

Let's try to figure out why the environment isn't properly being propagated such that the executable isn't found.

Hooks to ping rest api GET and POST requests (eg : for cron monitoring services like healthchecks.io)

Cron monitoring services like healthchecks.io can be pinged using GET or POST requests. They can also store log information upto 100KB.

Reference : https://healthchecks.io/docs/http_api/

Considering adding support for get and post request using hooks.

The difference between this and existing hooks is cron monitoring services can detect if backrest is not running. They need to ping regularly. If they are not pinged then they determine backrest is down.

Current webhooks will not notify if backrest itself is not running.

Adding GET and POST requests will allow many other services to be used.

Error removing hook

Hello,

I have these 2 hooks:
image
If I delete Hook 0, Hook 1 will become Hook 0 and will loose it's configuration, becoming this:
image

It is then not possible to save the configuration due to missing configuration:
image

Removing all Hooks and adding a new one does not work, unless we save the configuration after removing the existing hooks.

It happens in the plans and in the repositories configuration.

Possible issue in Docker with hostname

Hi,

I've added the hostname to my docker compose file, but at the top of backrest interface, the hostname shows some ID.
image

I've looked at the container details, and the hostname is correctly showing there:
image

Then I realized the hostname was being pulled from the config.json file:
image

This was probably the ID from the 1st time I've created the backrest container...

Is this the expected behavior? For me I would expect the hostname to be dynamic, either by reading the container hostname when opening the user interface, or updating the config file on every time the containter is started.

Reading password from a password command

Hi! Coming from the forums.

I believe the best way to implement this would be to have a "password command" field next to the password field where one could input the command. Similar to restic's own RESTIC_PASSWORD_COMMAND env. Backrest will then run that command everytime it needs the password.

For the docker container, an env variable could be used.

This way multiple repositories could have different commands/env variables.

Wrong Retention Policy in the UI

Hi, I just noticed the plans retention policy is not showing properly in the UI.
I've set the plan to keep the last 7 backups, but the UI is showing none:
image

Selecting retention by count defaults to 30:
image

The config.json file shows the correct configuration:
image

I also tested setting the retention by time, and the same behavior happens, but the config file is correctly saved.

Implement the operation log

The state store will store quick-access information about operations performed by Restic UI. This is not for metadata that can be computed from the live repo (a caching abstraction should be built for that purpose).

Example data for state storage

  • Backup operation log
  • Health operation log
  • Last known config (e.g. for offline edit detection)

UI Improvements

Hi,

I would like to propose 3 UI improvements:

  1. Add, somewhere in the frontend, a link to the Backrest Git repository
  2. Increase the text size of the backup executed additional details (I don't know exactly what to call to this, so check the image below)
    image
    I find this text very difficult to read, I often have to use the browser zoom to read it.
  3. There is now a logout link on the top right corner (after the host), but it's written in black with a grey background color, so it's not readable
    image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.