Open Source · MIT License

Your storage.
Your rules.

Self-hosted S3-compatible object storage, automated backups, and an elegant web panel — in one install.

Get Started View on GitHub
# Clone and install
$ sudo git clone https://github.com/andreapollastri/johnny /opt/johnny
$ cd /opt/johnny
$ sudo bash scripts/autoinstall.sh

# You're ready
$ source /etc/johnny/credentials/default-s3.env
$ aws s3 ls --endpoint-url "$AWS_ENDPOINT_URL"

Everything you need, nothing you don't

Production-ready object storage with batteries included. No vendor lock-in, no hidden costs.

S3-Compatible Storage

Powered by Garage. Works with any AWS SDK, CLI, or S3 client out of the box.

One-Command Install

A single script sets up Garage, Caddy with Let's Encrypt TLS, rclone, and cron jobs.

Automated SFTP Backups

Nightly sync of every bucket to remote servers with configurable retention policies.

Web Panel

Laravel-based dashboard for buckets, objects, and API keys with a clean interface.

Two-Factor Auth

TOTP 2FA and password reset via SMTP keep your storage management secure.

Self-Updating

Nightly cron pulls the latest release, runs migrations, and refreshes the panel.

Simple by design

A push-based model. Orchestration runs only on your primary VPS. Backup servers just need SSH and disk space.

Primary VPS
S3
Garage S3 API :3900
TLS
Caddy — HTTPS :443
UI
Web Panel — Laravel
RC
Nightly Cron → rclone SFTP
Backup Servers — SFTP
01
server-1
02
server-2

Production-ready from day one

Johnny wraps Garage with everything you need to run object storage in production: automatic TLS, nightly SFTP backups with retention, a CLI, and an optional web panel with 2FA.

  • Automatic Let's Encrypt TLS via Caddy
  • App credentials stored securely in /etc/johnny/
  • Date-based backup retention with configurable policy
  • Optional S3-to-S3 replication across Garage nodes
  • Ubuntu 24.04 LTS — minimal requirements

Up and running in minutes

Clone the repo, run the installer, and start storing objects. That's it.

1

Clone the repository

Clone outside /root so the Laravel panel can run as www-data.

$ sudo mkdir -p /opt
$ sudo git clone https://github.com/andreapollastri/johnny /opt/johnny
$ cd /opt/johnny
2

Run the autoinstaller

The interactive wizard installs dependencies, configures Garage, Caddy, rclone, and cron.

$ sudo bash scripts/autoinstall.sh
3

Load credentials and go

Your S3 credentials are ready. Use any AWS SDK or S3 client to start working.

$ source /etc/johnny/credentials/default-s3.env
$ aws s3 ls --endpoint-url "$AWS_ENDPOINT_URL"

Powerful, straightforward CLI

Manage storage, keys, and backups with simple commands.

General

johnny version Print installed version
johnny status Garage cluster status
johnny update Update installation

Buckets & Keys

johnny bucket list List all buckets
johnny bucket create Create a new bucket
johnny key list List API keys
johnny key create Create an API key

Backup Targets

johnny backup list List targets & retention
johnny backup create Add a backup target
johnny backup delete Remove a target
johnny backup run Run backup now

Web Panel

install-panel.sh Install the panel
johnny:admin Create admin user
config:cache Rebuild config cache

Ready to own your storage?

Deploy Johnny on your VPS in minutes. Free, open source, forever.