2017 © Pedro Peláez

project wolnosciowiec-image-repository

File storage service, built for ultra-low budget shared hostings with no footprint on performance



File storage service, built for ultra-low budget shared hostings with no footprint on performance

  • Friday, June 1, 2018
  • by blackandred
  • Repository
  • 5 Watchers
  • 2 Stars
  • 31 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 22 Open issues
  • 26 Versions
  • 0 % Grown


Backup Repository

A specialized ninja for backup making - complete backups ecosystem. Fully multi-tenant, with its very granular permissions and client-side (E2E) encryption can act as a farm of backups for various people and organizations., (*1)

Build Status Documentation Status Maintainability codecov, (*2)


  • Fully multi-tenant, granular permissions and roles
  • End-To-End encryption. Server acts as a blob storage, client is encrypting client-side
  • Security focused, limit access by IP address, User Agent, limited scope API tokens. In future we may implement "scheduled backup windows" to prevent overwriting backups in short time periods
  • Backups rotation strategies
  • Very low resources requirements, a container with 256 MB ram and 0.5vCPU on a shared VM can fit
  • Fully compatible with containerized workflows (Docker supported out-of-the-box by both client and server)
  • Administrative frontend in web browser
  • JSON API, JSON Web Token (JWT), SWAGGER documentation for the API
  • On client side the backups are made on-the-fly, you don't need extra disk space for temporary storage

For installation, guides and more information please check the documentation: https://file-repository.readthedocs.io/en/latest/index.html

Requirements for the server: - A Cheap VM - minimum of 0.5 vCPU, 256 MB ram (for about 10 backups each night, but it depends on many factors, you need to check it and adjust by yourself before using on production) - PHP 8.0+ with bcmath, iconv, ctype, fileinfo, json, pdo, pdo_sqlite, pdo_pgsql - Composer (PHP package manager) - "file" standard unix shell command - "sha256sum" unix shell command - PostgreSQL 10.12+, (*3)

Requirements for the backup client "Bahub": - Python 3.7+ - For a list of required pip packages check: requirements.txt - PostgreSQL client tools (for PostgreSQL databases backup support) - MariaDB/MySQL client tools (for MySQL/MariaDB databases backup support), (*4)

Requirements to build the administration frontend from sources: - NPM 6+ - NodeJS v15+, (*5)

Requirements to manually build documentation: - sphinx-glpi-theme - sphinx, (*6)


Technically this repository consists of 3 applications + functional tests placed in following directories: - ./server - server written in PHP - ./frontend - web administration panel written in Vue.js - ./bahub - backup sending/downloading client written in Python - ./e2e - End-To-End integration tests that are testing server + frontend + client, (*7)

Check README.md of each of those projects to check technical details. Please report issues with suffixes in topic [Server] [Frontend] [Bahub]., (*8)


E2E - integration tests

Smoke testing of workflows that includes multiple applications, multiple interfaces together. The tests are using Chromium browser to test frontend, are launching backup client via shell, Symfony shell commands on the server side., (*9)

Tests are written in Gherkin/Cucumber language with addition of PHP on top of Behat 3.x framework., (*10)

Note: .feature files in E2E tests are English written scenarios that should be clear to the end user, so are also an instruction/specification of given feature - can be used as a documentation, (*11)

E2E tests on CI are performed on production mode, using a production-like container, (*12)

cd e2e

Notice: Requires server to be up and running on localhost:8000 in APP_ENV=test mode (uses technical endpoints and test token), (*13)

Server unit tests

Unit tests written in PhpUnit., (*14)

Unit tests on CI are performed on CI on host, (*15)

cd server

Server API tests

Functional API tests written in Codeception. Requires a server to be up and running under localhost:8000 in APP_ENV=test mode., (*16)

API tests on CI are performed on production mode, using a production-like container, (*17)

Bahub unit/functional tests

Unit and functional tests written in unittest + rkd.api.testing frameworks., (*18)

Unit and functional tests on CI are performed on CI on host, (*19)

cd bahub
rkd :test

Release versioning and naming

Each release is versioned according to Semantic Versioning and named. Names are taken from profession names to commemorate and express respect to forgotten professions., (*20)


Created by RiotKit Collective. Project initially created for three purposes:, (*21)

  • To store static files uploaded for users (libertarian/anarchist portal)
  • To store and serve training video files (video archive)
  • To store backups and version them. Limit the disk space and permissions to create a shared space for multiple organizations fighting for human-rights, tenants-rights, working-class rights and animals-rights.

The Versions