Deploy Odoo 19 Community (Self-Hosted ERP, CRM and Invoicing)
Self-hosted Odoo 19 Community: ERP, CRM, invoicing and inventory.
Just deployed
/var/lib/odoo
odoo-proxy
Just deployed
Just deployed
/var/lib/postgresql/data
Deploy and Host Odoo on Railway
![]()
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
| Service | Purpose |
|---|---|
| odoo-proxy | nginx 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. |
| odoo | Odoo 19 Community in multi-process mode: 2 HTTP workers, a cron worker and a websocket worker, private only. |
| Postgres | Postgres 18 holding the odoo database, on a persistent volume. |
| Persistent Volume | Mounted 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
- Click Deploy on Railway. Postgres starts, the
odoorole and database are created, and Odoo initialises (about 3–5 minutes). - Open your Railway URL and sign in with
admin/admin. - Immediately change the password under My Profile, Account Security, and change the admin email.
- Under Apps, install what you need: CRM, Sales, Invoicing, Inventory, Project, Website and more.
- 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
| Variable | Required | Description |
|---|---|---|
ODOO_ADMIN_PASSWD (odoo) | 🔐 Auto-generated | Odoo's master password for database operations. Separate from the admin user login. |
PGUSER (odoo) | ✅ Set | odoo, the scoped database role. It must not be postgres. |
PGPASSWORD (odoo) | 🔐 Auto-generated | Password for the odoo role. |
PGHOST, PGPORT (odoo) | ✅ Auto-injected | Private Postgres address. |
BOOTSTRAP_DATABASE_URL (odoo) | ✅ Auto-injected | Superuser URL, used at boot to create or update the odoo role. |
PORT (odoo) | ✅ Set | 8069, Odoo's HTTP port, used for the health check. |
ODOO_UPSTREAM_HOST (odoo-proxy) | ✅ Auto-injected | Odoo's private hostname for the proxy. |
PORT (odoo-proxy) | ✅ Set | 8080, 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 Railway | Odoo Online (Standard) | NetSuite | ERPNext (self-hosted) | |
|---|---|---|---|---|
| Monthly cost | ~$15–25 usage, any number of users | From about $31 per user (US) | Quote-based | Hosting 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
- Odoo on GitHub: source code
- Odoo Documentation: user and administration guides
- Odoo Docker image: the official image
- Railway Volumes Documentation: persistence for the filestore and Postgres
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
odoo-proxy
gridalpha/odoo-railway