Skip to main content
Ready to deploy? Try it free

Documentation Deploy & operate

Deployments & rollback

The app screen: build and update an app, its settings, branches and URLs, maintenance mode, runs and logs, and who may do what.

Developer Updated 11/12/2026

The app screen

One app is one Odoo instance in one environment of a project. This screen is where you change it, run it and follow what happened to it.

You can

Good to know

  • You only see the buttons and menus your role allows in this environment (Who may do what).
  • An app runs one change at a time: while one runs, the next waits or is refused.
  • App History, under the tabs, lists every change and run, newest first.
The app screen: sidebar, header actions and the Info tab
The app screen, on its Info tab.

Deploy, update or build

Build opens one dialog with up to three choices. Each one shows only when you may run it and the app is in a state where it makes sense.

ChoiceWhat it doesWhen it is offered
DeployBuilds the app's container and code again and starts it. The first deploy of a new app creates its database.Always.
UpdatePulls the latest code of the app's branches and updates the installed modules. This is the everyday change.Once the app exists (not while it is a draft or being deleted).
BuildReplaces this app's database with a neutralized copy of a production or staging backup, so you can test on real data. This overwrites all current data.On staging and development apps that are deployed or in error.
The Build dialog on a production app, Update selected
Update on a production app: the backup is recommended, and the module update runs on a copy of the database.

The options

OptionWhat it does
Backup before actionBacks the database up first (Zip with the filestore, or Dump with the database only), so the change can be rolled back with its data. Offered once the app has been deployed.
Quick updateUpdate only. Pulls the code and restarts the app on its current image, without pulling or rebuilding the image. Turn on Update database modules to run the module update after the pull; leave it off for a code refresh and restart.
Only changed addonsUpdate only. Runs the module update for the addons that changed since the last run, not for all of them. When the change cannot be worked out safely, it updates the addons it is set up to update.
The Build dialog with Quick update and its module options turned on
Quick update, with the database modules updated for the changed addons only.

On a production app the dialog asks you to take a backup first. When the environment updates on a copy of the database, the dialog says so: a failed module update then changes nothing. See Safe updates.

When Use Clean DB is on in the app's Automation tab, Deploy and Update delete the current database and install a fresh one. The dialog warns you. Clean databases are never allowed in production.

Build from a backup

On staging and development apps, the Build choice restores a backup from another environment of the project. Pick the source (Production or Staging), the source app and the backup to restore, or turn on Build a fresh production backup to take a new one first. Turn on Update database modules after restore when the source runs older code than this app's branch. The copy is neutralized: emails are not sent and scheduled jobs do not run.

Other actions

More groups the rest of the app's actions. You only see the ones you may run.

The More menu of an app, grouped in Application, Maintenance, SSL and Danger Zone
The More menu.
ActionWhat it does
Application
Sync VariablesRefreshes the settings the platform renders for the app's runs from its current configuration. It does not change the container's environment variables.
SettingsOn an app's card only: opens the app, on its Overview.
Sync BackupsMatches the app's backup list with the backup files found on its server.
Setup LogsShows the log of the app's last setup run: the module install or update that ran with its deploy.
RestoreRestores a backup into this app. See Backups & restore.
Maintenance
Cancel Queued UpdateShown while a push waits in the update queue for its turn. The waiting update will not run; the next push queues it again.
Restart ServiceRestarts Odoo. The code, the configuration and the data stay as they are.
Update ModulesRuns the module update for the modules you name (separated by commas or spaces), behind the maintenance page. You can take a backup first.
Apply ConfigWrites the Odoo configuration, the container settings and the routing from the Configs tab, then restarts the app. See Settings.
Enable Maintenance / Disable MaintenanceShows or takes down the maintenance page. Only the one that fits the app's state is offered. See Maintenance mode.
SSL
Renew SSLRenews the certificates of the app's URLs.
Danger Zone
Delete InstanceRemoves the app from its server. On production you sign it by typing the app's name.
DestroyRemoves the app's record from CloudWady. Offered once the app was deleted from its server, or when it never reached one. It cannot be undone.

When the app's last run failed or was canceled, a Retry button appears in the header. It runs the failed run again from the step that failed.

The Access menu

Access, in the app's header, opens a terminal, a database console, the app's editor or pgAdmin, in your browser. It lists only the entries you may use on this app, in four groups.

