sndnv / stasis

Backup and recovery system with emphasis on security and privacy
Apache License 2.0
53 stars 4 forks source link
android backup docker encryption flutter kotlin python recovery scala storage

stasis

A stasis /ˈsteɪsɪs/ or stasis field, in science fiction, is a confined area of space in which time has been stopped or the contents have been rendered motionless.

stasis is a backup and recovery system with an emphasis on security and privacy; no personal information is collected, no unencrypted data leaves a client device and all encryption keys are fully in the control of their owner.

Linux/macOS Client CLI

asciicast

Linux/macOS Client UI

Login Screen Home Screen
Backup Definitions Screen Recovery Screen

Android Client

Bootstrap Screen" Login Screen Navigation Hint
Help Hint Home Screens Definition Details Screen

Why?

Goals

Along with provision, the goal is to be able to grab a blank/off-the-shelf device and recover the original system in an automated and repeatable way.

Features

Installation

Server

Docker images for server, server-ui, identity and identity-ui can be found under Packages.

See deployment/production for more information on how to set up and deploy the services.

Clients

Client binaries for Linux, macOS and Android can be found for each release.

Linux and macOS

The provided installer can be used:

$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_install.sh" | bash
Removing

The Linux and macOS clients can be uninstalled using:

$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_uninstall.sh" | bash
Updating

The Linux and macOS clients can be updated by uninstalling the current version and installing the latest one:

$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_uninstall.sh" | bash
$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_install.sh" | bash

Secrets, configuration, logs and operation state are NOT removed when uninstalling the client!

Android

On Android, installing and updating is done by simply downloading the apk file and running it.

Testing

Images and binaries for testing/development purposes can be created locally using the existing dev tools.

Development

The majority of the code is Scala so, at the very least, Java (JDK17) and SBT need to be available on your dev machine.

Some submodules use Python (ex: client-cli), Flutter (ex: identity-ui) or Kotlin for Android (ex: client-android) so the appropriate tools for those platforms need to be available as well.

Protobuf is also used, however, it is handled by an sbt plugin and no additional tools are needed.

There are also some Python and Bash scripts to help with deployment and testing.

Downloads / Installation:

Getting Started

1) Clone or fork the repo 2) Run sbt qa

Submodules

To execute all tests and QA steps for the Scala submodules, simply run sbt qa from the root of the repo.

assets

Image assets used by other submodules.

proto

Protocol Buffers file(s) defining gRPC services and messages used by the core networking and routing.

core

Core routing, networking and persistence code. Represents the subsystem that handles data exchange.

shared

API and model code shared between the server and client submodules.

identity

OAuth2 identity management service based on RFC 6749.

identity-ui

Web UI for identity.

server

Backup management and storage service.

server-ui

Web UI for server.

client

Linux / macOS backup client, using server for management and storage.

client-cli

Command-line interface for client.

client-ui

Desktop interface for client.

client-android

Android backup client, using server for management and storage.

deployment

Deployment, artifact and certificate generation scripts and configuration.

Current State

Ready for prime time but run in production at your own risk!

Contributing

Contributions are always welcome!

Refer to the CONTRIBUTING.md file for more details.

Versioning

We use SemVer for versioning.

License

This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details

Copyright 2018 https://github.com/sndnv

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.