Prerequisites
- Ubuntu 24.04 LTS server (2+ CPU, 4+ GB RAM)
- Root or sudo access
- Domain name pointing to server IP
Step 1: System Update & Dependencies
sudo apt update && sudo apt upgrade -y
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 \
libmysqlclient-dev libjpeg-dev libpq-dev \
liblcms2-dev libblas-dev libatlas-base-dev \
node-less npmStep 2: PostgreSQL
sudo apt install -y postgresql postgresql-client
sudo su - postgres -c "createuser --createdb --no-superuser --no-createrole odoo"
sudo su - postgres -c "psql -c \"ALTER USER odoo WITH PASSWORD 'your_secure_password';\""Step 3: System User
sudo adduser --system --home=/opt/odoo --group odooStep 4: Install Odoo from Source
sudo su - odoo -s /bin/bash
git clone https://github.com/odoo/odoo.git --depth 1 --branch 19.0 /opt/odoo/odoo
# Create virtual environment
python3 -m venv /opt/odoo/venv
source /opt/odoo/venv/bin/activate
pip install --upgrade pip
pip install wheel
pip install -r /opt/odoo/odoo/requirements.txt
exitStep 5: Configure Odoo
sudo mkdir /etc/odoo
sudo cat > /etc/odoo/odoo.conf << 'EOF'
[options]
admin_passwd = your_master_password
db_host = localhost
db_port = 5432
db_user = odoo
db_password = your_secure_password
addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons
data_dir = /opt/odoo/.local/share/Odoo
logfile = /var/log/odoo/odoo.log
log_level = info
workers = 4
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_real = 120
limit_time_cpu = 60
proxy_mode = True
list_db = False
dbfilter = ^%d$
EOF
sudo chown odoo:odoo /etc/odoo/odoo.conf
sudo chmod 640 /etc/odoo/odoo.conf
sudo mkdir -p /var/log/odoo
sudo chown odoo:odoo /var/log/odoo
sudo mkdir -p /opt/odoo/custom-addons
sudo chown odoo:odoo /opt/odoo/custom-addonsStep 6: Install wkhtmltopdf
# Odoo requires the patched version for PDF reports
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.debStep 7: Systemd Service
sudo cat > /etc/systemd/system/odoo.service << 'EOF'
[Unit]
Description=Odoo 19
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin -c /etc/odoo/odoo.conf
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odooStep 8: Nginx Reverse Proxy
sudo apt install -y nginx
sudo cat > /etc/nginx/sites-available/odoo << 'NGINX'
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
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;
client_max_body_size 200m;
location /websocket {
proxy_pass http://127.0.0.1:8072;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://127.0.0.1:8069;
proxy_read_timeout 720s;
}
location ~* /web/static/ {
proxy_pass http://127.0.0.1:8069;
expires 7d;
}
}
NGINX
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginxStep 9: SSL with Let's Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com --non-interactive --agree-tos -m [email protected]
# Auto-renewal is configured automaticallyStep 10: Verify
# Check Odoo is running
sudo systemctl status odoo
# Check logs
sudo tail -f /var/log/odoo/odoo.log
# Access in browser
# https://your-domain.comPost-Installation
- Create your first database at https://your-domain.com/web/database/manager
- Install modules: Sales, Inventory, Accounting, etc.
- Set list_db = False after creating the database
- Configure daily backups
DeployMonkey
All 10 steps above happen automatically on DeployMonkey. Click "Deploy," select Odoo 19, and your production-ready instance is live in 3 minutes — with SSL, nginx, optimized PostgreSQL, automated backups, and an AI admin agent.