EntryWhat it opens
Terminal
ShellA shell in the app's container.
Odoo ShellThe Odoo shell on the app's database.
Follow LogThe app's Odoo log, following it as it grows.
Database
Database (r+w)psql on the app's database as the app's own role, which can change data.
Database (read)psql on the app's database as its read role, which cannot change anything.
Editor
Install Editor, Open Editor, Remove EditorVS Code on the app's code, read-only: put on the server, opened, taken off. See Editor.
pgAdmin
Open pgAdmin and the other pgAdmin entriespgAdmin on the app's server, connected to this app as its read role. See below.

The Terminal and Database entries appear once the app has been deployed on a server set up by Harden Server. They act inside the app's container only; for a shell on the server itself, see Opening a terminal.

Who may. The Terminal and Database entries and Open Editor are for Developer Plus and above in development and staging, and Maintainer and above in production. Install Editor and Remove Editor take what Apply Config takes: Developer in development, Developer Plus in staging, Maintainer in production. The pgAdmin entries are for the workspace's Maintainers and Admins, in every environment.

Editor entries

Install Editor puts the editor on the server, once you confirm: it switches it on and applies the app's configuration, which restarts the app. The first editor on a server installs its sign-in first, in the same run, so it takes a few minutes. While a run is under way on the app or on its server's sign-in, the menu shows Installing Editor and Remove Editor is greyed out. Then Open Editor opens it in a new tab, starting it first when it is asleep, and Remove Editor takes it off the same way; the server's last editor takes its sign-in with it. Editor Not Ready means it cannot open: click it to see why, its sign-in did not install (run that again, or remove the editor and install it again) or the app's configuration was not applied. Open Editor Again means the last start failed; click it to try again.

pgAdmin entries

pgAdmin reads the app's database as its read role, so its entries are for the people who may reveal that role (see Database Roles), and only once the app has its own roles. pgAdmin also needs two-factor sign-in: until you sign in with a code from an authenticator app as well as your password, the menu shows pgAdmin Needs Two-factor Sign-in, which takes you to My Settings to turn it on.

EntryWhat it does
Install pgAdminShown when the app's server has no pgAdmin. It installs one there, which starts a deployment; if you have several domains, you pick its domain first. It opens with each person's CloudWady login, never a pgAdmin password. You may install it if you may open a terminal on that server.
Add to My pgAdminYour pgAdmin then lists this app and connects to its database as the app's read role, with no password to type: you can read every table but change nothing. Only you see it there. Add to My pgAdmin Again means the last attempt failed.
Open pgAdminOpens your pgAdmin in a new tab, signed in.
Remove from My pgAdminTakes this app out of your pgAdmin: its connection and the password pgAdmin used go. You can add it again at any time.
pgAdmin Not ReadypgAdmin cannot be used here now. Click it to see why, for example that the server cannot sign people in with their CloudWady login, or that pgAdmin is still being installed. When you may fix it, it offers to open the installer.

One pgAdmin serves the people of the workspace that owns its server. Each entry asks before it acts, except Open pgAdmin.

General

What the app is: its name, its address, its Odoo version and edition, and a note for your team.

You can

  • Pick another Version or Edition, until the app's first deployment.
  • Write a Note for your team and press Save.

Good to know

  • The name and the URL are set when the app is created and cannot change.
  • After the first deployment the version and edition are read-only, because the database is on them. To move to another version, create a new app.
  • The note changes nothing on the app itself.
  • Changing these takes Developer in development, Developer Plus in staging and Maintainer in production (Who may do what).

Branches

The repositories and branches the app is built from, and the commit it runs.

You can

  • Build the app from one more branch with Add Branch: pick the repository, the branch and a Sequence, the clone order (lower first).
  • Change a branch with the pencil, or flag it with Mark for Deletion in its row's menu; Restore takes the mark off.
  • Read the commit the server runs again with the refresh on a row; the refresh beside a repository's name fetches its branches again.
  • Download a branch's code with Download Addons in its row's menu, once you confirm your password.

Good to know

  • Changes reach the app at its next Deploy or Update, which clones the branches as they are then; marked branches leave the list once it succeeds.
  • Commit SHA is what the next Deploy or Update builds; a warning on Actual SHA means the server runs another commit.
  • The starred branch is the app's main branch: it can never be removed.
  • Without automated deployments in the plan, you cannot add a branch, and can change only the main one, to another branch of its repository.
  • Changing branches takes Developer in development, Developer Plus in staging and Maintainer in production; downloading addons and fetching a repository take Maintainer or Admin.

Settings: the Configs tab

What the app's container, its odoo.conf and its routing are made from, with its editor and its database logins.

You can

  • Store a change with Save.
  • Write it to the running app with Apply Config in More → Maintenance, while the app is deployed.

