Skip to main content
Back to Blog
Infrastructure9 min read

Running Odoo 19 CRM on Proxmox: A Real-World Production Setup

By AIQSO|March 30, 2026

Most businesses outgrow their first CRM within two years. They start with a free tier on HubSpot or Zoho, hit feature walls, and face a choice between paying premium SaaS pricing or migrating to something they control. We chose to run Odoo 19 on our Proxmox virtualization cluster, deployed inside an LXC container, with PostgreSQL as the backend and a stack of OCA community modules that extend it well beyond what the base installation provides. After running this setup in production for our own operations and deploying similar configurations for clients, we can speak to both the advantages and the genuine operational costs of self-hosted CRM.

Key Takeaways

  • Odoo 19 Community Edition provides CRM, project management, invoicing, and inventory at zero licensing cost
  • LXC containers on Proxmox isolate the CRM while sharing host resources efficiently, using a fraction of the overhead of a full VM
  • OCA (Odoo Community Association) modules fill the gaps between Community and Enterprise editions for most mid-size use cases
  • AI integrations via ChatGPT and OCR modules automate lead qualification, document processing, and communication drafting
  • Self-hosted Odoo costs $50-100 per month in infrastructure versus $400-2,000+ per month for equivalent SaaS CRM tiers
  • The trade-off is operational responsibility: updates, backups, and module compatibility require ongoing attention

The Deployment Architecture

Our Odoo instance runs on LXC container 237 inside the primary Proxmox node. LXC containers are a deliberate choice over full virtual machines for application workloads like CRM. They share the host kernel, which eliminates the memory and CPU overhead of running a separate OS kernel, while still providing filesystem and process isolation.

The container runs Ubuntu with Odoo 19 installed from the official repository, PostgreSQL 16 as the database backend on a dedicated data volume, and Nginx as the reverse proxy handling TLS termination from the Cloudflare Tunnel endpoint.

External access routes through a Cloudflare Tunnel, which means the CRM is accessible from any location without VPN configuration and without exposing any ports on the host firewall. Access control layers through Cloudflare Access policies, restricting the application to authenticated users before traffic even reaches the container.

The Proxmox host provides automatic daily snapshots of the container, which means a corrupted update or bad module installation can be rolled back in under a minute. This snapshot capability is one of the strongest arguments for running business applications on a virtualization platform rather than directly on bare metal.

CRM Pipeline Configuration

The CRM module in Odoo is the core of daily operations. Our pipeline follows seven stages that map to an actual sales process rather than the generic defaults Odoo ships with.

New Lead receives inbound inquiries from the website contact form, email parsing rules, and API integrations from third-party lead sources. Leads enter with whatever data the source provides.

Qualified is the first human checkpoint. An AI module pre-scores leads based on company size, industry, service interest, and engagement signals, but a person reviews and confirms qualification before the lead advances.

Discovery Call tracks scheduled conversations. Odoo's calendar integration syncs with Google Calendar, and the activity scheduling system ensures follow-ups happen on time.

Proposal Sent links to Odoo's sales order system. Proposals generate directly from the CRM record with pre-configured product lines, pricing tiers, and terms. This eliminates the disconnect between CRM and quoting that plagues systems where proposals live in separate tools.

Negotiation tracks back-and-forth on terms, with Odoo's chatter system maintaining a complete communication history on the record.

Won triggers downstream automation: project creation, invoicing setup, onboarding task sequences, and team notifications. This is where the integration between CRM and project management modules pays off.

Lost captures the reason and feeds it back into qualification criteria. Over time, the lost-reason data improves lead scoring accuracy and highlights patterns in what the business is winning versus losing.

The Module Stack

Odoo Community Edition provides solid core functionality, but the OCA ecosystem fills genuine gaps. We run 12 OCA modules in production.

CRM enhancements include lead scoring, duplicate detection, and industry classification modules. The lead scoring module assigns numeric scores based on configurable criteria, which feeds the AI qualification step and helps prioritize the pipeline.

Project management extensions add Kanban task stages, time tracking with timer functionality, and project-to-invoice workflows. The standard Odoo project module works, but the OCA extensions make it practical for service businesses that bill hourly.

Accounting and invoicing modules handle recurring invoicing, payment reminders, and multi-currency support. For a services business, the ability to generate invoices directly from tracked time on project tasks eliminates manual billing reconciliation.

Document management with OCR integration processes incoming documents, purchase orders, and contracts. The OCR module extracts text from uploaded PDFs and images, pre-filling form fields and reducing manual data entry.

The product catalog is configured with service categories that reflect actual offerings: consulting engagements, IT services, support contracts, training programs, and software development projects. Each category has default pricing, estimated hour ranges, and linked task templates that auto-generate project structures when a deal closes.

AI Integrations

