Troubleshooting Guide
Reference solutions for the most common problems encountered during and after an Odoo on-premise deployment on Oracle Cloud. Start with the diagnostic commands, then match your symptom to the relevant section.
General Diagnostics
When something goes wrong, start with these commands to identify which component is the problem.
# Check all key services at once sudo systemctl status odoo postgresql nginx --no-pager # View recent Odoo logs journalctl -u odoo -n 100 --no-pager # Check which processes are listening on which ports sudo ss -tlnp # Check Nginx configuration validity sudo nginx -t
DNS Problems
DNS issues are the most common cause of a failed Let's Encrypt challenge and connection timeouts when first setting up the domain.
| Symptom | Likely Cause | Resolution |
|---|---|---|
| Registrar parking page appears instead of Odoo | Registrar's default DNS records still active | Delete all default A and CNAME records from your registrar, then add your own A record pointing to the Oracle VM IP |
| Different devices resolve to different IP addresses | DNS cache not yet expired | Test with dig @8.8.8.8 example.com to bypass local cache. Wait for the TTL to expire. |
| HTTP 404 after pointing DNS correctly | Nginx server_name does not match the domain |
Edit /etc/nginx/sites-available/odoo and ensure server_name matches your domain exactly, then sudo nginx -t && sudo systemctl reload nginx |
# Test with a specific DNS resolver to bypass cache dig @8.8.8.8 +short example.com dig @1.1.1.1 +short example.com
Nginx Problems
sudo nginx -t sudo systemctl status nginx --no-pager sudo journalctl -u nginx -n 50 --no-pager sudo cat /var/log/nginx/error.log | tail -50
| Problem | Cause | Resolution |
|---|---|---|
| Default Nginx welcome page appears | Default site is still enabled | sudo rm /etc/nginx/sites-enabled/default and reload Nginx |
| 502 Bad Gateway | Odoo is not running or is not listening on port 8069 | Run sudo systemctl status odoo and check sudo ss -tlnp | grep 8069 |
| WebSocket errors / live chat not working | Missing Upgrade and Connection proxy headers |
Verify the /websocket location block in the Nginx config includes proxy_http_version 1.1 and the Upgrade/Connection headers |
| 413 Request Entity Too Large on uploads | client_max_body_size is too low |
Set client_max_body_size 100M; (or higher) in the Nginx server block |
Enterprise Modules Missing
If Odoo starts but you only see Community modules in the app list, or the Enterprise features are absent, check the following.
- Verify
addons_pathin/etc/odoo/odoo.confincludes the path to the Enterprise repository:addons_path = /opt/odoo/community/addons,/opt/odoo/custom,/opt/odoo/enterprise - Confirm the Enterprise directory is not empty:
ls /opt/odoo/enterprise/ - Ensure both repositories are on the same branch:
cd /opt/odoo/enterprise && git branch - Restart Odoo after any
addons_pathchange:sudo systemctl restart odoo
If the Odoo database was created before the Enterprise repository was added to
addons_path, you may need to update the module list from the Odoo UI
(Settings → Technical → Update Module List) or recreate the database.
HTTPS / Certbot Issues
| Problem | Resolution |
|---|---|
| ACME challenge failed | Confirm DNS resolves to the VM and port 80 is reachable from the Internet. Run curl -I http://example.com from an external machine. |
| HTTPS connection times out | Open TCP 443 in the Oracle Security List and in iptables: sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT |
| Certificate not renewing automatically | Check sudo systemctl status certbot.timer. Run a dry-run: sudo certbot renew --dry-run |
| Too many failed attempts — rate limited | Wait at least 1 hour. Use --staging flag during testing: sudo certbot --nginx --staging |
| Browser still shows HTTP (no padlock) | Clear browser cache. Verify the HTTP→HTTPS redirect in the Nginx config: look for a return 301 https:// directive. |
Firewall Issues
sudo iptables -L INPUT -n --line-numbers sudo ss -tlnp
| Problem | Resolution |
|---|---|
| Port 80 or 443 connection times out | Check both the Oracle Security List (cloud console) and iptables. Both must allow the port. |
| Rules disappear after reboot | Install iptables-persistent and run sudo iptables-save | sudo tee /etc/iptables/rules.v4 |
| Port 8069 accessible from Internet | Delete the ingress rule for TCP 8069 from the Oracle Security List. Ensure http_interface = 127.0.0.1 in odoo.conf. |
Publicly exposing port 8069 bypasses Nginx, disables HTTPS encryption, and exposes Odoo directly to the Internet — this is a serious security risk.
Odoo Service Won't Start
sudo systemctl status odoo --no-pager journalctl -u odoo -n 100 --no-pager
| Error in Logs | Cause | Resolution |
|---|---|---|
No such file or directory for ExecStart |
Incorrect path to Python or odoo-bin | Verify the paths: ls /opt/odoo/venv/bin/python3 and ls /opt/odoo/community/odoo-bin |
Permission denied |
Files not owned by the odoo user |
sudo chown -R odoo:odoo /opt/odoo /etc/odoo |
ModuleNotFoundError |
Python dependencies not installed in the venv, or wrong interpreter | Confirm ExecStart uses the venv Python, then sudo -u odoo /opt/odoo/venv/bin/pip install -r /opt/odoo/community/requirements.txt |
| PostgreSQL connection refused | PostgreSQL not running or wrong DB user | sudo systemctl start postgresql and verify the odoo role: sudo -u postgres psql -c "\du odoo" |
Memory Limit Warnings
On small Oracle Cloud Free Tier instances (1 GB RAM), Odoo workers may be killed when they exceed the configured memory limits. This appears in the log as:
tail -100 /opt/odoo/logs/odoo.log | grep -i "memory\|killed\|limit"
Symptoms: Odoo restarts unexpectedly, pages time out, or you see Worker exceeded memory limit in the logs.
Solutions:
- Reduce active background tasks and installed apps to lower memory usage.
- If more RAM is available, increase limits in
odoo.conf:bashlimit_memory_soft = 671088640 # 640 MB limit_memory_hard = 1073741824 # 1 GB
- For very small VMs, keep
workers = 0(single-threaded mode) to minimize overhead.
Use free -h to check available RAM and htop or ps aux --sort=-%mem | head -10 to identify memory-heavy processes.