Deploy Odoo 19 Community (Self-Hosted ERP, CRM and Invoicing)

Self-hosted Odoo 19 Community: ERP, CRM, invoicing and inventory.

Deploy Odoo 19 Community (Self-Hosted ERP, CRM and Invoicing)

Just deployed

/var/lib/odoo

Just deployed

/var/lib/postgresql/data

Deploy and Host Odoo on Railway

Odoo logo

Odoo is the world's most popular open-source business suite, with 55,000+ GitHub stars: CRM, sales, invoicing, inventory, purchasing, projects, website, point of sale and dozens more apps that share one database. This template runs Odoo 19 Community on Railway in its production multi-process mode, behind an nginx proxy that handles live updates, with Postgres and a persistent filestore. Odoo's hosted Standard plan starts at about $31 per user per month in the US. Self-hosted Odoo Community has no per-user licence, and the whole server runs for about $15–25/month.


What This Template Deploys

ServicePurpose
odoo-proxynginx on port 8080 with the public HTTPS domain. It sends pages to Odoo's HTTP workers and /websocket to Odoo's live-update worker, and passes the real client IP.
odooOdoo 19 Community in multi-process mode: 2 HTTP workers, a cron worker and a websocket worker, private only.
PostgresPostgres 18 holding the odoo database, on a persistent volume.
Persistent VolumeMounted at /var/lib/odoo on odoo for the filestore: attachments, images and generated documents.

Odoo connects to Postgres as a dedicated, non-superuser role that's created automatically at first boot, because Odoo 19 refuses to run as the postgres superuser. A generated master password protects database operations.


About Hosting Odoo

Self-hosting Odoo properly takes more than starting the container. Production mode uses separate processes, and live features (chat, notifications, live updates) are served by a different port, so you need a proxy that splits traffic by path. Odoo must not run as the database superuser. Memory limits and connection pools need sizing for the machine, and the filestore has to persist next to the database.

This template does all of that. The proxy routes /websocket correctly, so Discuss and live notifications work. Worker, memory and connection limits are tuned for a Railway container and Railway Postgres's connection limit. The database is created and initialised on first boot with no demo data. The database manager screens are disabled, so nobody can create, drop or download databases from the login page.

Change the admin password straight away. Odoo creates the first database with its standard login, admin / admin. Sign in, open My Profile, Account Security, and set a strong password before you do anything else. Nothing forces this, and the URL is public.

Typical cost: ~$15–25/month on Railway for Odoo, the proxy and Postgres, with no per-user fees. Ten users on Odoo Online Standard cost about $310/month.


Deploy Odoo in Under 10 Minutes

  1. Click Deploy on Railway. Postgres starts, the odoo role and database are created, and Odoo initialises (about 3–5 minutes).
  2. Open your Railway URL and sign in with admin / admin.
  3. Immediately change the password under My Profile, Account Security, and change the admin email.
  4. Under Apps, install what you need: CRM, Sales, Invoicing, Inventory, Project, Website and more.
  5. Set your company details, currency and taxes in Settings, then invite your team as users.

No server setup. No nginx config. No per-user licences.


Common Use Cases

  • All-in-one business suite. CRM, sales, invoicing and inventory in one system instead of five subscriptions.
  • Self-hosted Odoo Online alternative. Odoo Community on your own infrastructure, without per-user pricing.
  • Small business ERP. Quotes, orders, purchasing, stock and invoices with shared data.
  • CRM and sales pipeline. Leads, opportunities, activities and quotations.
  • Inventory and warehouse. Stock moves, multiple locations, reordering rules and barcodes.
  • Project management and timesheets. Tasks, kanban boards and time tracking per project.
  • Company website and eCommerce. Odoo's website builder and online shop on the same database.
  • Testing Odoo before buying Enterprise. Evaluate the Community apps with your own data.

Configuration

