How it works

How it works — high level and practical. The Panel (synconixm) lives on one VPS, it provisions two kinds of remote machines (Production and Storage), then moves data between them over SSH (or a locked rsync tunnel) into timestamped “backup points”. Restores run the opposite way.

What the installer lays down (Panel node)

• Creates/uses the Panel system user synconixm with home /home/synconixm.
• Installs the Panel app (RPM) and seeds the working tree /home/synconixm/.synconix: scripts (.synconix/scripts), sessions (.synconix/sessions), cron lists (.synconix/cron), private keys (.synconix/private_keys), downloads, cloud configs, and TLS certs (.synconix/certs).
• Web access can be IP-restricted via .synconix/security.txt (simple allow-list the Panel checks on each request).
• The Panel database keeps users/roles, servers, storages, schedules, logs, activity, and settings.

OS support

Production/Storage nodes are autodetected and handled via their native package managers: RHEL/CentOS/Alma/Oracle (dnf/yum), Debian/Ubuntu (apt), openSUSE (zypper), FreeBSD (pkg), and Slackware (slackpkg).

Provisioning a server (what happens on “Add Server / Add Storage”)

1) Panel logs in as root once (temporary RSA key) just to bootstrap.
2) Creates the system user synconix with sudo NOPASSWD and home /opt/synconix/home:
— on Production: standard UID with sudo.
— on Storage: root-equivalent account (UID 0) where required for low-level operations (per code path).
3) Generates a new per-server RSA keypair (passphrase-protected) and installs it: authorized_keys on the remote, .prv/.pub in /home/synconixm/.synconix/private_keys/ (0600).
4) Installs tools and the Panel’s own rsync 3.x under /opt/synconix/bin/rsync plus helper scripts in /opt/synconix/scripts; sets sudoers for the synconix user.
5) Detects control panels (cPanel/Plesk/DirectAdmin) and capabilities (ACL support, SQL client, IPs).

Key management & transport security

• Each remote gets a unique RSA keypair; private keys are stored locally under /home/synconixm/.synconix/private_keys/<server_ip>.prv and encrypted with a salt-derived passphrase. Permissions are strict (0600).
• A short-lived default key (with passphrase) is used only for first root login; it’s removed afterward.
• Default SSH flags include connect/keepalive timeouts, known-hosts off (first contact provisioning), and the cipher AES-128-CTR for predictable performance.
Tunnel mode (optional): the Panel can configure a locked rsync daemon on a custom port (59123) on Production, with:
  — hosts allow listing only the Storage IPs,
  — an auth user and secret, and
  — service managed by systemd/init (installed as synconix.service).
This reduces SSH setup overhead when doing large pulls; credentials are injected only at run time.

Where data flows (two patterns)

Linux Storage → Production (pull): for on-prem storage, the Storage node initiates the transfer and pulls from Production over SSH (or the tunnel), writing into /<your-partition>/<sha1(schedule_id)>/ on Storage. Files and MySQL live under separate paths.
Cloud Storage (push): when the target is cloud, the Production server runs rclone with a per-storage config the Panel deploys, and pushes to the cloud remote. Filters and logs are still managed by the Panel.

What a backup run actually does

• The Panel builds include/exclude lists (files) or DB excludes (MySQL) under /home/synconixm/.synconix/cron/<sha1(schedule_id)>/ and sends them to the executor (Storage or Production).
• It starts a detached screen session remotely and runs the job script: backup.sh for files, mysql.sh for databases (under /opt/synconix/scripts).
Incremental backups are enabled by default after the first full run (rsync – hardlink/XAttrs/ACL awareness if available). Each run creates a new backup point folder (timestamped).
• Logs and state are written under /opt/synconix/cron/<sha1(schedule_id)>/ on the executor (plus “running” markers at the Panel).

Retention & promotion

• The Panel enforces daily/weekly/monthly retention: oldest points are moved to scheduled_for_deletion_* then purged (merge runs “after” a job if configured).
• Weekly = rename an old daily to _weekly (typically Mondays). Monthly = rename an old weekly (or daily) to _monthly on day 1. Counts are kept exactly to your configured points.

Restores

Granular: from the Panel, pick a point and restore file/folder paths back to Production (Storage pushes over SSH/tunnel).
MySQL: restore specific dumps from the selected point using the job’s SQL connection settings.
Disaster Recovery: Storage generates a temporary RSA key, authorizes it on the destination server’s root, then uses /opt/synconix/bin/rsync -aHAXW --numeric-ids to rebuild the filesystem from a chosen point, honoring your exclude list.
End-user plugins (optional): cPanel/WHM or Plesk extensions let customers browse/restore their own files safely; the Panel installs/uninstalls these and writes the API endpoint & schedule ID automatically.

What gets installed on remotes

• User: synconix (sudo NOPASSWD), home /opt/synconix/home; on Storage it may run as UID 0 (root-equivalent) per code.
• Binaries: /opt/synconix/bin/rsync (Panel’s version), ssh/ssh-agent, and required utilities.
• Scripts: /opt/synconix/scripts/backup.sh, mysql.sh, exec.sh, session.sh.
• Runtime: /opt/synconix/cron/<sha1(schedule_id)>/ for lists, logs, and point markers.
• Keys: /opt/synconix/home/.ssh/authorized_keys (+ for Storage, per-production private keys like .ssh/<prod_ip>.prv when needed).

SSH keys, passphrases, and tunnels

Per-server keys are passphrase-protected with a salt derived at deploy time; the Panel unlocks them only when needed (via ssh-agent).
Tunnel mode uses a dedicated rsync daemon on 59123 with an auth user/secret and a hosts allow list. The Panel sets and rotates these, and exports the secret to the job only for the lifetime of that run.
• Optionally, a TLS-wrapped socat service can be enabled on Storage for secure, IP-limited file metadata operations (Panel generates per-storage CA/client certs and validates SOCAT_PEERADDR).

End to end in one minute

1) Add Storage → 2) Add Production → 3) Create a Schedule (files/SQL) → 4) Run → 5) New point appears under the schedule path → 6) Browse/restore → 7) Retention keeps your daily/weekly/monthly sets tight.

Navigation