Self-Hosted Troubleshooting Guide

Last updated: September 2026

This guide covers common issues you may encounter with your self-hosted eCommerce Builder and how to resolve them.

\r\n

Application Issues

\r\n

Problem: Application Won't Start

\r\n

If the systemd service fails to start or immediately stops:

\r\n

Check the logs to see what error occurred: sudo journalctl -u ebuilder -n 100

\r\n

Common causes include:

\r\n

Port already in use. Check what is using it: sudo lsof -i :8000. Stop the conflicting application or change the port in your systemd service file and Caddyfile.

\r\n

Invalid environment variables. Review your .env file for syntax errors, missing quotes, or invalid values.

\r\n

Permissions issues. Ensure the data directory is writable by the user running the service: sudo chown -R youruser:youruser data/

\r\n

Try reinstalling dependencies from scratch: source venv/bin/activate, then pip install -r requirements.txt --no-cache-dir, then sudo systemctl restart ebuilder

\r\n

Problem: Application Keeps Restarting

\r\n

If sudo systemctl status ebuilder shows the service repeatedly failing:

\r\n

Check the logs for the specific error: sudo journalctl -u ebuilder -n 100

\r\n

Look for errors about missing environment variables, database connection failures, or Python import errors.

\r\n

Common causes include a corrupted database, a missing required environment variable in .env, or insufficient memory.

\r\n

If the database is suspected, restore from your most recent backup.

\r\n
\r\n

Static Files and CSS Issues

\r\n

Problem: Site Loads But Has No Styling

\r\n

If your site appears as plain HTML with no CSS styling:

\r\n

The static files may not have been collected. Run: source venv/bin/activate then python manage.py collectstatic --no-input

\r\n

Then restart the service: sudo systemctl restart ebuilder

\r\n

Check your browser's developer console (F12) for 404 errors loading CSS files.

\r\n

Verify WhiteNoise is properly configured in settings.py (it should be in the default installation).

\r\n

Try a hard refresh in your browser: Ctrl+Shift+R on Windows/Linux or Cmd+Shift+R on Mac.

\r\n

Clear your browser cache completely and try again.

\r\n

Problem: Admin Panel Styling Broken

\r\n

If the admin interface appears unstyled:

\r\n

Verify Adminita is installed: source venv/bin/activate then pip show adminita

\r\n

Run collectstatic again: python manage.py collectstatic --no-input

\r\n

Check that STATIC_ROOT is configured correctly in settings.py.

\r\n

Restart the service: sudo systemctl restart ebuilder

\r\n

Problem: Images Not Displaying

\r\n

If product images or uploaded files do not display:

\r\n

Check that the media directory has correct permissions: ls -la data/media. It should be writable by the user running the service.

\r\n

Verify the image file actually exists in data/media/products or the appropriate subdirectory.

\r\n

Check your MEDIA_URL and MEDIA_ROOT settings in settings.py.

\r\n

Ensure Caddy is properly proxying requests to your application without blocking media files.

\r\n
\r\n

Database Issues

\r\n

Problem: Database Locked Errors

\r\n

If you see \"database is locked\" errors:

\r\n

This occurs when multiple processes try to write to SQLite simultaneously.

\r\n

Check that only one instance of the application is running: ps aux | grep gunicorn

\r\n

Restart the service: sudo systemctl restart ebuilder

\r\n

If the problem persists frequently, consider migrating to PostgreSQL for better concurrency handling.

\r\n

Problem: Cannot Access Admin After Password Change

\r\n

If you have forgotten your admin password or cannot log in:

\r\n

Reset the password using the Django management command: source venv/bin/activate then python manage.py changepassword your@email.com

\r\n

Enter a new password when prompted.

\r\n

If you have forgotten your email address, list all superusers: python manage.py shell, then type: from accounts.models import User; print(list(User.objects.filter(is_superuser=True).values_list('email', flat=True)))

\r\n

Type exit() to leave the shell.

\r\n

Problem: Database Corruption

\r\n

If you suspect database corruption:

\r\n

Check database integrity: python manage.py dbshell, then run: PRAGMA integrity_check;

\r\n

If the result is not \"ok\", your database is corrupted.

\r\n

Stop the application immediately: sudo systemctl stop ebuilder

\r\n

Restore from your most recent backup: python manage.py loaddata backup.json

\r\n

If you have no backup, try running: PRAGMA wal_checkpoint(TRUNCATE); in the database shell, but data loss may occur.

\r\n

Always maintain regular backups to prevent permanent data loss.

