Skip to main content

Installing Pluton PRO on Linux Servers

This guide covers installing Pluton PRO on headless Linux servers without a desktop environment.

Prerequisites

  • A valid Pluton PRO license key
  • Linux server (x86_64 or arm64 architecture)
  • Minimum GLIBC Version: 2.29+ (check with ldd --version)
  • Root/sudo access
  • systemd (most modern Linux distributions)
  • curl
  • setcap from libcap2-bin/libcap (installed by default on many distributions)

Interactive Installation

curl -sSL "https://dl.usepluton.com/server-pro/scripts/install.sh?license=YOUR_LICENSE_KEY" | sudo bash

Replace YOUR_LICENSE_KEY with your actual Pluton PRO license key. The license key is validated when downloading the installer.

Follow the prompts to configure:

  • License key (for storage and future upgrades)
  • Server port (default: 5173)
  • Max concurrent backups (default: 2)
  • Encryption key (min 12 characters)
  • Admin username
  • Admin password

The installer runs with sudo so it can place binaries, create a systemd service, and set file permissions. The Pluton PRO service itself runs as the dedicated non-root pluton system user.


Non-Interactive Installation

For automated deployments, provide all configuration via command line:

curl -sSL "https://dl.usepluton.com/server-pro/scripts/install.sh?license=YOUR_LICENSE_KEY" | sudo bash -s -- \
--license "YOUR_LICENSE_KEY" \
--port 5173 \
--max-concurrent 2 \
--encryption-key "your-secure-encryption-key" \
--user admin \
--password "your-secure-password" \
--non-interactive

Installation with Config File

Create a configuration file (e.g., /tmp/pluton.env):

PLUTON_LICENSE_KEY=your-license-key
PLUTON_ENCRYPTION_KEY=your-secure-encryption-key
PLUTON_USER_NAME=admin
PLUTON_USER_PASSWORD=your-secure-password
SERVER_PORT=5173
MAX_CONCURRENT_BACKUPS=2

Then install:

curl -sSL "https://dl.usepluton.com/server-pro/scripts/install.sh?license=YOUR_LICENSE_KEY" | sudo bash -s -- \
--config /tmp/pluton.env --non-interactive

The installer stores PLUTON_ENCRYPTION_KEY separately in /etc/pluton/pluton.enc.env and writes the license key plus the remaining credentials to /etc/pluton/pluton.env.


Least-Privilege Linux Runtime

Linux server installs use a least-privilege model:

  • The systemd service runs as the dedicated pluton user and group, not as root.
  • Runtime data under /var/lib/pluton/ and sensitive environment files under /etc/pluton/ are owned by pluton with restrictive permissions.
  • /usr/bin/pluton-helper is installed for narrow elevated operations such as privileged restores, root-approved hook scripts, and ReaR rescue backups.
  • Root-only hook scripts and ReaR commands require explicit sudoers opt-in.

Local Backup Destinations

If you store backups in a local mounted path, external drive, or another directory outside /var/lib/pluton, grant the pluton user write access to that destination:

sudo apt update && sudo apt install acl -y
sudo setfacl -R -m u:pluton:rwx,d:u:pluton:rwx /path/to/pluton-backups

Replace /path/to/pluton-backups with your actual local backup destination.

Root Hook Scripts

Normal plan scripts run as the pluton user. If a script needs root privileges, enable root execution in the plan settings and allow only that script through sudoers:

sudo tee /etc/sudoers.d/pluton-helper-scripts >/dev/null <<'EOF'
pluton ALL=(root) NOPASSWD: /usr/bin/pluton-helper run-script /usr/local/libexec/pluton-hooks/pre-backup-root.sh
EOF
sudo chmod 440 /etc/sudoers.d/pluton-helper-scripts
sudo visudo -c -f /etc/sudoers.d/pluton-helper-scripts

Use a root-owned script path, and add one sudoers line per script that should be allowed to run as root.

ReaR Rescue Backups

Full Linux server backups use ReaR and require root access. Add these sudoers rules only on systems where you use bare-metal rescue backups:

sudo tee /etc/sudoers.d/pluton-helper-rear >/dev/null <<'EOF'
pluton ALL=(root) NOPASSWD: /usr/bin/pluton-helper run-rear mkbackup --config /var/lib/pluton/config/rear-config-*.conf --tmpdir *
pluton ALL=(root) NOPASSWD: /usr/bin/pluton-helper run-rear mkbackuponly --config /var/lib/pluton/config/rear-config-*.conf --tmpdir *
pluton ALL=(root) NOPASSWD: /usr/bin/pluton-helper run-rear checklayout --config /var/lib/pluton/config/rear-config-*.conf --tmpdir *
EOF
sudo chmod 440 /etc/sudoers.d/pluton-helper-rear
sudo visudo -c -f /etc/sudoers.d/pluton-helper-rear

