Why Oracle Cloud for Odoo?
Oracle Cloud Infrastructure (OCI) offers the most generous free tier of any cloud provider. The Always Free tier includes ARM-based compute instances with up to 4 OCPUs (equivalent to 4 vCPUs) and 24GB RAM — resources that would cost $50-100 per month on other providers. For Odoo, this is enough to run a production instance serving 50-100 users at zero cost.
The catch: ARM (Ampere A1) instances require ARM-compatible software. Odoo runs perfectly on ARM with the official Docker image or native installation on Ubuntu ARM.
Oracle Cloud Always Free Resources
| Resource | Free Allowance | Odoo Use |
|---|---|---|
| Ampere A1 Compute | 4 OCPU, 24GB RAM | Odoo server |
| Boot Volume | 200GB total | OS + Odoo + DB |
| Block Volume | 200GB total | Additional storage |
| Object Storage | 20GB | Backups |
| Outbound Data | 10TB/mo | More than enough |
| Load Balancer | 1 flexible LB | SSL termination |
| AMD VM (E2.1) | 2 instances, 1/8 OCPU each | Tiny, not for Odoo |
Step 1: Create Oracle Cloud Account
- Go to cloud.oracle.com and sign up
- You need a credit card for verification (you will not be charged for Always Free resources)
- Select your home region (cannot be changed later)
- Wait for account activation (usually instant)
Step 2: Create ARM Instance
- Go to Compute → Instances → Create Instance
- Name:
odoo-server - Image: Ubuntu 24.04 (Canonical)
- Shape: VM.Standard.A1.Flex (Ampere ARM)
- OCPU count: 4, Memory: 24 GB
- Boot volume: 100 GB
- Add your SSH public key
- Create
Note: ARM instances may show "Out of capacity" in popular regions. Try different availability domains, or try during off-peak hours. Persistence pays off.
Step 3: Configure Security Lists
Oracle Cloud blocks all ingress traffic by default. Open the required ports:
- Go to Networking → Virtual Cloud Networks → your VCN → Security Lists
- Add ingress rules for ports 80, 443, and 22 (SSH)
# Also open ports on the instance firewall
ssh ubuntu@YOUR_OCI_IP
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent saveStep 4: Install Odoo
# Update system
sudo apt update && sudo apt upgrade -y
# Install PostgreSQL
sudo apt install -y postgresql
sudo -u postgres createuser --createdb odoo
sudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'secure_pw';"
# Install Odoo dependencies
sudo apt install -y git python3-pip python3-dev python3-venv \
libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev \
libldap2-dev build-essential libssl-dev libffi-dev \
libjpeg-dev libpq-dev npm
# Create Odoo user and clone
sudo adduser --system --home=/opt/odoo --group odoo
sudo su - odoo -s /bin/bash -c '
git clone https://github.com/odoo/odoo.git --depth 1 --branch 19.0 /opt/odoo/odoo
python3 -m venv /opt/odoo/venv
source /opt/odoo/venv/bin/activate
pip install --upgrade pip wheel
pip install -r /opt/odoo/odoo/requirements.txt
'
# wkhtmltopdf for ARM
sudo apt install -y wkhtmltopdfStep 5: Configure and Start
# Create odoo.conf
sudo tee /etc/odoo.conf > /dev/null << 'EOF'
[options]
admin_passwd = your_master_password
db_host = localhost
db_port = 5432
db_user = odoo
db_password = secure_pw
addons_path = /opt/odoo/odoo/addons
data_dir = /opt/odoo/data
workers = 4
max_cron_threads = 1
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
proxy_mode = True
EOF
# Create systemd service
sudo tee /etc/systemd/system/odoo.service > /dev/null << 'EOF'
[Unit]
Description=Odoo 19
After=postgresql.service
[Service]
Type=simple
User=odoo
ExecStart=/opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin -c /etc/odoo.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odooStep 6: Nginx + SSL
sudo apt install -y nginx certbot python3-certbot-nginx
# Configure nginx
sudo tee /etc/nginx/sites-available/odoo > /dev/null << 'CONF'
upstream odoo {
server 127.0.0.1:8069;
}
server {
listen 80;
server_name erp.yourdomain.com;
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;
}
}
CONF
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d erp.yourdomain.comARM Performance for Odoo
Ampere A1 ARM processors deliver excellent per-core performance. Benchmarks show ARM Odoo performance within 5-10% of equivalent x86 instances, sometimes faster for multi-threaded workloads. The 4 OCPU / 24GB RAM configuration handles Odoo comfortably:
- 4 Odoo workers + 1 cron thread
- PostgreSQL with 4GB shared_buffers
- Comfortable headroom for nginx and system processes
Limitations of Free Tier
- No SLA (free resources can theoretically be reclaimed, though this is rare)
- ARM shape availability can be limited in popular regions
- No managed database in free tier (you run PostgreSQL yourself)
- Object storage limited to 20GB for backups
DeployMonkey + Oracle Cloud
DeployMonkey supports Oracle Cloud as a deployment target. Connect your OCI account and deploy Odoo instances on the free tier with automated configuration, monitoring, and backup management.