Good to know

  • Most changes reach the app only with Apply Config; When a change takes effect lists the others.
  • Apply Config writes the Odoo configuration, the container settings and the routing, then restarts the app: its users are cut off while it restarts.
  • Changing settings takes Developer in development, Developer Plus in staging and Maintainer in production. See Who may do what.
The Configs tab: Container, Odoo Config, and TLS and Routing
The Configs tab.

When a change takes effect

What each setting waits for before the running app has it.

ChangeTakes effect with
CPU and memory limits, environment variables, workers, cron threads, OCA queue, database manager, search indexing, body size, response timeout, the editor's idle timeApply Config. It restarts the app.
Additional packages, config patch, a new admin passwordThe next Build → Deploy.
Certificate provider (URLs tab)At once, when you confirm.
The database the app runs onMove to another database, a run of its own. See Odoo Config.
New code on the branchesBuild → Update, or automatic updates.

Container

How much of its server the app may use, and what its container is built with.

You can

  • Cap its CPU with CPU Limit, in steps of 0.5 cores, and its memory with Memory Limit, in MB. 0 means no cap.
  • Build system packages into its image with Additional Packages, for example openssh-client, curl.
  • Give it your own variables in Environment Variables: Add a name, then type its value.

Good to know

  • Limits and variables apply with Apply Config. Packages are built into the image at the next Deploy.
  • The limits are hard caps, so one app cannot starve the others on its server. A new app starts with its environment's defaults.
  • Variables are stored encrypted and their values masked: Maintainers and Admins show them with Reveal and their own password. A masked value you leave alone is kept.
  • Names the platform sets itself are refused: the section lists them under Protected variables.

Odoo Config

What goes into the app's odoo.conf, and which database server the app runs on.

You can

  • Set how many Odoo worker processes and scheduled-action threads run with Workers and Max Cron Threads, 0 to 50 each.
  • Reveal Odoo's master password with the key beside Admin Password, once you confirm yours, or give it a new one with the rotate button beside it. Both are for the workspace's Admins.
  • Load the OCA queue_job module with Use OCA Queue; its channels come from Queue Channel, root:2 unless you change it.
  • Add your own odoo.conf lines in Config Patch: Add a property, then type its value. Read the file as the server has it with View Config, once you confirm your password.
  • Pick the Database before the first deployment; after that, move the app to another database on its server with the exchange button beside it.

Good to know

  • Workers, cron threads and the OCA queue apply with Apply Config; a config patch with the next Deploy.
  • A new master password is written in odoo.conf by a run of its own, which restarts the app; the key shows it once that run is done.
  • A patch line that sets a property the platform writes itself is refused; the section lists them under Protected properties.
  • A move backs the app up, then stops it while its database is copied, about as long as a backup and a restore; follow it in Operations.
  • A move drops the app's database and logins on the old server, and any copy kept to undo its last update.
  • Revealing the admin password and View Config take Developer or above; moving the database takes Maintainer or Admin.

TLS & Routing

How the router in front of the app treats requests, for every address of the app.

You can

  • Open Odoo's database manager with Database Manager Allowed, only while you need it; it is off unless you turn it on.
  • Tell search engines to leave the site out with Search Indexing set to Blocked.
  • Refuse requests above a size with Max Body Size, from 10 MB to 10 GB; Unlimited, the default, means no cap.
  • Give long requests and large uploads more time with Response Timeout (s); 0 keeps the default, about 600 seconds.

Good to know

  • Each change applies with Apply Config.
  • With the database manager on, anyone with the app's admin password can back up or drop its database from a browser.
  • Off, it is closed at the front door, where /web/database answers with a 403 page, and in Odoo, which refuses the database service over RPC.
  • Search indexing is Allowed in production and Blocked in staging and development, unless you change it.
  • Certificates are set on the URLs tab.

Editor

VS Code in your browser on this app's code, with a terminal in its container.

You can

  • Put it on the server with Install Editor in the Access menu; the first editor on a server also installs its sign-in, which takes a few minutes.
  • Open it with Open Editor; when it is asleep, it starts within a minute.
  • Sign in with your CloudWady login; a sign-in lasts an hour.
  • Read the code and use the terminal, which reaches what the app reaches, its database included.
  • Take it off with Remove Editor; the server's last editor takes its sign-in with it.

