A comprehensive backup and restore utility for Odoo instances
Project description
OdooBench
A comprehensive backup and restore utility for Odoo instances with smart GUI/CLI interface, supporting both database and filestore operations with local and remote (SSH) connections.
Features
- Smart Interface: Automatically launches GUI when available, falls back to CLI
- Complete Backup & Restore: Handles both PostgreSQL database and Odoo filestore
- Secure Storage: Encrypted password storage for connection profiles
- Remote Support: Backup/restore from remote servers via SSH
- Connection Profiles: Save and reuse connection configurations
- Dual Interface: Both GUI and CLI modes available
- Archive Management: Creates compressed archives with metadata
- Flexible Operations: Backup only, restore only, or backup & restore in one operation
- Production Protection: Prevent accidental restores to production databases
- Database Neutralization: Safe testing with disabled emails, crons, and payment providers
Installation
Using pip (Recommended)
pip install odoobench
From Source
# Clone the repository
git clone https://github.com/jpsteil/odoobench.git
cd odoobench
# Install the package
pip install -e .
# For development
pip install -r requirements-dev.txt
Prerequisites
- Python 3.8 or higher
- PostgreSQL client tools (
pg_dump,pg_restore,psql) - tar command-line utility
- tkinter (for GUI mode) - usually included with Python
Installing PostgreSQL Client Tools
Ubuntu/Debian
sudo apt-get update
sudo apt-get install postgresql-client
RHEL/CentOS/Fedora
sudo dnf install postgresql
macOS
brew install postgresql
Quick Start
Default Behavior
# Launch the application (GUI if available, otherwise help)
odoobench
# Force GUI mode (error if not available)
odoobench --gui
# Force CLI mode
odoobench --cli
# Show CLI help
odoobench --cli --help
GUI Mode
The GUI automatically launches when:
- You run
odoobenchwithout arguments - A display is available (not SSH/Docker)
- tkinter is installed
The GUI provides:
- Visual connection management
- Easy backup/restore operations
- Progress tracking
- Connection testing
- Safety features clearly visible
CLI Mode
The CLI is used when:
- You explicitly use
--cliflag - No display is available (SSH, Docker, CI/CD)
- Running in scripts or automation
Connection Profiles (Recommended)
Save Connection Profiles
# Production connection (restore disabled by default for safety)
odoobench --cli connections save \
--name prod \
--host db.example.com \
--user odoo \
--database mydb \
--filestore /var/lib/odoo
# Development connection (with restore enabled)
odoobench --cli connections save \
--name dev \
--host localhost \
--user odoo \
--database devdb \
--filestore /var/lib/odoo \
--allow-restore
Use Connection Profiles
# Backup using connection
odoobench --cli backup --connection prod
# Restore using connection (only works if --allow-restore was set)
odoobench --cli restore --connection dev --file backup.tar.gz --name test_db
# Restore with neutralization for safe testing
odoobench --cli restore --connection dev --file backup.tar.gz --name test_db --neutralize
List Connections
odoobench --cli connections list
Manual Operations (Without Profiles)
Backup Operations
# Backup database and filestore
odoobench --cli backup \
--name mydb \
--host localhost \
--user odoo \
--filestore /var/lib/odoo/filestore
# Backup database only
odoobench --cli backup \
--name mydb \
--host localhost \
--user odoo \
--no-filestore
# Backup with specific output directory
odoobench --cli backup \
--name mydb \
--host localhost \
--user odoo \
--output-dir /backups
Restore Operations
# Restore from backup file
odoobench --cli restore \
--file backup_MYDB_20240101_120000.tar.gz \
--name newdb \
--host localhost \
--user odoo
# Restore with database neutralization (safe for testing)
odoobench --cli restore \
--file backup.tar.gz \
--name testdb \
--host localhost \
--user odoo \
--neutralize
Database Neutralization
When using the --neutralize flag during restore, the following safety measures are applied:
- All outgoing mail servers are disabled
- All scheduled actions (crons) are disabled
- Payment acquirers are disabled
- Email queue is cleared
- Company names are prefixed with [TEST]
- Base URL configuration is unfrozen
This ensures your test database won't send emails or execute scheduled tasks.
Automation & Scripting
Cron Job Example
# Add to crontab for daily backups at 2 AM
0 2 * * * /usr/local/bin/odoobench --cli backup --connection prod
Bash Script Example
#!/bin/bash
# backup-all-databases.sh
DATABASES=("db1" "db2" "db3")
for DB in "${DATABASES[@]}"; do
odoobench --cli backup --connection prod --name "$DB"
done
Docker Usage
# In your Dockerfile
RUN pip install odoobench
# In your script
CMD ["odoobench", "--cli", "backup", "--connection", "prod"]
CI/CD Pipeline
# .github/workflows/backup.yml
- name: Backup Odoo Database
run: |
odoobench --cli backup \
--name ${{ secrets.DB_NAME }} \
--host ${{ secrets.DB_HOST }} \
--user ${{ secrets.DB_USER }} \
--password ${{ secrets.DB_PASSWORD }}
Configuration
The tool stores its configuration in ~/.config/odoobench/:
config.json: Application settingsconnections.db: Encrypted connection profiles
Default Configuration
{
"backup_dir": "~/Documents/OdooBackups",
"default_odoo_version": "17.0",
"pg_dump_options": ["--no-owner", "--no-acl"],
"compression_level": 6,
"max_backup_age_days": 30,
"auto_cleanup": false,
"verbose": false
}
Backup File Structure
Backup archives (backup_DBNAME_YYYYMMDD_HHMMSS.tar.gz) contain:
database.sql: PostgreSQL database dumpfilestore.tar.gz: Compressed filestore data (if included)metadata.json: Backup metadata (timestamp, database name, Odoo version)
Security Features
- Encrypted Storage: Passwords are encrypted using machine-specific keys
- Production Protection: Connections are protected from restore by default
- SSH Support: Key-based and password authentication for remote connections
- Safe Defaults: Must explicitly enable restore capability for connections
Migration from odoo-backup-manager
If you were using odoo-backup-manager, OdooBench will automatically migrate your configuration and connections on first run.
Troubleshooting
GUI Not Launching
# Check if display is available
echo $DISPLAY
# Install tkinter if missing
sudo apt-get install python3-tk
# Force CLI mode as fallback
odoobench --cli [command]
Permission Denied
- Ensure read access to filestore directory
- Ensure write access to backup directory
- Check PostgreSQL user permissions
Connection Issues
# Test connection manually
psql -h hostname -U username -d database -c "SELECT version();"
# Check SSH access for remote connections
ssh user@host "echo 'SSH connection successful'"
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
pytest - Submit a pull request
License
MIT License - see LICENSE file for details
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- PyPI: odoobench
Credits
Developed for the Odoo community to simplify backup and restore operations while maintaining safety and ease of use.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odoobench-0.1.1.tar.gz.
File metadata
- Download URL: odoobench-0.1.1.tar.gz
- Upload date:
- Size: 63.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8258eb28b69d767ce32725af3a95122950e1bb28ded4aca84f5d44e0f8e857f9
|
|
| MD5 |
a82a80786cc20ecfa02c01360af21c26
|
|
| BLAKE2b-256 |
989607d24e59123cca834631aa887d3df1119f94c706de2882bb06a1d28d0cd6
|
Provenance
The following attestation bundles were made for odoobench-0.1.1.tar.gz:
Publisher:
pypi-publish.yml on jpsteil/odoobench
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odoobench-0.1.1.tar.gz -
Subject digest:
8258eb28b69d767ce32725af3a95122950e1bb28ded4aca84f5d44e0f8e857f9 - Sigstore transparency entry: 735523326
- Sigstore integration time:
-
Permalink:
jpsteil/odoobench@a8e6b00ad23e2c257101398742e2889644f0b492 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/jpsteil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@a8e6b00ad23e2c257101398742e2889644f0b492 -
Trigger Event:
push
-
Statement type:
File details
Details for the file odoobench-0.1.1-py3-none-any.whl.
File metadata
- Download URL: odoobench-0.1.1-py3-none-any.whl
- Upload date:
- Size: 65.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1704beb52204e51256e2a925fa4450ea459c31b9c37eb269018c05feacc080ef
|
|
| MD5 |
57ca3abb1ed60435436a995bed49dbba
|
|
| BLAKE2b-256 |
d21ea5fa338e4361f181cf63c803fbcde4cb15d8a3a0c4042ce8b53c3305f5b8
|
Provenance
The following attestation bundles were made for odoobench-0.1.1-py3-none-any.whl:
Publisher:
pypi-publish.yml on jpsteil/odoobench
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odoobench-0.1.1-py3-none-any.whl -
Subject digest:
1704beb52204e51256e2a925fa4450ea459c31b9c37eb269018c05feacc080ef - Sigstore transparency entry: 735523329
- Sigstore integration time:
-
Permalink:
jpsteil/odoobench@a8e6b00ad23e2c257101398742e2889644f0b492 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/jpsteil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@a8e6b00ad23e2c257101398742e2889644f0b492 -
Trigger Event:
push
-
Statement type: