Menu

Self-hostingVersion 0.9.0

Running OpenTodo on Dokploy

OpenTodo is one container with one named volume and no required settings. The Dokploy template fills in the domain and generates a setup token for the owner account.

On this page

Install#

OpenTodo's template has not been submitted to Dokploy's catalogue yet. Until it is listed, use one of these two ways:

  • Templates base URL. In a project, create a service from a Template. Dokploy's template dialog accepts another base URL instead of https://templates.dokploy.com. Enter https://raw.githubusercontent.com/pixari/opentodo/main/deploy/dokploy, pick OpenTodo and create it.
  • By hand. Choose Create Service → Compose and paste docker-compose.yml as the compose file. Under Environment, add the variables from template.toml, with at least 16 random letters and digits for OPENTODO_SETUP_TOKEN. Under Domains, add a domain for the service opentodo on port 8080.

Then click Deploy.

First visit#

Open the domain from the service's Domains tab. The first visitor creates the owner account, and the setup screen asks for the setup token. You find the token in the service's Environment tab as OPENTODO_SETUP_TOKEN. After that, sign-up is closed and the owner invites people.

Settings#

Variable Template value What it does
OPENTODO_SETUP_TOKEN generated, 32 characters Asked for when the owner account is created, so a stranger cannot claim a new server first.
OPENTODO_BASE_URL empty The https address people open. Leave it empty while the domain is plain http (see below).
OPENTODO_ALLOW_SIGNUP false true lets anyone who can reach the server create an account.
OPENTODO_TRUSTED_PROXIES empty Set it to cloudflare when the domain is proxied by Cloudflare.

Change them in the Environment tab and redeploy. Other OPENTODO_* variables from the configuration table take effect when you add them there and to the environment list of the compose file.

https and your own domain#

The domain the template creates is a generated *.sslip.io name served over plain http. On it, tasks, projects, sync, sharing and attachments work. Installing the app on a phone, working offline, push notifications, passkeys and end-to-end encryption need https, because browsers only allow them there.

Keep OPENTODO_BASE_URL empty on plain http. An https:// value there makes the session cookie secure-only, so the browser drops it and you cannot sign in.

For https, point your own domain at the server and edit the domain in the Domains tab: set the host to your domain, turn HTTPS on and choose Let's Encrypt as the certificate. Then set OPENTODO_BASE_URL to https:// followed by your domain, for example https://todo.example.com, and redeploy. More on proxies and https in Running with Docker.

Updates and backups#

The template uses the stable image, which every release moves, with pull_policy: always, so Deploy (or redeploy) fetches the current release, and migrations run on start. There are no down-migrations, so back up first. To stay on one release line, change the image to ghcr.io/pixari/opentodo:0.6 (or pin one version, 0.6.1) in the compose file.

Everything OpenTodo stores (the database, attachments and its own backups) is in the named volume opentodo-data. Back it up with Dokploy's Volume Backups to an S3 destination, or turn on scheduled backups in OpenTodo's Settings → Server. See Backups.

Troubleshooting#

  • Sign-in does not stick: OPENTODO_BASE_URL starts with https:// but the domain is plain http. Empty it, or turn on HTTPS for the domain, then redeploy.
  • The setup screen says the token is wrong: copy OPENTODO_SETUP_TOKEN from the Environment tab again. A token shorter than 16 characters stops the container on start (its log says so).

Edit this page on GitHub