---
title: "Deploy Odoo 19 | ERP That Starts Without SMTP, Admin Password Set, DB Manager Off"
description: "Self-host Odoo 19 on Railway — no SMTP needed, admin password set."
category: "Other"
url: https://railway.com/deploy/odoo-19-or-erp-that-starts-without-smtp-
---

# 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.

**[Deploy Odoo 19 | ERP That Starts Without SMTP, Admin Password Set, DB Manager Off on Railway](https://railway.com/template/odoo-19-or-erp-that-starts-without-smtp-)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/odoo-19-or-erp-that-starts-without-smtp-/manifest.json

- **Creator:** Templates Guru
- **Category:** Other

## Template content

### Postgres

- **Image:** postgres:17.11-alpine

### Odoo

- **Source:** https://github.com/ak40u/odoo-railway-starter
- **Health check:** /web/login
- **Public domain:** Yes

## Documentation

# 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](https://github.com/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 with `ValueError: 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 `admin` and the password `admin`, on a public domain. Here the start script creates the database with `odoo db init` and the generated `ODOO_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/manager` otherwise offers the first visitor a freshly generated master password, enough to drop or download the database. `--no-database-list` and 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.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/odoo-19-or-erp-that-starts-without-smtp-