Network Configuration

Pluton PRO requires two ports for full functionality:

PortPurpose
5173Web interface (configurable)

Firewall Configuration

# UFW (Ubuntu/Debian)
sudo ufw allow 5173/tcp

# firewalld (RHEL/CentOS/Fedora)
sudo firewall-cmd --permanent --add-port=5173/tcp
sudo firewall-cmd --reload

File Locations

PathDescription
/opt/pluton/Application binaries
/usr/bin/pluton-helperLeast-privilege helper for elevated Linux tasks
/var/lib/pluton/Data directory (database, logs, backups)
/etc/pluton/pluton.envLicense key plus admin username and password (secured, mode 600)
/etc/pluton/pluton.enc.envUser encryption key (secured, mode 600)
/var/lib/pluton/config/config.jsonNon-sensitive configuration
/var/lib/pluton/logs/Application logs

Custom Domain with Reverse Proxy

To access Pluton PRO via a custom domain (e.g., backups.example.com), set up a reverse proxy that forwards traffic to Pluton's local port.

Nginx

First Install Nginx:

sudo apt install nginx   # Debian/Ubuntu
sudo dnf install nginx # RHEL/Fedora

And then create /etc/nginx/sites-available/pluton:

server {
listen 80;
server_name backups.example.com;

location / {
proxy_pass http://127.0.0.1:5173;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

client_max_body_size 0;
}

Enable the site and reload:

sudo ln -s /etc/nginx/sites-available/pluton /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Caddy (Alternative)

Caddy provides automatic HTTPS with no extra configuration.

First install Caddy:

sudo apt install caddy   # Debian/Ubuntu
sudo dnf install caddy # RHEL/Fedora

Then create /etc/caddy/Caddyfile:

backups.example.com {
reverse_proxy 127.0.0.1:5173
}

Reload with sudo systemctl reload caddy. Caddy automatically provisions and renews SSL certificates.

Apache (Alternative)

First install Apache:

sudo apt install apache2   # Debian/Ubuntu
sudo dnf install httpd # RHEL/Fedora

Enable required modules and create /etc/apache2/sites-available/pluton.conf:

sudo a2enmod proxy proxy_http proxy_wstunnel
<VirtualHost *:80>
ServerName backups.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5173/
ProxyPassReverse / http://127.0.0.1:5173/

RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:5173/$1 [P,L]
</VirtualHost>
sudo a2ensite pluton && sudo systemctl reload apache2

SSL Certificate with Let's Encrypt

If using Caddy, SSL is automatic — no extra steps needed.

For Nginx or Apache, use Certbot:

# Install certbot
sudo apt install certbot python3-certbot-nginx # Nginx
sudo apt install certbot python3-certbot-apache # Apache

# Obtain and install certificate
sudo certbot --nginx -d backups.example.com # Nginx
sudo certbot --apache -d backups.example.com # Apache

Certbot automatically configures SSL and sets up auto-renewal via a systemd timer. Verify renewal works:

sudo certbot renew --dry-run
tip

Ensure your domain's DNS A record points to your server's public IP address before requesting a certificate.


Uninstalling

curl -sSL https://dl.usepluton.com/server-pro/scripts/uninstall.sh | sudo bash

For automated removal including all data:

curl -sSL https://dl.usepluton.com/server-pro/scripts/uninstall.sh | sudo bash -s -- \
--remove-data --non-interactive

Or use the local uninstall script:

sudo /opt/pluton/uninstall.sh

Managing the Service

# Check status
sudo systemctl status pluton

# Stop service
sudo systemctl stop pluton

# Start service
sudo systemctl start pluton

# Restart service
sudo systemctl restart pluton

# View logs
sudo journalctl -u pluton -f

Updating

curl -sSL "https://dl.usepluton.com/server-pro/scripts/install.sh?license=YOUR_LICENSE_KEY" | sudo bash -s -- --upgrade

This preserves your credentials, license, and data while updating the binaries.


Upgrading from Pluton (Free)

If you have an existing Pluton installation and want to upgrade to Pluton PRO, see Upgrading to Pluton PRO.