Good to know

  • The code is read-only in every environment: change it in its repository and deploy it. You cannot add extensions.
  • Installing and removing apply the app's configuration, which restarts the app; neither starts while the app or its server's editor sign-in has a run under way.
  • It sleeps after Stop When Idle For (Configs › Editor) with no tab open, 15 minutes unless you change it; a Deploy, Update, Apply Config or Restart Service ends it too.
  • It runs inside the app's container, so its memory counts against the app's Memory Limit; it needs Traefik on the app's server and a domain for its environment.
  • Installing and removing take what Apply Config takes; opening takes Developer Plus in development and staging, Maintainer in production.

Database Roles

The app's own two logins on its PostgreSQL server, so no other app can reach its database there.

You can

  • Reveal the read role's password with the eye button on its row, once you confirm your own.
  • Use that password to read the database, for reports for example.
  • Read through the same role from the Access menu: Database (read) or pgAdmin.
  • Give a role a new password with Rotate on its row, for example when someone who knew it leaves.

Good to know

  • The read role reads every table, password hashes and API keys included: keep its password as safe as the data.
  • The read role holds at most 5 connections at a time, so a tool cannot take the app's.
  • The write role is the login the app's Odoo runs as; its password is never shown.
  • A Pending role is made at the app's next deployment. With No roles yet, the app connects as the database server's own login.
  • Revealing the read role's password is for the workspace's Maintainers and Admins, in every environment.
  • Rotating the read role is for the workspace's Maintainers and Admins, rotating the write role for its Admins.
  • The passwords stay on the app's server: the platform keeps no copy. A reveal reads it there, and is noted in the app's history; if the server does not answer, it cannot be shown.
  • A rotation is a run of its own on the app's server. A new read password restarts nothing and reaches the app's pgAdmin connections; tools that saved the old one stop connecting until they get the new one. A new write password restarts the app.

URLs and certificates

The addresses the app answers on, with the state of each one's route and certificate.

You can

  • Add one of your domains with Add Custom URL, the domain only, for example shop.example.com; it joins the routes at the next Deploy, Update or Apply Config.
  • Change an address with the pencil until it has been set up; after that, add the new one as another URL and delete the old one.
  • Send browsers from one address to another of the app's with Redirect To in its pencil, for example www.example.com to example.com; it joins the routes at the next Deploy, Update or Apply Config.
  • Check the certificate an address serves now with the magnifier; hover over its outside check to see when it ran and why it failed.
  • From a row's menu, write the app's routes again now with Refresh Route, or run the address's last failed run again with Retry Latest Workflow.
  • Remove an address with Mark for Deletion, at the next Deploy, Update or Apply Config (Restore takes the mark off), or at once with Delete Now.

Good to know

  • Every plan can link your own domains. With White Label and your own DNS provider on the project, its apps also get their starred address under your domain.
  • Under the platform's own domain, a custom address changes only the first name of the starred one.
  • CloudWady makes the DNS record of a domain on one of your DNS providers (Integrations → Domains); otherwise point its DNS at the app's server first.
  • Delete Now also removes the DNS record CloudWady made and the address's certificate; it cannot be undone.
  • The starred address is the app's own: it cannot be changed, marked or deleted.
  • A redirect sends on only what a browser opens: a form sent, a request with a token and a live connection are still answered at the address, so integrations keep working. The starred address cannot redirect.
  • Browsers remember a redirect: after you take one off, a browser that followed it may go on to the other address for a while.
  • Changing addresses takes Developer in development, Developer Plus in staging and Maintainer in production; Delete Now in production takes Admin.
The URLs tab with its certificate provider and the app's address
The URLs tab.

Certificates

Who issues the TLS certificates of every address of this app; Traefik, the router on its server, issues and renews them on its own.

You can

  • Choose the Certificate Provider: Let's Encrypt, the default, or Buypass. You confirm before it changes.
  • Follow each address's certificate, its expiry date and issuer, in the URLs list.

Good to know

  • The change applies at once: Traefik issues the certificate of every address again from the new provider.
  • Until each new certificate is issued, visitors may see a certificate warning.
  • On an app with no address set up yet, the choice applies at its first deployment.
  • You cannot change it while a deployment is queued or running.
  • Changing it takes Developer in development, Developer Plus in staging and Maintainer in production.

Automation

What runs on every deployment of the app, and what happens to it on its own.

Good to know

  • The tab needs a plan with automated deployments; without one, it is locked.
  • Changing it takes Developer in development, Developer Plus in staging and Maintainer in production.
The Automation tab: Automated Installation, and Updates and Backups
The app's Automation tab.

Automated Installation

What each Deploy and Update does with your addons, and the tests it runs on them.

