Self-Hosted Maintenance Essentials Guide

Last updated: February 2026

Intro

This guide covers the ongoing maintenance tasks required to keep your self-hosted Djangify eCommerce Builder secure, reliable, and recoverable.

You do not need to perform these tasks daily, but you should understand them before going live.


Database Backup Strategy

Your database contains:

  • products

  • orders

  • customers

  • pages

  • configuration

If the database is lost without a backup, your store cannot be recovered.


Manual Database Backup

From your project directory:

source venv/bin/activate python manage.py dumpdata > backup-$(date +%Y%m%d).json

This creates a full JSON backup of the database with a date-stamped filename.

Store backups somewhere safe — ideally off the server (cloud storage or another machine).


Backing Up Media Files

Media files include:

  • product images

  • downloadable products

  • uploaded assets

Create a compressed backup:

tar -czf media-backup-$(date +%Y%m%d).tar.gz media/

Media backups are just as important as database backups.


Automated Daily Backups (Recommended)

Create a backup script:

nano /home/user/backup-ebuilder.sh

Add the following content:

#!/bin/bash BACKUP_DIR="/home/user/backups" DATE=$(date +%Y%m%d) mkdir -p $BACKUP_DIR cd /home/user/ebuilder || exit 1 source venv/bin/activate python manage.py dumpdata > $BACKUP_DIR/db-$DATE.json tar -czf $BACKUP_DIR/media-$DATE.tar.gz media/ find $BACKUP_DIR -mtime +7 -delete

Make the script executable:

chmod +x /home/user/backup-ebuilder.sh

Schedule it to run nightly at 3am:

crontab -e

Add:

0 3 * * * /home/user/backup-ebuilder.sh

This keeps 7 days of rolling backups.


Restoring from Backup

If you need to restore your store:

  1. Stop the application service:

    sudo systemctl stop ebuilder
  2. Restore the database:

    source venv/bin/activate python manage.py loaddata backup-YYYYMMDD.json
  3. Restore media files:

    tar -xzf media-backup-YYYYMMDD.tar.gz -C /home/user/ebuilder/
  4. Restart the application:

    sudo systemctl restart ebuilder

Backup Best Practices

  • Keep daily backups for at least 7 days

  • Store weekly or monthly backups off-site

  • Test a restore occasionally

  • Never assume a backup works until you’ve restored it successfully


Updating the Application

When a new version of eCommerce Builder is released, you can update safely without losing data.


Before Updating (Always)

Create a backup:

python manage.py dumpdata > backup-before-update.json tar -czf media-before-update.tar.gz media/ cp .env .env.backup

Update Process

  1. Download the new version from your Djangify dashboard

  2. Upload the new application files to the server

    • Do not overwrite:

      • .env

      • db.sqlite3

      • media/

  3. Apply migrations:

    source venv/bin/activate python manage.py migrate
  4. Collect static files:

    python manage.py collectstatic --no-input
  5. Restart the application:

    sudo systemctl restart ebuilder

Visit your site and test:

  • admin login

  • page loading

  • checkout (Stripe test mode)


If Something Goes Wrong

  1. Stop the application:

    sudo systemctl stop ebuilder
  2. Restore previous code and backups

  3. Reload the database and media

  4. Restart the service

If problems persist, contact support with:

  • what version you updated from

  • what version you updated to

  • the exact error message


Monitoring and Health Checks

Proactive monitoring helps you catch issues before customers do.


External Uptime Monitoring (Essential)

Use an external service such as:

  • UptimeRobot

  • HetrixTools

  • StatusCake

Monitor:

  • https://yourdomain.com

  • https://yourdomain.com/admin

Set alerts if the site is down for more than 10 minutes.


Application Health

Check service status:

sudo systemctl status ebuilder

View recent logs:

journalctl -u ebuilder -n 50

This replaces all container-based logging.


Disk Space Monitoring

Check disk usage regularly:

df -h

If disk usage exceeds 85%, clean up backups or upgrade your server.

SQLite databases can become corrupted if the disk fills completely.


Database Integrity Check (Occasional)

Run:

python manage.py dbshell

Then:

PRAGMA integrity_check;

The result should be:

ok

Type .quit to exit.


SSL Certificate Checks

Caddy renews certificates automatically.

You can manually verify:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Routine Maintenance Tasks

Weekly

  • Check disk space

  • Confirm backups are being created

  • Review recent logs for recurring errors

Monthly

  • Review server resource usage

  • Check for eCommerce Builder updates

  • Review Stripe dashboard for anomalies

  • Test restoring a backup

Quarterly

  • Review info pages (Privacy, Terms)

  • Verify product downloads still work

  • Review admin users and permissions

  • Rotate credentials where appropriate


Security Maintenance

  • Keep your server OS updated:

    sudo apt update && sudo apt upgrade
  • Ensure .env permissions are restrictive:

    ls -la .env

    It should be readable only by the owner.

  • Remove unused admin accounts

  • Never share .env files in support requests


Performance Considerations

  • Run collectstatic after frontend changes

  • Resize and compress images before uploading

  • SQLite performs well for most stores

  • If you experience sustained performance issues at scale, consider PostgreSQL


Final Notes

You do not need:

  • Docker

  • complex monitoring stacks

  • aggressive tuning

A simple, well-maintained server with regular backups and monitoring is sufficient for most stores.

If backups are working and the site is monitored, you are already doing the most important things.