\r\n
\r\n

Payment and Stripe Issues

\r\n

Problem: Payments Fail Immediately

\r\n

If customers see an error when trying to pay:

\r\n

Verify your Stripe keys are correct in .env: STRIPE_PUBLIC_KEY and STRIPE_SECRET_KEY

\r\n

Ensure you are using keys from the correct mode (test keys for testing, live keys for production).

\r\n

Check that your keys start with the correct prefix: pk_live or pk_test for public keys, sk_live or sk_test for secret keys.

\r\n

Restart the application after any .env changes: sudo systemctl restart ebuilder

\r\n

Test with Stripe test card 4242 4242 4242 4242 if in test mode.

\r\n

Check your Stripe dashboard for declined payments or error messages.

\r\n

Problem: Payment Succeeds But No Order Created

\r\n

This is almost always a webhook issue:

\r\n

Check your Stripe webhook configuration. Go to Stripe Dashboard, Developers, Webhooks.

\r\n

Verify the webhook URL is correct: https://yourdomain.com/shop/webhook (include the trailing slash).

\r\n

Ensure the webhook is listening for payment_intent.succeeded and payment_intent.payment_failed events.

\r\n

Check that STRIPE_WEBHOOK_SECRET in your .env matches the webhook signing secret in Stripe.

\r\n

Verify your webhook secret is from the same mode (test or live) as your API keys.

\r\n

In Stripe, click on the webhook and check the \"Event log\" tab to see if events were delivered successfully.

\r\n

If events show \"Failed\" with 4xx or 5xx errors, check your application logs: sudo journalctl -u ebuilder | grep webhook

\r\n

Test the webhook manually by clicking \"Send test webhook\" in Stripe.

\r\n

Ensure your domain's SSL certificate is valid. Stripe requires HTTPS.

\r\n

Make sure your server's firewall is not blocking inbound requests from Stripe.

\r\n

Problem: Orders Created But Downloads Not Available

\r\n

If orders appear in the admin but customers cannot download files:

\r\n

Verify the product has files attached. Go to Admin, Shop, Products, edit the product, and check the Downloads section.

\r\n

Check that download files exist in data/media/downloads/.

\r\n

Verify download limits are not set to zero for the product.

\r\n

Check the order details in Admin, Shop, Orders to ensure downloads_remaining is greater than zero.

\r\n

Review application logs for permission errors when serving files: sudo journalctl -u ebuilder | grep download

\r\n
\r\n

Email Issues

\r\n

Problem: Emails Not Sending

\r\n

If order confirmations or password reset emails are not delivered:

\r\n

Check your email configuration in .env. Verify EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, and EMAIL_HOST_PASSWORD are correct.

\r\n

For Gmail, ensure you are using an App Password, not your regular Gmail password.

\r\n

Test email sending manually: source venv/bin/activate then python manage.py test_email --to your@email.com

\r\n

Check for error messages in the output.

\r\n

Verify EMAIL_USE_TLS is set to True for port 587 or False for port 465 (SSL).

\r\n

Check that your SMTP provider allows sending from the address specified in DEFAULT_FROM_EMAIL.

\r\n

Some email providers require you to verify sender addresses before allowing outbound mail.

\r\n

Check your server's firewall allows outbound connections on port 587 or 465.

\r\n

Problem: Emails Go to Spam

\r\n

If emails are being delivered but marked as spam:

\r\n

Configure SPF and DKIM records for your domain. Check your email provider's documentation for specific DNS records to add.

\r\n

Use a domain-based FROM email address rather than a generic Gmail address.

\r\n

Avoid spam trigger words in email subject lines and content.

\r\n

Consider using a transactional email service like SendGrid, Mailgun, or Amazon SES instead of Gmail for production.

\r\n

Ask customers to whitelist your email address.

\r\n

Problem: Email Configuration Not Working from Admin

\r\n

If you set email settings in Admin, Shop Settings but emails still fail:

\r\n

Remember that .env settings take precedence over admin settings for self-hosted installations.

\r\n

To use admin settings, temporarily comment out the EMAIL_* variables in your .env file.

\r\n

Restart the service after changing .env: sudo systemctl restart ebuilder

\r\n

For production, we recommend setting email configuration in .env for consistency and easier version control.

\r\n
\r\n

Permission Errors

\r\n

Problem: Permission Denied on Media Files

\r\n

If you see permission errors when uploading files:

\r\n

Fix ownership of the data directory to the user running the service: sudo chown -R youruser:youruser /home/user/ebuilder/data

