| .. | ||
| .dockerignore | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile.backend | ||
| Dockerfile.frontend | ||
| frontend-entrypoint.sh | ||
| README.md | ||
| setup-dev.sh | ||
Bazarr Development Environment
A complete Docker-based development environment for Bazarr with live code reloading for both backend and frontend.
Note
: This is the official Docker development setup for Bazarr. All Docker-related files are centralized here to avoid confusion and ensure consistency.
Quick Start
1. Clone your fork
git clone https://github.com/YOUR_USERNAME/bazarr.git
cd bazarr/dev-setup
2. Run the setup script
./setup-dev.sh
This will create the necessary directories, config files, and setup both Bazarr and Autopulse for development.
3. Start development environment
# Start Bazarr only
docker compose up --build
# Or start with Autopulse for Plex integration testing
docker compose --profile autopulse up --build
4. Access applications
🌐 Open your browser to: http://localhost:5173
This is the Bazarr web interface with live reloading. The frontend automatically communicates with the backend API (port 6767).
Default credentials:
- Bazarr: Username:
admin, Password:admin - Autopulse: Username:
admin, Password:password - API Key:
bazarr(for API access)
Important:
- Port 5173: Frontend development server with hot module replacement
- Port 6767: Backend API server (not meant for direct browser access)
- Port 2875: Autopulse service (when enabled with
--profile autopulse)
What This Provides
🐳 Fully Containerized Development
- Separate optimized containers for backend (Python/Alpine) and frontend (Node.js)
- No need for local Node.js, Python, or other dependencies on your host
- Consistent development environment across different machines
- Each container only includes necessary dependencies
🔄 Live Code Reloading
- Backend: Python files are mounted and changes reflect immediately
- Frontend: Full frontend directory mounted with Vite hot module replacement
- Libraries: Both custom_libs and libs are mounted for modification
📁 Volume Mounts
../bazarr → /app/bazarr/bin/bazarr (Backend source)
../frontend → /app/bazarr/bin/frontend (Frontend source)
../custom_libs → /app/bazarr/bin/custom_libs (Custom libraries)
../libs → /app/bazarr/bin/libs (Third-party libraries)
./data → /app/bazarr/data (Persistent data)
./autopulse → /app/data (Autopulse data - when enabled)
🌐 Port Configuration
- 5173: Vite development server with hot reloading
- 6767: Bazarr backend API and web interface
- 2875: Autopulse service (when enabled)
Development Workflow
Making Changes
-
Backend Development:
- Edit files in
../bazarr/directory - Changes are immediately available in the running container
- No restart needed for most Python changes
- Edit files in
-
Frontend Development:
- Edit files in
../frontend/directory - Vite automatically reloads the browser
- Install new npm packages by rebuilding:
docker compose up --build
- Edit files in
-
Adding Dependencies:
- Python: Add to
../requirements.txtand rebuild - Node.js: Add to
../frontend/package.jsonand rebuild
- Python: Add to
Useful Commands
# Start development environment
docker compose up
# Start in background (detached)
docker compose up -d
# Start with optional Autopulse service for Plex integration testing
docker compose --profile autopulse up -d
# Rebuild after dependency changes
docker compose up --build
# View logs
docker compose logs -f
# Access backend container shell for debugging
docker compose exec bazarr-backend sh
# Access frontend container shell for debugging
docker compose exec bazarr-frontend sh
# Stop the environment
docker compose down
# Complete cleanup (removes containers, networks, volumes)
docker compose down -v
Autopulse Setup (Optional)
To include Autopulse for testing Plex integration features:
# Setup development environment with Autopulse support
./setup-dev.sh --autopulse
# Start with Autopulse enabled
docker compose --profile autopulse up --build
Environment Configuration
The development environment includes these settings:
NODE_ENV=development
VITE_PROXY_URL=http://127.0.0.1:6767
VITE_BAZARR_CONFIG_FILE=/app/bazarr/data/config/config.yaml
VITE_CAN_UPDATE=true
VITE_HAS_UPDATE=false
VITE_REACT_QUERY_DEVTOOLS=true
Data Persistence
Configuration and data are persisted in local directories:
Bazarr:
./data/config/- Bazarr configuration files./data/cache/- Application cache./data/log/- Application logs./data/db/- Database files
Autopulse (when enabled):
./autopulse/config.yaml- Autopulse configuration./autopulse/data/- Autopulse database and data
Troubleshooting
Port Conflicts
If ports 5173, 6767, or 2875 are already in use:
# Check what's using the ports
lsof -i :5173
lsof -i :6767
lsof -i :2875
# Either stop those services or modify ports in docker-compose.yml
Permission Issues
# Fix data directory permissions
sudo chown -R $USER:$USER ./data ./autopulse
Frontend Not Loading
- Check frontend logs:
docker compose logs -f bazarr-frontend - Ensure Vite dev server started successfully
- Try rebuilding frontend:
docker compose up --build bazarr-frontend
Backend API Issues
- Verify backend is running:
docker compose logs bazarr-backend
Authentication/Login Issues
If you're prompted for a password:
- The default credentials for Bazarr are: admin/admin
- The default credentials for Autopulse are: admin/password
- Check if
data/config/config.yamlexists with proper auth settings - If not, run
./setup-dev.shto create the proper config - Restart the containers:
docker compose restart - The API key is set to: bazarr
If you still have issues:
- Delete the data directory:
rm -rf data/ - Run the setup script:
./setup-dev.sh - Rebuild and start:
docker compose up --build - Check if port 6767 is accessible:
curl http://localhost:6767 - Review Python error logs in the backend container output
Complete Reset
If you encounter persistent issues:
# Stop and remove everything
docker compose down -v
# Remove built images
docker rmi dev-setup-bazarr-backend dev-setup-bazarr-frontend
# Clean up data directories (optional - will lose all data)
rm -rf data/ autopulse/
# Recreate setup
./setup-dev.sh
# Rebuild from scratch
docker compose up --build
Optional Services
🔗 Autopulse Integration
For testing Plex integration and webhook features, you can optionally enable the Autopulse service:
# Start with Autopulse for Plex metadata refresh testing
docker compose --profile autopulse up --build
# Access Autopulse web interface
open http://localhost:2875
Autopulse Features:
- Dynamic Configuration Generation: Bazarr can generate Autopulse configurations automatically using the template API
- Path Rewrite Detection: Smart detection of mount point differences between Bazarr and Plex
- Webhook Testing: Test subtitle download webhooks that trigger Plex metadata refreshes
Usage with Bazarr:
- Configure Plex settings in Bazarr (OAuth authentication recommended)
- Navigate to the Plex settings page in Bazarr
- Use the "Generate Autopulse Configuration" feature to create an optimized config
- Save the generated configuration as
config.tomlin your Autopulse container - Configure external webhooks to point to
http://autopulse:2875/triggers/bazarr
Testing the Integration:
- Set up a Plex server with OAuth in Bazarr
- Generate an Autopulse configuration in the Plex settings
- Enable external webhooks pointing to Autopulse
- Download subtitles and verify Autopulse receives webhook calls
Development Tips
Container Shell Access
# Access the backend container
docker compose exec bazarr-backend sh
# Access the frontend container
docker compose exec bazarr-frontend sh
# Install additional tools inside backend container if needed
docker compose exec bazarr-backend apk add --no-cache curl vim
# Install additional tools inside frontend container if needed
docker compose exec bazarr-frontend apk add --no-cache curl vim
Logs and Debugging
# Follow all logs
docker compose logs -f
# Follow only backend logs
docker compose logs -f bazarr-backend
# Follow only frontend logs
docker compose logs -f bazarr-frontend
Performance
- Separate containers for frontend and backend for better resource utilization
- Backend uses lightweight Alpine Linux with Python
- Frontend uses optimized Node.js Alpine image
- All file changes are immediately reflected due to volume mounts
Architecture
Host Machine
├── bazarr/ (your code)
│ ├── bazarr/ → mounted in backend container
│ ├── frontend/ → mounted in frontend container
│ ├── custom_libs/ → mounted in backend container
│ └── libs/ → mounted in backend container
└── dev-setup/ (all dev environment files in one place)
├── data/ → persistent Bazarr data
├── autopulse/ → persistent Autopulse data (when enabled)
├── Dockerfile.backend → Python/Alpine backend image
├── Dockerfile.frontend → Node.js frontend image (dev-optimized)
├── docker-compose.yml → Orchestration config
├── setup-dev.sh → Development environment setup script
└── README.md
Backend Container (/app/bazarr/bin/)
├── bazarr/ (backend source - mounted)
├── custom_libs/ (mounted)
├── libs/ (mounted)
└── data/ (persistent data - mounted)
Frontend Container (/app/)
├── src/ (frontend source - mounted)
├── public/ (static assets - mounted)
├── config/ (configuration - mounted)
└── node_modules/ (npm packages - container only)
Autopulse Container (/app/)
├── config.yaml (configuration - mounted)
└── data/ (persistent data - mounted)
Next Steps
- Start developing - all changes are live!
- Test your modifications at http://localhost:6767 and http://localhost:5173
- Submit pull requests to the main repository
Happy coding! 🚀