Deploy Odoo 19 | ERP That Starts Without SMTP, Admin Password Set, DB Manager Off
Self-host Odoo 19 on Railway — no SMTP needed, admin password set.
Postgres
Just deployed
/var/lib/postgresql/data
Just deployed
/var/lib/odoo
Deploy and Host Odoo on Railway
Odoo 19 Community, the open-source ERP, on Postgres. It starts without mail settings, creates its database with a generated administrator password instead of admin / admin, and keeps the web database manager switched off.
Nothing to fill in. Open the domain and sign in as admin with the ODOO_ADMIN_PASSWORD from the Odoo service's variables.
About Hosting Odoo
Two services:
- Odoo 19, built from ak40u/odoo-railway-starter on the official image, with a volume for attachments and sessions (public)
- Postgres 17: the Odoo database, on its own volume and on the private network only
Install the apps you need, CRM, Sales, Inventory, Invoicing, Website and the rest, from the Apps menu after signing in.
Common Use Cases
- A CRM and sales pipeline with quotes and invoices for a small company.
- Inventory and purchasing across warehouses.
- A company website and shop connected to the same stock and accounting.
Dependencies for Odoo Hosting
Deployment Dependencies
- Odoo
odoo:19.0(Community Edition, LGPL-3.0), wrapped by the starter repository's start script - Postgres
postgres:17.11-alpine
Implementation Details
- It starts without SMTP. The common Odoo template passes
--smtp-port="${ODOO_SMTP_PORT_NUMBER}"to Odoo; left empty, Odoo stops at once withValueError: invalid literal for int() with base 10: ''. Here mail is configured inside Odoo, under Settings → Technical → Outgoing Mail Servers. - No admin / admin. Started against a database that does not exist yet, Odoo creates it on its own with the login
adminand the passwordadmin, on a public domain. Here the start script creates the database withodoo db initand the generatedODOO_ADMIN_PASSWORD, and refuses to start without that password. Checked: on a fresh database admin / admin is rejected and the generated password signs in. - The database manager is off. Odoo's
/web/database/managerotherwise offers the first visitor a freshly generated master password, enough to drop or download the database.--no-database-listand a filter to the one database switch the manager off. - No
--init=all. The common template asks Odoo to install every available module on every start. Here Odoo starts with the base modules and you install apps from its Apps menu. - The database settings are flags. The stock image's entrypoint reads the database port from
PORT, the variable Railway uses for HTTP, so the start script passes host, port, user and password as flags instead. - A readiness check. Railway waits for
/web/login, which answers only once the database exists and Odoo is ready.
Configuration
The administrator password and the Postgres password are generated; change the administrator password after the first sign-in. Odoo runs threaded, which suits a small team; for more users, add --workers and --max-cron-threads in start.sh.
Verification
Deployed from this template into an empty project, both services starting at once: live in a little over two minutes, the start script created the database, /web/login answers 200 and /web/database/manager reports that it has been disabled. Locally, on the same image: a fresh database rejects admin / admin and accepts the generated password, a restart keeps the database and the password, and Odoo used about 80 MB.
Why Deploy 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 are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Template Content
Postgres
postgres:17.11-alpine