You can

  • Turn on Use Automate Installation to install your addons on a new database and update them on an existing one; the other settings then appear.
  • Take every addon in the app's repositories with All Addons, minus the excluded ones, or list them in Addons, separated by commas.
  • Run Odoo's tests with Run Odoo Tests, narrowed by Odoo Test Tags, for example /module_name,-standard.
  • Measure test coverage with Use Coverage, against an Acceptable Coverage from 0 to 100.
  • Skip demo data with Without Demo, or pull the latest base image even when the server has one with Force Pull Template.

Good to know

  • Saved settings apply at the next Deploy or Update; a new app starts with its environment's defaults.
  • Use Clean DB deletes the database and installs a new one on every Deploy and Update; the Overview and the Build dialog warn while it is on.
  • Clean databases are never allowed in production, and demo data is always left out there.
  • A coverage below the threshold is reported in the setup log; it does not fail the deployment.
  • Changing these settings takes Developer in development, Developer Plus in staging and Maintainer in production.

Updates & Backups

What happens to the app without anyone pressing a button: updates on a push, nightly backups and, outside production, an end date.

You can

  • Stop pushes from updating or deleting this app with Restrict Auto Update: it then changes only when someone runs Build.
  • Back the app up every night with Auto Backup, on by default in production (Automatic backups).
  • Outside production, give the app an end date with Use Deadline and its date; it is on by default for new development apps.
  • Set what a push does for the whole environment in its Settings → Automation, with its update copy policy.

Good to know

  • A change counts from the moment you save it: the next push and the next night's backup read it.
  • Turning on Restrict Auto Update also takes the app off the update queue; rolling the code back turns it on until someone updates the app.
  • By default a push updates apps in development and staging; in development it also deploys them, and creates an app for a branch it has not seen.
  • A branch deleted upstream takes its apps with it only where Auto-Delete is on, by default in development; it never runs in production.
  • Changing this section takes Developer in development, Developer Plus in staging and Maintainer in production.
A production environment's Automation settings
A production environment's Automation settings.

Maintenance mode

Enable Maintenance puts a maintenance page in front of the app: visitors get it, with an HTTP 503 status, instead of Odoo. The page carries your workspace's branding, the app's name, an expected duration and a contact. The app itself keeps running behind it. Disable Maintenance takes the page down.

The platform also shows the page on its own while it changes your data: during Update Modules and while a rollback restores data.

Following a run

Every change you start (and every automatic one) is a run. The app's Operations menu lists its runs, their steps and the changes waiting their turn. Health and operations explains the tabs, what each state means and when you may retry or cancel.

The Operations menu of an app, on its Workflows tab
An app's runs, on the Workflows tab.

One change at a time

An app runs one change at a time. While something runs on it, Build is hidden, and Restart Service, Update Modules and maintenance are refused with a message that names what is running, for example Cannot restart v19-0 while 'a backup' is running. Wait for it to finish, then try again.

When the platform is busy, runs wait for a free slot. A run a person started gets the next free slot before automatic updates, so your change does not wait behind a batch of pushes.

Logs

The app's log files, to follow what it does now or read back what a run did.

You can

  • Follow the end of a file as it grows with Live; stop and resume it with the buttons above the log.
  • Filter by level with the level buttons, which also count the lines of each level.
  • Search the log, and jump between matches with Enter and Shift+Enter.
  • Read the copies the platform saved, such as a deployment's setup log, under Snapshots.
  • Download the full log file from the view options.

Good to know

  • odoo.log is the app's own log, including what its container prints.
  • The other files are the logs of its setup, backups, restores and transfers.
  • A snapshot stays readable after the log file has moved on.
The Logger with its log files on the left and a saved snapshot open
The Logger, showing a saved snapshot.

Who may do what

What you may do on an app depends on your role in the workspace and on the app's environment.

ActionDevelopmentStagingProduction
See the app and its settingsViewerViewerViewer
Build, Retry, Backup, Restart, Update Modules, Apply Config, maintenance, Renew SSL, change settings, install or remove the editorDeveloperDeveloper PlusMaintainer
Delete InstanceDeveloperDeveloper PlusAdmin
Open the app's shell, Odoo shell or log from the Access menuDeveloper PlusDeveloper PlusMaintainer

See Permissions & access for the roles.

Going back

Every change leaves a restore point: the app's code and data just before it. If a change went wrong, roll the app back to the point before it, by its code, its data or both. See Restore points & safe updates.

Was this page helpful?

Your answer helps us prioritize documentation improvements.

Thanks — your feedback helps us improve.