VariableRequiredDescription
ODOO_ADMIN_PASSWD (odoo)🔐 Auto-generatedOdoo's master password for database operations. Separate from the admin user login.
PGUSER (odoo)✅ Setodoo, the scoped database role. It must not be postgres.
PGPASSWORD (odoo)🔐 Auto-generatedPassword for the odoo role.
PGHOST, PGPORT (odoo)✅ Auto-injectedPrivate Postgres address.
BOOTSTRAP_DATABASE_URL (odoo)✅ Auto-injectedSuperuser URL, used at boot to create or update the odoo role.
PORT (odoo)✅ Set8069, Odoo's HTTP port, used for the health check.
ODOO_UPSTREAM_HOST (odoo-proxy)✅ Auto-injectedOdoo's private hostname for the proxy.
PORT (odoo-proxy)✅ Set8080, where the public domain points.

Installing custom or third-party modules. Odoo looks for extra modules in /mnt/extra-addons. Add modules by extending the image in your own copy of the repository, then update the app list in Apps and install them.

Email. Configure outgoing mail under Settings, Technical, Outgoing Mail Servers. Railway blocks outbound SMTP on the Hobby plan, so use Railway Pro or an email provider that offers an alternative port.

Scaling up. For more users, give the odoo service more RAM and raise workers in the config in your repository. Each HTTP worker can use up to about 1.25 GB.


Odoo on Railway vs. Alternatives

Odoo Community on RailwayOdoo Online (Standard)NetSuiteERPNext (self-hosted)
Monthly cost~$15–25 usage, any number of usersFrom about $31 per user (US)Quote-basedHosting only
Self-hosted✅ Yes❌ No❌ No✅ Yes
Per-user licence✅ None❌ Per user❌ Per user✅ None
CRM, sales, inventory, invoicing✅ Yes✅ Yes✅ Yes✅ Yes
Enterprise-only apps (Studio, full Accounting)❌ Not included✅ Included✅ Yes⚠️ Different feature set
Database access and custom modules✅ Full⚠️ Limited⚠️ Limited✅ Full
License✅ LGPL-3.0❌ Proprietary hosting❌ Proprietary✅ GPL-3.0

Dependencies for Odoo Hosting

  • Railway account. Pro is recommended for Odoo's multiple processes and email.
  • An email provider for outgoing mail, if you want notifications and invoices sent by email.
  • Optional: a custom domain for your team and customers.

Deployment Dependencies

Implementation Details

The odoo image is the official Odoo 19 Community build, pinned to a dated nightly tag. Its entrypoint creates the scoped role through BOOTSTRAP_DATABASE_URL, fixes the filestore volume's ownership, writes the master password into the config, then drops to the unprivileged odoo user. The proxy resolves Odoo's address on every request, so it keeps working after Odoo redeploys.

Upgrading to a newer Odoo 19 build means changing the image tag in the repository. Major-version upgrades (for example to Odoo 20) need a database migration; back up Postgres and the filestore first.


Frequently Asked Questions

What is Odoo Community? The free, open-source edition of Odoo, licensed under LGPL-3.0. It includes CRM, sales, invoicing, inventory, purchasing, projects, website and more, but not the Enterprise-only apps.

How much does self-hosted Odoo cost compared to Odoo Online? About $15–25/month on Railway for any number of users. Odoo Online Standard is about $31 per user per month in the US, so ten users pay roughly $310/month.

What is the default login, and is it safe? The first database uses admin / admin. It isn't safe until you change it, so set a new password under My Profile, Account Security right after your first sign-in.

Do I lose data when Railway redeploys? No. The database is in Postgres on its volume, and attachments are in the filestore on /var/lib/odoo. Redeploys keep both.

Why can't I see the database manager? It's disabled on purpose (list_db = False) so nobody can create, drop or download databases from your public URL. Back up through Railway's volume backups or pg_dump instead.

Can I upgrade to Odoo Enterprise? Enterprise needs an Odoo subscription and its extra modules. You can start on Community and migrate later with Odoo's help, but Enterprise apps aren't part of this template.


Why Deploy and Host Odoo on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Odoo on Railway, you get a production-ready Odoo 19 Community server with live updates, a hardened database setup and persistent storage, for one flat monthly cost instead of fees per user.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
50
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51