# Install Open edX Verawood with Tutor on one server (2026)

https://cubite.io/blogs/install-open-edx-tutor

**By:** Amir Tadrisi
**Updated:** 2026-11-13

Install the Open edX® platform (Verawood) with Tutor on one Ubuntu 24.04 server, from Cubite's DigitalOcean 1-Click or step by step.

Maintained by Cubite (cubite.io), which runs managed Open edX from $1,260 a month and managed Moodle from $690 a month. Cubite maintains this guide and a [free DigitalOcean 1-Click image](https://marketplace.digitalocean.com/apps/cubite) that installs Open edX Verawood with Tutor 22; [Cubite's managed Open edX](https://cubite.io/services/managed-open-edx) starts at $1,260 a month for teams that would rather not run it.

Supported versions: Tested with Open edX Verawood.2 and Tutor 22.0.4 on Ubuntu 24.04 on November 12, 2026. Verawood is the current Open edX release: Verawood.1 shipped on July 30, 2026, and Tutor 22.0.4 (November 3, 2026) moved to its second tag, Verawood.2. Open edX supports one release at a time, the latest; Willow, the next one, is planned for late February 2027. Cubite's [Open edX release table](https://cubite.io/open-edx/releases) lists every release with its Tutor version, and [what is new and what breaks in Verawood](https://cubite.io/blogs/open-edx-verawood-features) covers the release itself.

Short answer (updated November 12, 2026): to install Open edX Verawood on one server, take an Ubuntu 24.04 server with at least 4 GB of RAM, 2 CPUs and 8 GB of disk (Tutor recommends 8 GB, 4 CPUs and 25 GB), point an A record and a wildcard CNAME record at it, install Docker with Compose v2, install Tutor 22 with pip in a Python virtual environment, then run tutor local launch and create an admin with tutor local do createuser. The fast path is Cubite's free DigitalOcean 1-Click, which does the same from a setup wizard at your first login.

## What you need: Open edX server requirements for Tutor 22

These are Tutor's own requirements, from its [requirements page](https://docs.tutor.edly.io/gettingstarted/requirements.html) and, for Python, its 22.0.0 changelog, which raised the minimum to 3.10 (both read on November 12, 2026), next to the choices this guide makes:

| Requirement | Tutor's minimum | This guide |
| --- | --- | --- |
| Server | Any 64-bit UNIX-based OS, AMD64 or ARM64 | Ubuntu 24.04 LTS |
| Memory | 4 GB | 8 GB, as Tutor recommends |
| CPU | 2 | 4, as Tutor recommends |
| Disk | 8 GB | 25 GB, as Tutor recommends |
| Docker | 24.0.5 or later, with BuildKit 0.11 or later | Docker Engine from Docker's apt repository |
| Docker Compose | 2.0.0 or later | The Compose plugin from Docker's apt repository |
| Python, for a pip install | 3.10 or later for Tutor 22 | Ubuntu 24.04's Python 3.12, in a virtual environment |
| Open ports | 80 and 443 | 80 and 443, plus 22 for SSH |
| DNS | An A record for the LMS domain and a CNAME record for its subdomains | learn.example.com and *.learn.example.com |
| Email | Tutor's built-in SMTP server, which lacks DKIM and SPF | An external SMTP provider |

Open edX needs at least 4 GB of RAM, in particular for the SQL migrations of the first launch, as Tutor's [troubleshooting guide](https://docs.tutor.edly.io/troubleshooting.html) puts it. Cubite tests its 1-Click on 8 GB and 4 vCPUs, Tutor's recommended size. To size a server for real traffic, count concurrent learners, not accounts: see [Open edX sizing for 1,000 or 2,000 concurrent learners](https://cubite.io/blogs/open-edx-sizing-concurrent-learners).

## Fast path: Cubite's 1-Click for the Open edX platform on DigitalOcean

Cubite's 1-Click image, [available on the DigitalOcean Marketplace](https://marketplace.digitalocean.com/apps/cubite), installs the Open edX platform (Verawood) with Tutor 22 on Ubuntu 24.04. The image is free; you pay DigitalOcean for the Droplet. It bakes in no passwords, keys or admin account: each Droplet generates its own at setup, nothing in the image reports back to Cubite, a firewall allows only SSH, HTTP and HTTPS, and Ubuntu security updates install automatically. Cubite builds and supports the image, and DigitalOcean does not build or support it; the code that builds it is public at [github.com/amirtds/cubite-do-marketplace](https://github.com/amirtds/cubite-do-marketplace).

1. Create the Droplet. Use the [Deploy to DigitalOcean](https://marketplace.digitalocean.com/apps/cubite?action=deploy) link, which opens DigitalOcean's page for creating a Droplet with the 1-Click image already selected, and choose 8 GB of memory and 4 vCPUs, the size Cubite tests. On 4 GB with 2 vCPUs, setup adds a 2 GB swap file and runs slower, and that size is not tested; setup stops on smaller Droplets, because the database migrations fail with less than 4 GB of memory.
2. Point a domain at it. At your DNS provider, create an A record for your LMS domain, for example learn.example.com, with the Droplet's public IPv4 address, and a CNAME record from *.learn.example.com to learn.example.com. The wildcard covers Studio (studio.), the learner apps (apps.) and search (meilisearch.). If your DNS provider can proxy traffic, set both records to DNS only so that Let's Encrypt can reach the Droplet, and delete any AAAA record for these names unless it points at the Droplet's own IPv6 address.
3. Log in as root and follow the wizard: ssh root@your_droplet_public_ipv4. The setup wizard starts on its own. It waits for the first boot to finish downloading the Open edX images, asks for your LMS domain, platform name and admin email, checks your DNS records, generates this Droplet's passwords and keys, starts the platform with HTTPS certificates from Let's Encrypt and creates your admin account. Setup takes up to an hour on an 8 GB Droplet, most of it database setup. If you stop it, run openedx-setup to continue.
4. Open the platform. The LMS is at https://learn.example.com and Studio at https://studio.learn.example.com. The admin user is admin, and its password is in /root/.digitalocean_password.
5. Set up email. DigitalOcean [blocks SMTP ports 25, 465 and 587](https://docs.digitalocean.com/support/why-is-smtp-blocked/) on Droplets, so account activation and password reset emails need an external SMTP provider on another port: tutor config save --set RUN_SMTP=false --set SMTP_HOST=smtp.example.com --set SMTP_PORT=2525 --set SMTP_USERNAME=... --set SMTP_PASSWORD=... --set SMTP_USE_TLS=true, then tutor local launch -I.
6. Check the Tutor version. Run tutor --version. If it prints 22.0.2, move the Droplet to Tutor 22.0.4 with the steps below.

The 1-Click runs Tutor as root on purpose: on a single-purpose Droplet, the docker group would grant the same rights. tutor local status lists the containers, tutor local logs -f lms follows the LMS log, and tutor local stop, then tutor local start -d, restart the platform. Tutor's configuration, including this Droplet's passwords and keys, is in /root/.local/share/tutor/config.yml: keep a backup of it.

### Already running the 1-Click? Move it to Tutor 22.0.4 in place

A Droplet whose tutor --version prints 22.0.2 runs Tutor 22.0.2 with Cubite's patched openedx image, which adds three upstream security fixes to Verawood.1. Tutor 22.0.4, released on November 3, 2026, moves the platform to the release/verawood.2 tag, which carries those three fixes and the fixes for the five [security advisories the Open edX platform published on October 29, 2026](https://github.com/openedx/openedx-platform/security/advisories), two of them rated critical. A patch release within Verawood needs no new Droplet. As root, following the image's [README](https://github.com/amirtds/cubite-do-marketplace) and Tutor's changelog for 22.0.4:

1. Back up the Tutor root: tutor local stop, then rsync -avr /root/.local/share/tutor/ /var/backups/tutor-before-22.0.4/. Keep a copy off the Droplet too.
2. Upgrade Tutor and its plugins within Tutor 22: /opt/tutor/venv/bin/pip install --upgrade --upgrade-strategy eager "tutor[full]>=22.0.4,<23.0.0". Keep --upgrade-strategy eager: without it, pip keeps every plugin that still satisfies tutor[full], and [Tutor's changelog](https://github.com/overhangio/tutor/blob/release/CHANGELOG.md) for 22.0.4 says to upgrade tutor-mfe too, because library search in Studio needs an MFE image built from Verawood.2, which tutor-mfe 22.1.2 and later build.
3. Run openedx-image-check. It sees that Tutor now builds its own image from a later Verawood tag, moves the Droplet back to Tutor's openedx image and disables the cubitefixes plugin.
4. Run tutor local launch -I. It starts the platform on Tutor 22.0.4's images, runs the migrations and populates the separate Studio library search index that Verawood.2 adds.
5. Check: tutor --version prints 22.0.4 or a later 22.0.x and, if you use content libraries, searching them in Studio returns results.

## Manual path: install Open edX with Tutor on Ubuntu 24.04, step by step

These steps follow Tutor's [installation](https://docs.tutor.edly.io/gettingstarted/installation.html) and [local deployment](https://docs.tutor.edly.io/local.html) documentation and Docker's [install guide for Ubuntu](https://docs.docker.com/engine/install/ubuntu/), read on November 12, 2026. Run them as a regular user with sudo rights, not as root: Tutor warns when it runs as root. Replace learn.example.com with your own domain throughout.

### Step 1: Create the server and the DNS records

Create an Ubuntu 24.04 server with a public IP address, 8 GB of memory, 4 CPUs and 25 GB of disk. Then create the two DNS records Tutor's requirements page shows: an A record for learn.example.com with the server's IP address, and a CNAME record from *.learn.example.com to learn.example.com. By default Studio runs at studio.learn.example.com, the learner apps (micro-frontends) at apps.learn.example.com and search at meilisearch.learn.example.com, so the wildcard record covers them all. Tutor's HTTPS certificates need the records to point at the server.

### Step 2: Install Docker Engine and Docker Compose

Set up Docker's apt repository as Docker's [Ubuntu install guide](https://docs.docker.com/engine/install/ubuntu/) shows; it first has you remove unofficial packages such as docker.io, which may conflict. Then install Docker Engine with the Compose plugin and check it: sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin, then sudo docker run hello-world. docker version and docker compose version should show Docker 24.0.5 or later and Compose 2.0.0 or later, Tutor's minimums.

### Step 3: Let your user run Docker

Tutor's troubleshooting guide says not to run Docker as root or with sudo, but to add your user to the docker group: sudo usermod -aG docker $USER, then log out and back in (Docker's [post-install guide](https://docs.docker.com/engine/install/linux-postinstall/) covers creating the group if your system lacks it). Docker warns that the docker group grants root-level privileges, so add only the user that runs Tutor. Before you go on, this must work without sudo: docker run --rm hello-world.

### Step 4: Install Tutor 22 in a Python virtual environment

Tutor recommends installing it in a Python virtual environment, and on Ubuntu 24.04 the venv module comes in the python3-venv package. Install Python, pip, venv and the libyaml headers Tutor asks for, then create and activate the environment: sudo apt install python3 python3-pip python3-venv libyaml-dev, python3 -m venv ~/tutor-env, source ~/tutor-env/bin/activate.

Then install Tutor 22, the major version for Verawood, with every official plugin: pip install "tutor[full]>=22.0.0,<23.0.0". This is the command Tutor's documentation gives for Verawood: it installs the newest Tutor 22 release (22.0.4 as of November 12, 2026) and never Tutor 23, which Willow will need. tutor --version should print tutor, version 22.0.4 or a later 22.0.x. Activate the environment again with source ~/tutor-env/bin/activate whenever you log in to run Tutor. Tutor also publishes a pre-compiled binary on [its releases page](https://github.com/overhangio/tutor/releases), which cannot load custom plugins.

### Step 5: Configure and launch the platform

Tutor 22 enables only its mfe and indigo plugins by default; for discussion forums, as on the 1-Click, run tutor plugins enable forum first. Then run tutor local launch. Tutor asks whether this is a production platform (answer y), for the LMS domain (learn.example.com), the Studio domain (studio.learn.example.com), the platform name, a public contact email, the default language and whether to turn on HTTPS (answer y). It saves the answers, with freshly generated passwords, in config.yml in its project root, ~/.local/share/tutor on Linux (tutor config printroot prints it). Then it downloads the Docker images, runs the database migrations and starts the platform, and Caddy, Tutor's web server, gets HTTPS certificates from Let's Encrypt.

To script it instead, set the same values and launch without questions: tutor config save --set LMS_HOST=learn.example.com --set CMS_HOST=studio.learn.example.com --set ENABLE_HTTPS=true --set PLATFORM_NAME="Acme Learning" --set CONTACT_EMAIL=admin@example.com, then tutor local launch -I.

Tutor's quickstart says the whole procedure should take less than 10 minutes on a server with good bandwidth. Budget more for the first launch: in Cubite's tests of its 1-Click on an 8 GB, 4 vCPU Droplet, the first setup took 40 minutes on November 12, 2026 and up to an hour in earlier tests, most of it database setup. A dropped SSH connection can stop a launch in the middle of the migrations (the 1-Click's wizard runs the launch in a session of its own for that reason), so run it inside tmux or screen.

### Step 6: Create your admin account

Tutor creates no user for you. Create a staff superuser, and set its password when asked: tutor local do createuser --staff --superuser yourusername you@example.com. Sign in at https://learn.example.com and open Studio at https://studio.learn.example.com. To see a course straight away, import the Open edX demo course: tutor local do importdemocourse.

### Step 7: Set up email

Tutor's built-in SMTP server does not implement DKIM or SPF, so its mail may be flagged as spam. Turn it off and use your email provider's SMTP server, as Tutor's [configuration guide](https://docs.tutor.edly.io/configuration.html) shows: tutor config save --set RUN_SMTP=false --set SMTP_HOST=smtp.example.com --set SMTP_PORT=587 --set SMTP_USE_SSL=false --set SMTP_USE_TLS=true --set SMTP_USERNAME=you@example.com --set SMTP_PASSWORD='yourpassword', then tutor local launch -I. On DigitalOcean, which blocks SMTP ports 25, 465 and 587 on Droplets, use another port your provider supports. Tutor's guide also shows how to send a test email from the LMS shell.

### Step 8: Turn on the firewall

Ubuntu's ufw firewall is off by default. Allow SSH before you turn it on, then HTTP and HTTPS: sudo ufw allow 22, sudo ufw allow 80, sudo ufw allow 443, sudo ufw enable. Docker's install guide warns that ports a container publishes bypass ufw rules. With Tutor's local deployment, Caddy publishes 80 and 443, while MySQL, MongoDB and Redis stay on Tutor's internal Docker network; Meilisearch is reached through Caddy at meilisearch.learn.example.com, where every request but its health check needs one of its API keys.

### Step 9: Back up and keep it updated

Tutor keeps all of a platform's data in one folder, its project root. To back it up, stop the platform and copy that folder somewhere safe, as Tutor's [backup guide](https://docs.tutor.edly.io/sysadmin/datamigration.html) shows: tutor local stop, then sudo rsync -avr "$(tutor config printroot)/" /var/backups/tutor/, then tutor local start -d. Keep a copy off the server. The same guide gives commands for MySQL and MongoDB dumps.

For a Tutor 22 patch release, read [Tutor's changelog](https://github.com/overhangio/tutor/blob/release/CHANGELOG.md) first, back up, then upgrade Tutor together with its plugins, and launch again. For 22.0.4, whose changelog says to upgrade tutor-mfe too, that is pip install --upgrade --upgrade-strategy eager "tutor[full]>=22.0.4,<23.0.0", then tutor local launch. A new named release, such as Willow on Tutor 23, cannot be skipped, and Tutor does not support downgrading: follow [the Open edX upgrade runbook](https://cubite.io/blogs/upgrade-open-edx-with-tutor), one release at a time.

## Troubleshooting an Open edX install with Tutor

Start with the logs: tutor local logs --tail=100 -f. These are the problems Tutor's [troubleshooting guide](https://docs.tutor.edly.io/troubleshooting.html) covers that a single-server install runs into most, plus two that come with Verawood.2:

- "Running migrations... Killed!" or "Command failed with status 137": the server ran out of memory. Open edX needs at least 4 GB of RAM for its SQL migrations; add memory or swap. On a new install whose migrations were killed halfway, Tutor's fix is to delete the MySQL data and launch again: tutor local stop, sudo rm -rf "$(tutor config printroot)/data/mysql", tutor local launch. That erases all data: never run it on a platform in use.
- "Cannot start service caddy: driver failed programming external connectivity": another web server, such as Apache or Nginx, already uses port 80 or 443. Stop it, or run Open edX behind it as Tutor's web proxy tutorial shows.
- "Couldn't connect to docker daemon": a Docker permission problem. docker run --rm hello-world must work without sudo; add your user to the docker group (step 3) rather than running Tutor with sudo.
- No HTTPS certificate: the A and wildcard CNAME records must point at the server, unproxied, and no AAAA record may point elsewhere, so that Let's Encrypt can reach it. Check Caddy's log with tutor local logs --follow caddy.
- Emails never arrive: Tutor's built-in SMTP server lacks DKIM and SPF, and DigitalOcean blocks SMTP ports 25, 465 and 587. Use an external SMTP provider (step 7).
- "Can't connect to MySQL server on 'mysql:3306' (111)": usually two Tutor platforms running at once. Stop them all with tutor dev stop, tutor local stop and tutor k8s stop, then run your command again with one of them.
- The disk fills up: Docker keeps old images and build cache. Check with docker system df; then, with the platform started, remove unused objects with docker system prune -a. Do not add --volumes unless you mean to delete unused volumes, which may hold data.
- Library search in Studio returns no results after the move to Tutor 22.0.4: the MFE image predates Verawood.2. Upgrade tutor-mfe to 22.1.2 or later, then run tutor local launch again.
- Scripts in uploaded HTML or SVG course files, JSInput problems included, stop running: since the fix for the critical stored XSS advisory GHSA-c6xg-fh3c-vvhh, which Verawood.2 includes, course assets are served with a sandbox policy. The course waffle flag course_assets.allow_unsafe_asset_rendering turns that off for one course, and reopens the vulnerability for it.

Still stuck? Ask on the [Open edX forum](https://discuss.openedx.org), with the unedited logs and the tutor tag, as Tutor's guide asks. Problems with the 1-Click installer itself go to [the image's GitHub issues](https://github.com/amirtds/cubite-do-marketplace/issues), triaged weekly, or to hello@cubite.io.

## Run it yourself, or have it managed

With the 1-Click or a manual install, you apply the updates, keep the backups, set up email and carry out each named-release upgrade, and that work is part of the cost of self-hosting: see [Open edX hosting in 2026: provider prices vs self-hosting with Tutor](https://cubite.io/blogs/open-edx-hosting). Cubite is one of the managed options, and [its Open edX page](https://cubite.io/open-edx) describes how it runs the platform.

## Would rather not run it? Managed Open edX from $1,260 a month

Cubite runs managed Open edX from $1,260 a month for up to 1,000 concurrent learners. Every managed tier includes named-release upgrades, each rehearsed on a UAT environment before production, daily backups and a quarterly restore rehearsal, and SSO (SAML / OIDC) implementation.

[Book a 30-minute call](https://cubite.io/go/book?src=install-open-edx)

## Installing Open edX with Tutor: common questions

### Is there a one-click installer for Open edX?

Yes. Cubite's free DigitalOcean 1-Click installs the Open edX platform (Verawood) with Tutor 22 on Ubuntu 24.04 and finishes setup from a wizard at your first login. Cubite maintains it and runs managed Open edX from $1,260 a month for teams that would rather not run the server.

### What are the minimum server requirements for Open edX with Tutor?

Tutor's documentation gives a minimum of 4 GB of RAM, 2 CPUs and 8 GB of disk and recommends 8 GB of RAM, 4 CPUs and 25 GB of disk, with Docker 24.0.5 or later, Docker Compose 2.0.0 or later and ports 80 and 443 open. A pip install of Tutor 22 needs Python 3.10 or later. The SQL migrations of the first launch need at least 4 GB of RAM.

### How long does it take to install Open edX?

Tutor's quickstart says less than 10 minutes on a server with good bandwidth. In Cubite's tests of its 1-Click on an 8 GB, 4 vCPU DigitalOcean Droplet, the first setup took 40 minutes on November 12, 2026 and up to an hour in earlier tests, most of it database setup.

### How do I upgrade a 1-Click Droplet from Tutor 22.0.2 to 22.0.4?

In place, as root: back up the Tutor root, upgrade Tutor and its plugins within Tutor 22 with the Droplet's own pip in /opt/tutor/venv, run openedx-image-check, then run tutor local launch -I. Tutor 22.0.4 runs the release/verawood.2 tag, which carries the security fixes the Open edX platform published on October 29, 2026, and the check moves the Droplet from Cubite's patched image back to Tutor's own. The commands are in the in-place section above.

### Can I upgrade the 2021 Cubite 1-Click (Open edX Lilac) in place?

No. The 2021 image installed Open edX Lilac on Ubuntu 20.04 without Tutor, so it cannot be upgraded in place to the Tutor-based image. Start a new Droplet from the current 1-Click and move your courses with Studio's export and import. A course export carries the content, structure, pages, assets and settings, but not user data, course team data, discussion data or certificates, so moving learners is a separate migration.

### What is the next Open edX release, and will the 1-Click follow it?

Willow. The Build-Test-Release working group confirmed on October 5, 2026 that Willow will be cut in early January 2027 and released in late February 2027, and under Tutor's versioning it will run on Tutor 23. Each named Open edX release gets a new 1-Click image. An existing Droplet moves to Willow by a named-release upgrade, which Tutor does not let you undo, so back up and rehearse it first.

### Can Cubite run a platform I started from the 1-Click?

Yes, on request, as managed Open edX in your own DigitalOcean account. On Lean ($1,260 a month) and Resilient ($1,850 a month) the tier price is the same and DigitalOcean bills you for the servers directly, in place of the cloud resources those tiers otherwise include; on Scale (from $3,400 a month) cloud infrastructure is billed at cost either way. Cubite specifies and provisions the sizing, and named-release upgrades are included in every tier, each rehearsed on a UAT environment before production.

### Who supports the 1-Click image?

Cubite builds and supports it; DigitalOcean does not build or support it. Report installer problems as issues on the image's GitHub repository, amirtds/cubite-do-marketplace (triaged weekly), or email hello@cubite.io. Questions about using the Open edX platform belong on the Open edX forum, discuss.openedx.org.

Tutor, Docker, Ubuntu, DigitalOcean and Open edX facts in this guide were checked against their own documentation and release pages on November 12, 2026.

Open edX is a registered trademark of edX LLC. All Rights Reserved.
