Overview
Odoo Community on Infralane
Deploy the open-source Community edition of Odoo and configure the business applications your organization needs.
Included
- Odoo Community 19.0.
- A private PostgreSQL 17 database.
- A dedicated Odoo database account without PostgreSQL superuser privileges.
- Generated database passwords.
- A separately configured database-management master password.
- Persistent storage for database data, attachments, and custom add-ons.
- HTTPS reverse-proxy support.
- Service health checks.
Initial setup
Create your first company database through Odoo's setup screen. This template expects the database name odoo.
You choose the administrator email address and sign-in password during installation. Business applications are selected and configured afterward.
Community edition
This installation includes Community edition software. Enterprise-only modules, Enterprise subscriptions, and commercial support are not included.
Check that any additional module supports Odoo 19 Community before installing it.
Workload and availability
This is a starter configuration for modest workloads using one company database. It uses Odoo's threaded server.
High-concurrency installations need additional worker and proxy configuration. High availability and automatic backups are not configured by this template.
Getting started
Deploy Odoo
- Select a resource pool with enough available CPU, memory, and storage.
- Choose a strong Odoo master password and store it securely.
- Keep
ODOO_LIST_DBset totruefor initial setup. - Deploy the template and wait for both services to become healthy.
- Open the Odoo application's HTTPS address.
Create your first database
On the database creation screen:
- Master password: enter the Odoo master password chosen during deployment.
- Database name: enter exactly
odoo. - Email: enter your administrator email address.
- Password: choose a separate administrator sign-in password.
- Language and country: choose the values appropriate for your organization.
- Demo data: leave disabled for a real business installation.
Database creation can take several minutes. Allow it to complete before restarting either service.
Disable public database management
After confirming that you can sign in:
- Change the Odoo service's
ODOO_LIST_DBenvironment value tofalse. - Redeploy the Odoo service, preserving its other configuration and passwords.
- Confirm that normal sign-in still works.
- Confirm that database management actions are blocked.
The database filter remains restricted to the database named odoo.
Configure your organization
Set your company details and install the Community applications you need.
Configure outgoing email and send a test message before relying on invitations, password resets, or automated notifications.
If you connect a custom domain, confirm that Odoo's public base URL uses the final HTTPS address.
Understand your passwords
- Odoo sign-in password: used to access your business account.
- Odoo master password: protects database management.
- Database passwords: used by the services to access PostgreSQL.
These passwords serve different purposes and should remain distinct.
Operations and maintenance
Persistent data
This template uses three volumes:
database-data: PostgreSQL database data.odoo-data: Odoo attachments, filestore, sessions, and generated configuration.odoo-addons: additional module files, if you install any.
Persistent storage is not a backup. Removing these volumes can permanently remove business records and attachments.
Backups
Create consistent backups of the Odoo database and its matching filestore. Include any custom add-ons required to run the installation.
Use a maintenance window or a backup method that coordinates database and file changes. A database-only backup can omit attachments.
Store backups outside this stack, protect sensitive business data, and test restoration into an isolated installation.
The generated Odoo configuration contains credentials. Protect it and any backups containing it.
Automatic backup scheduling is not configured by this template.
Updates and migration
Back up and test before updating Odoo or installing modules.
Updates within Odoo 19 may still require module updates and compatibility checks.
Changing from Odoo 19 to another major version requires a database and module migration. Replacing the image tag alone is not a supported migration procedure.
PostgreSQL major upgrades also require a database upgrade or export-and-restore process. Do not attach an existing data directory to an incompatible major version.
Credentials and generated configuration
The Odoo configuration file is regenerated from deployment environment values at startup.
Change ODOO_MASTER_PASSWORD in the deployment configuration when rotating the master password. A change made only through Odoo's database manager can be overwritten at the next restart.
Changing database password environment values does not rotate existing PostgreSQL accounts. Update the database account and its corresponding deployment value together.
Keep ODOO_LIST_DB set to false after initial setup.
Custom modules
Use modules compatible with Odoo 19 Community. Review their source, dependencies, and maintenance status before installation.
Additional Python or system dependencies may require a separately maintained container image. Copying module files alone does not install those dependencies.
Capacity and troubleshooting
Monitor CPU, memory, storage, and service logs.
- Database connection errors: check PostgreSQL health and matching credentials.
What will be deployed
2 services · amd64
View the reviewed stack configuration
{
"volumes": {
"odoo-data": {},
"odoo-addons": {},
"database-data": {}
},
"services": {
"odoo": {
"image": "docker.io/library/odoo:19.0-20261015@sha256:27f920e002c43a1af7022a68f3cc17db71a2f9f3348800cb050721ce54893e49",
"command": [
"umask 077\nexport ODOO_RC=/var/lib/odoo/infralane.conf\npython3 - <<'PY'\nimport configparser\nimport os\nconfig = configparser.RawConfigParser()\nconfig[\"options\"] = {\n \"admin_passwd\": os.environ[\"ODOO_MASTER_PASSWORD\"],\n \"db_host\": os.environ[\"HOST\"],\n \"db_port\": os.environ[\"PORT\"],\n \"db_user\": os.environ[\"USER\"],\n \"db_password\": os.environ[\"PASSWORD\"],\n \"dbfilter\": \"^odoo$$\",\n \"list_db\": os.environ[\"ODOO_LIST_DB\"],\n \"proxy_mode\": \"True\",\n \"workers\": \"0\",\n \"max_cron_threads\": \"1\",\n \"data_dir\": \"/var/lib/odoo\",\n \"addons_path\": \"/mnt/extra-addons\",\n}\nwith open(os.environ[\"ODOO_RC\"], \"w\") as target:\n config.write(target)\nPY\nexec /entrypoint.sh odoo\n"
],
"restart": "unless-stopped",
"volumes": [
"odoo-data:/var/lib/odoo",
"odoo-addons:/mnt/extra-addons"
],
"depends_on": {
"database": {
"condition": "service_healthy"
}
},
"entrypoint": [
"/bin/bash",
"-ec"
],
"environment": {
"HOST": "database",
"PORT": "5432",
"USER": "odoo",
"PASSWORD": "${DATABASE_PASSWORD}",
"ODOO_LIST_DB": "${ODOO_LIST_DB}",
"ODOO_MASTER_PASSWORD": "${ODOO_MASTER_PASSWORD}"
},
"healthcheck": {
"test": [
"CMD",
"curl",
"--fail",
"--silent",
"--max-time",
"5",
"http://127.0.0.1:8069/web/login"
],
"retries": 12,
"timeout": "10s",
"interval": "15s",
"start_period": "60s"
},
"x-infralane": {
"cpu": 1.5,
"http_port": 8069,
"memory_mb": 2048,
"description": "Odoo Community business applications"
}
},
"database": {
"image": "docker.io/library/postgres:17.11-bookworm@sha256:839fbb5a4942a7758dd93e18b42ea5649807491a0545b5eeeb8f0b8bb11857a5",
"expose": [
"5432"
],
"command": [
"cat > /docker-entrypoint-initdb.d/10-odoo-user.sh <<'SH'\n#!/bin/bash\nset -e\npsql -v ON_ERROR_STOP=1 --username \"$$POSTGRES_USER\" --dbname \"$$POSTGRES_DB\" --set=odoo_password=\"$$ODOO_DB_PASSWORD\" <<'SQL'\nCREATE ROLE odoo WITH LOGIN CREATEDB NOSUPERUSER NOCREATEROLE NOREPLICATION PASSWORD :'odoo_password';\nSQL\nSH\nchmod 0755 /docker-entrypoint-initdb.d/10-odoo-user.sh\nexec /usr/local/bin/docker-entrypoint.sh postgres\n"
],
"restart": "unless-stopped",
"volumes": [
"database-data:/var/lib/postgresql/data"
],
"entrypoint": [
"/bin/bash",
"-ec"
],
"environment": {
"POSTGRES_DB": "postgres",
"POSTGRES_USER": "postgres",
"ODOO_DB_PASSWORD": "${DATABASE_PASSWORD}",
"POSTGRES_PASSWORD": "${DATABASE_ROOT_PASSWORD}"
},
"healthcheck": {
"test": [
"CMD",
"pg_isready",
"-h",
"127.0.0.1",
"-U",
"postgres",
"-d",
"postgres"
],
"retries": 12,
"timeout": "5s",
"interval": "10s",
"start_period": "30s"
},
"x-infralane": {
"cpu": 0.5,
"memory_mb": 1024,
"description": "Private PostgreSQL database for Odoo"
}
}
}
}Release history
1.0.0
available · Oct 29, 2026
1.0.0
Initial Odoo Community template for Infralane.
- Odoo Community 19.0, build 20261015.
- PostgreSQL 17.11.
- Container images pinned to exact SHA-256 digests.
- Dedicated Odoo database role without superuser privileges.
- Generated database passwords and a separate Odoo master password.
- Persistent database, filestore, and add-on storage.
- Database filter restricted to
odoo. - Configurable database manager access.
- Service health checks and setup documentation.