\r\n

Restart the service: sudo systemctl restart ebuilder

\r\n

Check directory permissions: ls -la data/media

\r\n

Directories should be 755 and files should be 644.

\r\n

Problem: Cannot Write to Database

\r\n

If you see \"unable to open database file\" or similar errors:

\r\n

Check database directory permissions: ls -la data/db

\r\n

Fix ownership: sudo chown -R youruser:youruser data/db

\r\n

Ensure the database file itself is writable: chmod 644 data/db/db.sqlite3

\r\n

Verify disk space is not full: df -h

\r\n
\r\n

Performance Issues

\r\n

Problem: Site Loads Slowly

\r\n

If your site is noticeably slow:

\r\n

Check server resource usage: top or htop

\r\n

If CPU is consistently high, investigate what processes are consuming resources.

\r\n

If memory usage is near 100%, consider upgrading to a server with more RAM.

\r\n

Review application logs for slow database queries: sudo journalctl -u ebuilder | grep slow

\r\n

Ensure collectstatic has been run to serve static files efficiently.

\r\n

Check your network latency between your location and the server.

\r\n

Consider using a CDN for static assets if serving a global audience.

\r\n

Review and optimize any custom code or templates you have added.

\r\n

Problem: High Memory Usage

\r\n

If the application uses excessive memory:

\r\n

Check current usage: free -h

\r\n

Restart the service to clear any memory leaks: sudo systemctl restart ebuilder

\r\n

Consider increasing your server's RAM if you have many products or high traffic.

\r\n

Review logs for errors that might indicate a memory leak.

\r\n

Problem: Database Growing Large

\r\n

If your database file grows unexpectedly large:

\r\n

Check database size: ls -lh data/db/db.sqlite3

\r\n

Review your data for unnecessary test orders or content that can be deleted.

\r\n

Vacuum the database to reclaim space: python manage.py dbshell, then run: VACUUM;

\r\n

This optimizes the database file but does not delete data.

\r\n

Consider implementing regular cleanup of old orders if appropriate for your business.

\r\n
\r\n

Update and Migration Issues

\r\n

Problem: Errors After Update

\r\n

If you encounter errors after updating to a new version:

\r\n

Check that you ran migrations: source venv/bin/activate then python manage.py migrate

\r\n

Check that you collected static files: python manage.py collectstatic --no-input

\r\n

Review the CHANGELOG file included with the update for any special instructions.

\r\n

Check application logs: sudo journalctl -u ebuilder -n 100

\r\n

If the issue is severe, restore your backup and roll back to the previous version.

\r\n

Report the issue to support with full error messages and steps to reproduce.

\r\n

Problem: Migration Fails

\r\n

If database migrations fail during an update:

\r\n

Check the specific error message in the output carefully.

\r\n

Ensure no other processes are accessing the database. Stop the service first: sudo systemctl stop ebuilder, then run migrations directly: python manage.py migrate

\r\n

If a specific migration is failing, note the app name and migration number.

\r\n

Restore from backup if the migration cannot be completed.

\r\n

Contact support with the full error message for assistance.

\r\n
\r\n

Getting Additional Help

\r\n

If you have tried the troubleshooting steps above and still need assistance:

\r\n

Before Contacting Support:

\r\n

Take note of the exact error message you are seeing.

\r\n

Check application logs: sudo journalctl -u ebuilder -n 100 > logs.txt

\r\n

Note what you were doing when the problem occurred.

\r\n

Document the steps you have already tried.

\r\n

Prepare any relevant screenshots.

\r\n

Information to Include:

\r\n

Your eCommerce Builder version number.

\r\n

Your server's operating system and version.

\r\n

Your Python version: python3 --version

\r\n

Relevant sections of your .env file (remove actual keys and passwords).

\r\n

Full error messages and stack traces from logs.

\r\n

Contacting Support:

\r\n

Email: djangify@djangify.com

\r\n

Subject line: \"Self-Hosted Support: Brief Description of Issue\"

\r\n

Include all information listed above.

\r\n

Be as specific as possible about the problem and what you have tried.

\r\n

Support Limitations:

\r\n

Support for the self-hosted version covers bugs in the application code and assistance understanding documentation.

\r\n

Support does not include custom modifications, server setup assistance beyond the provided documentation, or troubleshooting issues caused by modifications you have made to the code.

\r\n

For custom development or hands-on server assistance, consider the managed hosting option where all infrastructure is handled for you.

\n
\n

← Back to the Managed Hosting vs Self-Hosting Guide