General Diagnostics

When something goes wrong, start with these commands to identify which component is the problem.

bash
# 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.

SymptomLikely CauseResolution
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
bash
# 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

bash
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
ProblemCauseResolution
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.

  1. Verify addons_path in /etc/odoo/odoo.conf includes the path to the Enterprise repository:
    addons_path = /opt/odoo/community/addons,/opt/odoo/custom,/opt/odoo/enterprise
  2. Confirm the Enterprise directory is not empty: ls /opt/odoo/enterprise/
  3. Ensure both repositories are on the same branch: cd /opt/odoo/enterprise && git branch
  4. Restart Odoo after any addons_path change: sudo systemctl restart odoo
Database created before Enterprise was configured

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

ProblemResolution
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

bash
sudo iptables -L INPUT -n --line-numbers
sudo ss -tlnp
ProblemResolution
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.
Keep port 8069 private at all times

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

bash
sudo systemctl status odoo --no-pager
journalctl -u odoo -n 100 --no-pager
Error in LogsCauseResolution
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:

bash
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:

  1. Reduce active background tasks and installed apps to lower memory usage.
  2. If more RAM is available, increase limits in odoo.conf:
    bash
    limit_memory_soft = 671088640   # 640 MB
    limit_memory_hard = 1073741824  # 1 GB
  3. For very small VMs, keep workers = 0 (single-threaded mode) to minimize overhead.
Monitor memory usage

Use free -h to check available RAM and htop or ps aux --sort=-%mem | head -10 to identify memory-heavy processes.

Back to top