Setup & Deployment
Prerequisites
| Requirement | Details |
|---|---|
| Docker | Docker Engine + Docker Compose v2 |
| Python 3 | For import script (stdlib only, no pip packages) |
| Disk space | ~1 GB (Odoo image + PostgreSQL + data) |
| Browser | Any modern browser for Odoo UI |
| Network | LAN access to the machine running Odoo |
Quick Start (Development / Testing)
1. Clone the Repository
git clone https://github.com/OmelasAI/captainvans-odoo.git
cd captainvans-odoo
chmod +x start-odoo.sh stop-odoo.sh
2. Start Docker Services
./start-odoo.sh
This starts:
- Odoo 17.0 on port 8069
- PostgreSQL 15 on port 5435
Wait ~30 seconds for Odoo to fully initialize.
3. Create the Database
- Open http://localhost:8069
- Fill in the database creation form:
- Master Password: choose one and remember it
- Database Name:
captainvans - Email:
admin - Password:
admin - Language: Spanish
- Country: Honduras
- Click Create Database (takes 1-2 minutes)
4. Install Modules
In Odoo, go to Apps and install in this order:
- Accounting (search “Invoicing” or “Accounting”)
- Inventory (search “Inventory”)
- Point of Sale (search “Point of Sale”)
- Website (optional — search “Website”)
Then install the custom module:
- Enable Developer Mode: Settings > General Settings > Activate Developer Mode (bottom of page)
- Go to Apps > Update Apps List
- Search for “Honduras SAR”
- Install it
5. Configure Company
Settings > Companies > Captain Van’s:
| Field | Value |
|---|---|
| Company Name | Captain Van’s |
| Country | Honduras |
| Currency | HNL |
| Address | West End, Roatan, Islas de la Bahia |
| Phone | +504-XXXX-XXXX (real number) |
| (real email) | |
| Tax ID (VAT) | Client’s 14-digit RTN |
6. Import Data
Update the path in import_data.py line 18:
DATA_DIR = Path('/path/to/captainvans-odoo/data')
Then run:
python3 import_data.py
This imports 2,505 products, 1,895 customers, 36 suppliers, 15 categories, and 3 tax rates. Takes ~2-5 minutes.
7. Configure POS
Point of Sale > Configuration > Point of Sale:
- Name the POS (e.g., “Shop”)
- Add payment methods: Cash, Credit Card
- Set default customer (optional)
- Configure receipt template with business logo
8. Testing Checklist
- [ ] Login to Odoo at http://localhost:8069
- [ ] Dashboard loads with installed modules
- [ ] Open Point of Sale > New Session
- [ ] Products appear in POS interface
- [ ] Search for a product by name
- [ ] Scan a barcode (if scanner connected)
- [ ] Add items to cart
- [ ] Look up a customer
- [ ] Process a test transaction (cash)
- [ ] View/print receipt
- [ ] Receipt shows correct Honduras format
- [ ] Configure payment methods
- [ ] Add business logo
- [ ] Create cashier accounts with PINs
- [ ] Set up POS product categories for navigation
Production Deployment (At the Store)
Hardware Requirements
The store already has hardware. The POS needs:
- Touchscreen terminal — Runs a browser pointing at Odoo
- Barcode scanner — USB HID scanner (acts as keyboard input, works directly with browser)
- Receipt printer — Thermal printer (connected to the machine running Odoo)
- Cash drawer (optional) — Typically connected via receipt printer kick connector
Note: Odoo Community does not include the IoT box. Hardware connects directly to the machine’s OS/browser, not through Odoo’s hardware abstraction layer.
Deployment Steps
- Set up the store machine with Docker and Docker Compose
- Clone the repository and follow the Quick Start steps above
- Change default passwords:
- Odoo admin password (currently
admin) - Database master password
- PostgreSQL password (update in
docker-compose.yml)
- Odoo admin password (currently
- Enter real business data:
- Real phone number and email
- Real RTN (14-digit tax ID from SAR)
- Real CAI (from SAR Form SAR-927)
- Activate the CAI in POS > Configuration > Honduras SAR
- Connect hardware:
- Plug in barcode scanner (USB HID — should work immediately)
- Configure receipt printer in the OS, then in Odoo POS settings
- Create employee accounts with PINs for each cashier
- Run acceptance testing with the store owner
- Set up automatic backups:
# Add to crontab 0 2 * * * docker exec captainvans-odoo-db pg_dump -U odoo captainvans > /backups/captainvans_$(date +\%Y\%m\%d).sql
Network Configuration
For local deployment, Odoo runs on the same machine or LAN:
- Single machine: Access at
http://localhost:8069 - LAN access: Access at
http://<machine-ip>:8069from tablets/terminals on the same network - No internet required for POS operation (except initial Docker pull)
Security Considerations
- Change all default passwords before going live
- Restrict Odoo to LAN only (don’t expose port 8069 to the internet)
- Set up daily database backups
- Keep Docker images updated for security patches
Useful Commands
# Start / stop
./start-odoo.sh
./stop-odoo.sh
# View Odoo logs
docker logs -f captainvans-odoo
# Database shell
docker exec -it captainvans-odoo-db psql -U odoo -d captainvans
# Backup database
docker exec captainvans-odoo-db pg_dump -U odoo captainvans > backup_$(date +%Y%m%d).sql
# Restore database
docker exec -i captainvans-odoo-db psql -U odoo -d captainvans < backup_file.sql
# Check container status
docker ps | grep captainvans
# Restart Odoo (after module changes)
docker restart captainvans-odoo
Odoo XML-RPC API
For programmatic access (used by import script):
import xmlrpc.client
URL = 'http://localhost:8069'
DB = 'captainvans'
USERNAME = 'admin'
PASSWORD = 'admin'
common = xmlrpc.client.ServerProxy(f'{URL}/xmlrpc/2/common')
uid = common.authenticate(DB, USERNAME, PASSWORD, {})
models = xmlrpc.client.ServerProxy(f'{URL}/xmlrpc/2/object')
# Example: count products
count = models.execute_kw(DB, uid, PASSWORD, 'product.template', 'search_count', [[]])