Get GWS Backup running securely on your cPanel server in about twenty minutes.
You'll need four things:
update.zip), the deploy script (update.php) and a README with these same instructions.The app itself needs roughly 100 MB of disk and about 50 MB of RAM per client workspace. Your actual backup data is stored in your destination (Google Drive, S3, Azure or local disk) — not on the web server.
Never install GWS Backup inside public_html.
The application folder contains your encrypted credentials database, your .env encryption keys and your recovery keys. If those live under public_html, one misconfiguration could let anyone on the internet download them. The app is served by Node.js — it does not need to be in your web root, and it must not be.
/home/youruser/gwsbackup ✓ correct
/home/youruser/public_html/backup ✗ never
Use a random subdomain name.
Bots constantly scan predictable names like backup.yourdomain.com and admin.yourdomain.com looking for login panels to attack. Give your installation an unguessable address instead — for example vault‑k7x93q.yourdomain.com — and don't link to it from anywhere public. Your login page effectively becomes invisible to automated scanners.
Always use HTTPS. Run AutoSSL on the new subdomain before your first login so your admin password never travels in plain text.
In cPanel → Domains → Create a New Domain (or Subdomains):
vault-k7x93q.yourdomain.compublic_html, e.g. /home/youruser/gwsbackup_webThen open SSL/TLS Status and run AutoSSL so the subdomain gets a certificate.
cPanel → Software → Setup Node.js App → Create Application:
gwsbackup (a folder in your home directory — not inside public_html)app.jsClick Create, then Stop the app for now.
In File Manager, open the application root folder (e.g. /home/youruser/gwsbackup) and upload update.zip and update.php from your download. Then open the cPanel Terminal (or SSH) and run:
The wizard extracts the application and then deletes update.php and update.zip automatically to keep the server clean. No terminal access? Use File Manager's Extract on update.zip instead, then delete both update files manually.
Back in Setup Node.js App, add an environment variable so Google sign-in callbacks return to the right address:
(your real subdomain, including https://).
Click Start (or Restart) in Setup Node.js App. On first boot the app generates its own encryption keys and writes them to .env and recovery-keys.txt inside the app folder.
Visit https://your-random-subdomain/ in a browser:
That's it — set your backup schedule and destination in Settings and you're protected.
Updates are one command, and your database is backed up automatically first:
update.zip and update.php into your existing application root (the folder containing gws-backup.db).The script backs up your database to db_backups/backup_db_<timestamp>.zip, clears the old build, extracts the new one and removes the update files. Your database, licence and settings are untouched. Finally, restart the app in Setup Node.js App.
Once you've confirmed an update is stable, delete older archives from db_backups/ — they count against your hosting quota.
Inside your application root, treat these as crown jewels and keep your own offline copies:
.env — contains your ENCRYPTION_KEY. Without it, every credential stored in the app is permanently undecryptable.recovery-keys.txt — generated on first boot. Store it offline, then delete it from the server.gws-backup.db — the application database (client configs, encrypted credentials, backup index).Migrating servers? Move the whole application folder, keep the same .env, and delete any -wal / -shm files before first start on the new machine. Remember your licence key may only be live on one installation at a time — retire the old server when the new one goes live.
NEXTAUTH_URL is missing or wrong (step 4).Still stuck? Check the FAQ — it's searchable — or use the contact form (allow 1–2 days for free-edition support).