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
| Spec | Hetzner | AWS | DigitalOcean |
|---|---|---|---|
| 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
- Sign up at Hetzner Cloud Console
- Create new project → Add Server
- Location: Falkenstein (FSN1) or Nuremberg (NBG1)
- Image: Ubuntu 24.04
- Type: CX32 (4 vCPU, 8GB RAM) for small-medium Odoo
- SSH Key: Add your public key
- Networking: Enable IPv4 and IPv6
- 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 enableStep 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 postgresqlStep 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.debStep 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.confStep 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.