Two AI integrations extend Odoo beyond traditional CRM functionality.

ChatGPT integration connects to the OpenAI API for three specific workflows. First, it drafts initial response emails for new leads based on their inquiry details and the matching service category. The sales team reviews and personalizes before sending, but the AI draft saves 10-15 minutes per lead response. Second, it generates meeting summaries from notes entered during discovery calls, structuring them into a standard format with action items. Third, it assists with proposal language, taking bullet-point requirements and expanding them into professional scope descriptions.

We route these API calls through our self-hosted AI inference server via LiteLLM when possible, falling back to cloud APIs for tasks requiring the latest model capabilities. This keeps costs low for routine operations while preserving access to frontier models when needed.

OCR processing handles document intake. Incoming purchase orders, signed contracts, and vendor invoices are uploaded to Odoo and automatically processed. The OCR module extracts relevant fields (amounts, dates, parties, line items) and creates draft records that a person reviews and confirms. For a business processing 50-100 documents per month, this eliminates 15-20 hours of manual data entry.

Automation with n8n

Odoo's built-in automation handles internal workflows, but cross-system automation requires an orchestration layer. We use n8n for this, with webhook triggers that fire on Odoo events and execute multi-step workflows.

Lead routing listens for new CRM records and enriches them with data from external sources before the sales team sees them. Company size, industry classification, and technology stack data are appended from public APIs.

Email marketing integration syncs CRM segments with Listmonk, our self-hosted email platform. When a lead enters a specific pipeline stage, they are added to the corresponding Listmonk mailing list. When they advance or opt out, the list membership updates automatically.

Notification workflows send Slack messages for high-value pipeline changes, daily digest emails of CRM activity, and escalation alerts when leads stall in a stage beyond configured thresholds.

Reporting automation generates weekly pipeline reports and monthly revenue forecasts, compiling data from Odoo's API and delivering formatted reports via email. This replaces the manual report generation that consumes time in most CRM workflows.

Why Self-Hosted Over Odoo.sh

Odoo offers its own hosted platform, Odoo.sh, which provides managed infrastructure for Odoo deployments. The decision to self-host rather than use Odoo.sh involves several trade-offs.

Cost at scale favors self-hosting. Odoo.sh pricing starts at approximately $32 per user per month for the standard tier, and Enterprise features required for several modules we use would push costs to $50+ per user per month. For a 15-person team, that is $750+ per month for the platform alone. Our self-hosted infrastructure cost for the Odoo container is approximately $50 per month in allocated resources plus electricity, with no per-user fees.

Module flexibility is broader on self-hosted. Odoo.sh supports OCA modules but with some restrictions on what can be installed in production environments. Self-hosted deployments accept any module that is compatible with the Odoo version, including custom modules developed in-house.

Data control keeps all CRM data, customer communications, financial records, and documents within our infrastructure. For clients in regulated industries or those handling sensitive business data, this is often a requirement rather than a preference.

Integration latitude is unconstrained. Self-hosted Odoo on the same network as other services — the AI server, n8n automation, Listmonk email, monitoring systems — communicates over local network connections with minimal latency and no API rate limits.

The trade-off is operational responsibility. Odoo.sh handles updates, backups, and infrastructure management. Self-hosted requires that you or your managed services partner handle these tasks. Major version upgrades in particular require careful planning, module compatibility testing, and database migration. This is not trivial, and businesses should account for this ongoing cost when making the self-hosted decision.

When This Applies

Self-hosted Odoo makes sense for businesses that need CRM, project management, and invoicing in an integrated system and have either internal IT capability or a managed services partner to handle the infrastructure. The sweet spot is organizations with 5-50 users who would otherwise pay $500-2,500 per month for equivalent SaaS functionality across multiple platforms.

It also applies to businesses that want to extend their CRM with custom workflows, AI integrations, and automation that SaaS platforms restrict or charge premium prices for. The open-source nature of Odoo Community Edition and the OCA module ecosystem mean that customization is limited by development effort, not by vendor feature gates.

The approach is less suitable for businesses that need a CRM they can sign up for and start using immediately without configuration, businesses without technical resources for ongoing maintenance, or organizations that require Enterprise-only features like advanced manufacturing, multi-company consolidation, or Odoo's proprietary BI tools.

For businesses evaluating CRM options, the starting point is mapping your actual workflow rather than comparing feature checklists. A CRM that matches how your team actually works, even if it requires configuration, will outperform a feature-rich platform that forces your process into its assumptions. If your workflow spans sales, project delivery, and invoicing, an integrated platform like Odoo deployed on reliable infrastructure eliminates the integration tax that comes with stitching together separate best-of-breed tools.

A
AIQSO
AIQSO
Share:

Need Help With Your Digital Strategy?

AIQSO helps businesses automate workflows, train custom AI models, and optimize their online presence.