Odoo 18 Community
Overview
Odoo is the world's leading open-source business application suite. It provides a fully integrated ERP, CRM, eCommerce, accounting, inventory, project management, and HR platform in a single Apache 2.0 licensed package. This SecureAnyCloud Azure Marketplace image gives you Odoo 18 Community Edition on Ubuntu 24.04 on Azure, ready for you to create your first database.
Version 18 introduces a refreshed UI with improved mobile responsiveness, enhanced accounting localisation, an upgraded eCommerce engine, and significant performance improvements across the ORM and reporting stack. The Community Edition includes over 50 business modules at no per-user licensing cost, which makes it a good starting point for small to medium businesses and for developers building custom business applications.
The image ships Odoo 18.0, installed from the official Odoo nightly APT repository at nightly.odoo.com. PostgreSQL 16 is installed automatically as a dependency and runs locally, bound exclusively to 127.0.0.1:5432. The shipped image contains no pre-created database.
On every fresh customer virtual machine, odoo-firstboot.service generates a strong random master password that is unique to that virtual machine. It injects the password into /etc/odoo/odoo.conf, restarts Odoo, and writes the credentials to /root/odoo-credentials.txt and /stage/scripts/odoo-credentials.log. No two virtual machines ever share a master password, and the image never contains a password. You create your first Odoo database through the web interface at /web/database/manager, using the generated master password.
What you get:
- Odoo 18.0 Community Edition, installed from the official Odoo nightly APT repository
- A PostgreSQL 16 database backend, pre-configured and bound to localhost only
- wkhtmltopdf for PDF report generation (invoices, purchase orders, delivery notes)
- Node.js for Odoo asset compilation
- Ubuntu 24.04 LTS (Noble Numbat), with the latest security patches applied at build time
- The Azure Linux Agent (waagent) for cloud-init, SSH key provisioning, and disk management
- A ufw firewall with ports 8069 and 8072 open and all other ports restricted by default
- The
odoo-firstboot.servicesystemd unit, which rotates the master password on every first boot
Prerequisites
Before you deploy this image, make sure that you have:
- An active Azure subscription with permission to create virtual machines
- An SSH key pair (Ed25519 or RSA 4096 recommended)
- A network security group (NSG) rule that allows inbound TCP on port 8069 (and 8072 for long-polling) from your trusted IP range
- A terminal with the Azure CLI installed, for the CLI deployment steps
Deploy the Virtual Machine from the Azure Portal
- Go to the Azure Marketplace and search for Odoo 18 CE on Ubuntu 24.04 LTS by SecureAnyCloud.
- Select Create, then select your subscription and resource group.
- Choose a region. The image is available globally.
- Select a VM size. Standard_D4s_v3 (4 vCPU, 16 GB RAM) is recommended for small teams. Use Standard_D8s_v3 or larger for multi-user production workloads.
- Under Administrator account, select SSH public key and provide your public key.
- Under Inbound port rules, open port 22 (SSH). After deployment, add NSG rules for port 8069 and 8072, scoped to your trusted source IP range rather than
0.0.0.0/0. - On the Disks tab, select Standard SSD or better for the OS disk.
- Review and create. The VM is ready within two to three minutes.
Deploy the Virtual Machine from the Azure CLI
Replace ,, and `` with your subscription ID, resource group name, and the gallery image version.
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:odoo-18-community-ubuntu-24-04:standard:latest
az vm create \
--subscription "" \
--resource-group "" \
--name odoo-18-vm \
--image sac1647283583153:odoo-18-community-ubuntu-24-04:standard:latest \
--size Standard_D4s_v3 \
--storage-sku StandardSSD_LRS \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--public-ip-sku Standard \
--output tableAfter the VM is created, add NSG rules that permit inbound TCP on ports 8069 and 8072 from your source IP address:
az network nsg rule create \
--resource-group "" \
--nsg-name odoo-18-vmNSG \
--name allow-odoo \
--priority 310 \
--protocol Tcp \
--destination-port-ranges 8069 8072 \
--source-address-prefixes "/32" \
--access AllowConnect via SSH
ssh azureuser@Substitute the public IP address that Azure assigned to your virtual machine. The default user is azureuser.
Retrieve the Master Password
The odoo-firstboot.service runs automatically on first boot and generates a unique master password for your virtual machine. Retrieve the password with:
sudo cat /root/odoo-credentials.txtExample output:
Odoo Master Password: aB3kPqRwXm7nYvZc2sD9tFgH To create your first database: 1. Navigate to http://:8069/web/database/manager 2. Enter the master password above and create your first database 3. Log in to Odoo with your chosen admin credentialsThe machine-readable form is at /stage/scripts/odoo-credentials.log (mode 600, root only):
sudo cat /stage/scripts/odoo-credentials.logVerify the Odoo Service
Confirm that Odoo and PostgreSQL are running and that port 8069 is listening:
systemctl status odooss -tlnp | grep -E '8069|8072|5432'Check the Odoo version:
odoo --versionVerify the health endpoint returns HTTP 200:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8069/web/healthExpected output: 200
Access the Web Interface and Create Your First Database
- Open
http://:8069/web/database/managerin a browser. - Enter the Master Password that you retrieved in Step 4.
- Choose a Database Name (for example,
mycompany). - Select your Language and Country.
- Optionally select Demo data for a sandbox environment. Leave it cleared for production.
- Set your Email and Password for the initial
adminaccount. - Select Create database and wait approximately 60 to 90 seconds while Odoo initialises the schema.
When the database is created, Odoo redirects you to the login page. Enter your admin credentials to continue.
Install and Configure Business Modules
After you log in, you land on the Odoo home screen, which shows the available app tiles. Select any app to install it directly from this view.
To install apps from the Apps menu:
- Select Apps in the top navigation bar to open the app store.
- Remove the Apps filter in the search bar to see all available modules.
- Search for the modules that your business requires and select Install.
Common starting modules are:
- Sales: quotations, sales orders, invoicing
- Inventory: warehouse, stock moves, delivery orders
- Accounting: chart of accounts, journals, bank reconciliation
- CRM: leads, pipeline, customer portal
- Project: tasks, timesheets, Gantt view
- Purchase: purchase orders, vendor bills
- eCommerce: online shop tied to Inventory and Accounting
After you install modules, open Settings to configure your company name, logo, currency, and fiscal year.
Configure Outgoing Email
Odoo sends transactional emails (order confirmations, invoices, password resets) through a configured SMTP server.
- Open Settings > Technical > Email > Outgoing Mail Servers.
- Select Create and enter your SMTP host, port, authentication method, and credentials.
- Select Test Connection to verify the settings before you save.
For production deployments, use a dedicated transactional email provider (SendGrid, Mailgun, Amazon SES) rather than a personal Gmail account. A dedicated provider avoids rate limiting and deliverability issues.
Server Components
- Odoo Community 18.0-20260423, installed from nightly.odoo.com/18.0/nightly/deb
- PostgreSQL 16.13, localhost only (127.0.0.1:5432)
- Python 3.12, the Ubuntu 24.04 system Python
- Node.js 18.19.1, required for Odoo asset compilation
- wkhtmltopdf 0.12.6, the Ubuntu 24.04 patched build for PDF reports
- Ubuntu 24.04 LTS (Noble Numbat), kernel 6.8+
- Azure Linux Agent 2.9+ (waagent), which handles cloud-init, disk, and SSH key management
Check the currently running Odoo version:
odoo --versionOdoo Server 18.0-20260423Filesystem Layout
/usr/bin/odoo: the Odoo server binary/etc/odoo/odoo.conf: the main configuration file (mode 640, root:odoo)/var/lib/odoo: the Odoo data directory (filestore, sessions, addons)/var/log/odoo/odoo-server.log: the Odoo server log/usr/lib/python3/dist-packages/odoo/: the Odoo Python package/usr/lib/python3/dist-packages/odoo/addons/: the built-in Odoo modules/stage/scripts/odoo-credentials.log: the machine-readable master password (mode 600, root)/root/odoo-credentials.txt: the human-readable master password and first-use instructions/usr/local/sbin/odoo-firstboot.sh: the first-boot credential generation script/etc/systemd/system/odoo-firstboot.service: the systemd unit for first-boot initialisation/var/lib/sac/data/odoo-firstboot.done: the sentinel file. Its presence prevents the first-boot script from running again./var/run/postgresql/: the PostgreSQL runtime socket directory
Managing the Odoo Service
Check service status:
systemctl status odooStop the service:
sudo systemctl stop odooStart the service:
sudo systemctl start odooRestart the service (for example, after you edit odoo.conf):
sudo systemctl restart odooFollow the Odoo log in real time:
sudo tail -f /var/log/odoo/odoo-server.logBackups
Web UI backup (recommended for most users)
Odoo provides a built-in database backup tool at /web/database/manager:
- Open
http://:8069/web/database/manager. - Enter the master password when prompted.
- Select Backup next to your database name.
- Select the format: zip (includes the filestore, recommended) or pg_dump (schema and data only).
- Download the archive and store it in a secure off-site location.
PostgreSQL dump (for scripted or scheduled backups)
pg_dump -U odoo -F c -f /home/azureuser/odoo-backup-$(date +%Y%m%d).dumpTransfer the dump to Azure Blob Storage or another durable destination. Back up Odoo's filestore at /var/lib/odoo/.local/share/Odoo/filestore// alongside the database dump, to preserve uploaded attachments.
Automate with a cron job
0 2 * * * azureuser pg_dump -U odoo -F c -f /home/azureuser/odoo-backup-$(date +\%Y\%m\%d).dump mycompany && find /home/azureuser -name 'odoo-backup-*.dump' -mtime +7 -deleteHTTPS with a Reverse Proxy
Running Odoo directly on port 8069 over plain HTTP is acceptable for tools that are used only inside your own network. Do not use it for internet-facing deployments. Use nginx as a reverse proxy with a TLS certificate from Let's Encrypt.
Install nginx and certbot:
sudo apt-get install -y nginx certbot python3-certbot-nginxCreate an nginx virtual host at /etc/nginx/sites-available/odoo:
upstream odoo { server 127.0.0.1:8069; } upstream odoo-longpolling { server 127.0.0.1:8072; } server { listen 80; server_name your-domain.example.com; location /longpolling { proxy_pass http://odoo-longpolling; } location / { proxy_pass http://odoo; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 720s; client_max_body_size 50m; } }Enable the site and obtain a certificate:
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d your-domain.example.comAfter you enable the proxy, set proxy_mode = True in /etc/odoo/odoo.conf and restart Odoo so that it trusts the X-Forwarded-For header:
sudo sed -i 's/proxy_mode = False/proxy_mode = True/' /etc/odoo/odoo.conf
sudo systemctl restart odooTroubleshooting
Odoo does not respond on port 8069
Check whether the service is running:
systemctl is-active odooIf inactive, check the log for startup errors:
sudo tail -50 /var/log/odoo/odoo-server.logCheck whether PostgreSQL is running and accepting connections:
systemctl is-active postgresql
sudo -u postgres psql -c "SELECT version();"/web/database/manager is inaccessible or returns an error
Verify that the admin password in odoo.conf is not the initial value from the image:
sudo grep admin_passwd /etc/odoo/odoo.confIf the value is PLACEHOLDER_MASTER_PASSWORD, the first-boot service did not run. Check whether the sentinel file exists:
ls -la /var/lib/sac/data/odoo-firstboot.doneIf the file is absent, the service did not complete. Check its journal:
sudo journalctl -u odoo-firstboot --no-pagerTo force the service to run again, remove the sentinel and start the service manually:
sudo rm -f /var/lib/sac/data/odoo-firstboot.done
sudo systemctl start odoo-firstboot
sudo cat /root/odoo-credentials.txtPort 8069 is not reachable from the browser
In the Azure portal, verify that the NSG rule permits inbound TCP on port 8069 from your source IP address. Confirm that ufw allows the port locally:
sudo ufw status | grep 8069PDF reports are blank or produce errors
Verify that wkhtmltopdf is installed and that it is the version Odoo expects:
wkhtmltopdf --versionOdoo uses the wkhtmltopdf binary at /usr/bin/wkhtmltopdf. The version in the Ubuntu 24.04 repositories is the patched headless build, which is compatible with Odoo.
Odoo is slow on the first request after idle
With workers = 2 in odoo.conf, workers are pre-forked but may sleep. The first request after an idle period can be slow because Python loads its modules. For production, consider increasing the number of workers to match the available CPU cores.
Security Recommendations
Restrict database manager access
After you create your database, restrict the database manager to localhost to prevent unauthorised database creation or deletion:
sudo sed -i '/^\[options\]/a dbfilter = ^mycompany$' /etc/odoo/odoo.conf
sudo systemctl restart odooAlternatively, add list_db = False to disable the database list entirely once your database is created:
echo "list_db = False" | sudo tee -a /etc/odoo/odoo.conf
sudo systemctl restart odooRotate the master password
The master password is regenerated automatically at every first boot, so all customer VMs start with a unique credential. To rotate it manually at any time, run:
NEW_PW=$(openssl rand -base64 24 | tr -d '+/=\n' | head -c 32)
sudo sed -i "s|^admin_passwd = .*|admin_passwd = ${NEW_PW}|" /etc/odoo/odoo.conf echo "New master password: ${NEW_PW}"
sudo systemctl restart odooEnable two-factor authentication
Open Settings > Users and Companies > Users, select a user, and enable Two-Factor Authentication in the account security section.
Restrict NSG rules
Limit inbound access to ports 8069 and 8072 to your specific office or VPN IP ranges rather than the public internet. PostgreSQL on port 5432 is bound to localhost and is not exposed through the NSG.
Keep packages up to date
Apply security patches regularly:
sudo apt-get update && sudo apt-get upgrade -y odoo
sudo systemctl restart odooSupport and Licensing
Odoo 18 Community Edition is licensed under the Apache License 2.0. The full licence text is available at www.apache.org/licenses/LICENSE-2.0.
SecureAnyCloud provides 24/7/365 expert technical support, with a guaranteed 24-hour response for all requests and a one-hour average response time for critical issues. Contact sales@secureanycloud.com.
For the full user guide, visit secureanycloud.com/guides/odoo-18-community-on-ubuntu-24-04-azure. For our complete product catalogue, visit secureanycloud.com/products.
Deploy on Azure
The SecureAnyCloud Odoo 18 Community Edition image is available on the Azure Marketplace. Search for Odoo 18 CE on Ubuntu 24.04 LTS by SecureAnyCloud, or go directly from the Azure Portal.
Need Help?
Email: sales@secureanycloud.com
Website: secureanycloud.com
Azure Marketplace: search SecureAnyCloud to view our full catalogue of production-ready images
Deploy on Azure
Launch Odoo 18 Community on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com