Skip to content

Deploy Odoo on Hetzner Cloud: Complete Guide (2026)

DeployMonkey Team · March 22, 2026 12 min read

Why Hetzner for Odoo?

Hetzner offers the best price-to-performance ratio for Odoo hosting in Europe. Their cloud servers use AMD EPYC processors with NVMe SSDs, delivering excellent database performance at 50-70% lower cost than AWS/GCP/Azure. Data centers in Germany and Finland provide low latency for European users and GDPR compliance.

Pricing Comparison

SpecHetznerAWSDigitalOcean
4 vCPU, 8GB RAM, 80GB SSD€7.49/mo~$70/mo (t3.xlarge)$48/mo
8 vCPU, 16GB RAM, 160GB SSD€14.49/mo~$140/mo (t3.2xlarge)$96/mo
16 vCPU, 32GB RAM, 320GB SSD€28.49/mo~$280/mo$192/mo

Step 1: Create Hetzner Server

  1. Sign up at Hetzner Cloud Console
  2. Create new project → Add Server
  3. Location: Falkenstein (FSN1) or Nuremberg (NBG1)
  4. Image: Ubuntu 24.04
  5. Type: CX32 (4 vCPU, 8GB RAM) for small-medium Odoo
  6. SSH Key: Add your public key
  7. Networking: Enable IPv4 and IPv6
  8. Create & Buy

Step 2: Initial Server Setup

# SSH into server
ssh root@your-server-ip

# Update system
apt update && apt upgrade -y

# Set hostname
hostnamectl set-hostname odoo-server

# Create swap (Hetzner servers have no swap by default)
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# Configure firewall
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Step 3: Install PostgreSQL

apt install -y postgresql postgresql-client

# Create Odoo database user
su - postgres -c "createuser --createdb --no-superuser --no-createrole odoo"
su - postgres -c "psql -c \"ALTER USER odoo WITH PASSWORD 'strong_password_here';\""

# Optimize for Hetzner's NVMe SSDs
cat >> /etc/postgresql/16/main/conf.d/odoo.conf << 'EOF'
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 64MB
maintenance_work_mem = 512MB
random_page_cost = 1.1
effective_io_concurrency = 200
wal_buffers = 64MB
max_wal_size = 2GB
checkpoint_completion_target = 0.9
EOF

systemctl restart postgresql

Step 4: Install Odoo 19

# System dependencies
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 node-less npm

# Create Odoo user
adduser --system --home=/opt/odoo --group odoo

# Clone Odoo 19
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
'

# Install wkhtmltopdf
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb

Step 5: Configure Odoo

mkdir -p /etc/odoo /var/log/odoo /opt/odoo/custom-addons
chown odoo:odoo /var/log/odoo /opt/odoo/custom-addons

cat > /etc/odoo/odoo.conf << 'EOF'
[options]
admin_passwd = change_this_master_password
db_host = localhost
db_port = 5432
db_user = odoo
db_password = strong_password_here
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 = 5
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_real = 120
limit_time_cpu = 60
proxy_mode = True
list_db = False
EOF

chown odoo:odoo /etc/odoo/odoo.conf
chmod 640 /etc/odoo/odoo.conf

Step 6: Systemd, Nginx, SSL

# Systemd service
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
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload && systemctl enable --now odoo

# Nginx
apt install -y nginx certbot python3-certbot-nginx
# (Use standard Odoo nginx config — see our nginx guide)

# SSL
certbot --nginx -d your-domain.com --non-interactive --agree-tos -m [email protected]

Hetzner-Specific Tips

  • Volumes: Attach Hetzner Volumes for backup storage (€0.052/GB/mo)
  • Snapshots: Create server snapshots before upgrades (€0.012/GB/mo)
  • Floating IPs: Use for zero-downtime server migrations
  • Load Balancers: €5.49/mo for high-availability setups
  • Private Networks: Use for database-to-app communication (free)

DeployMonkey on Hetzner

DeployMonkey deploys to Hetzner Cloud automatically. Select Hetzner as your provider, choose the server size, and your Odoo instance is live in 3 minutes — with all the optimizations above applied automatically.