Send us a message and we'll get back to you shortly.
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 that installs Open edX Verawood with Tutor 22; Cubite's 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 lists every release with its Tutor version, and what is new and what breaks in Verawood 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.
These are Tutor's own requirements, from its requirements page 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 |
| 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 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.
Cubite's 1-Click image, available on the DigitalOcean Marketplace, 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.
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.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.admin, and its password is in /root/.digitalocean_password.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.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.
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, two of them rated critical. A patch release within Verawood needs no new Droplet. As root, following the image's README and Tutor's changelog for 22.0.4:
tutor local stop, then rsync -avr /root/.local/share/tutor/ /var/backups/tutor-before-22.0.4/. Keep a copy off the Droplet too./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 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.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.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.tutor --version prints 22.0.4 or a later 22.0.x and, if you use content libraries, searching them in Studio returns results.These steps follow Tutor's installation and local deployment documentation and Docker's install guide for 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.
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.
Set up Docker's apt repository as Docker's Ubuntu install guide 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.
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 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.
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, which cannot load custom plugins.
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.
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.
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 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.
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.
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 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 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, one release at a time.
Start with the logs: tutor local logs --tail=100 -f. These are the problems Tutor's troubleshooting guide covers that a single-server install runs into most, plus two that come with Verawood.2:
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.docker run --rm hello-world must work without sudo; add your user to the docker group (step 3) rather than running Tutor with sudo.tutor local logs --follow caddy.tutor dev stop, tutor local stop and tutor k8s stop, then run your command again with one of them.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.tutor local launch again.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, 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, triaged weekly, or to hello@cubite.io.
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. Cubite is one of the managed options, and its Open edX page 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.
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.