Skip to content

Drupal on a VPS

CMS for complex websites

Author
Drupal community
License
GPL-2.0-or-later
Version
11.4.8

The script is free · VPS from $3.19 per month · installs in about 3 minutes

Install over SSH

root@vps:~# command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh; P=$(openssl rand -hex 16); echo "$P" > /root/drupal-db-password && chmod 600 /root/drupal-db-password && docker network create drupal && docker run -d --name drupal-db --network drupal --restart unless-stopped -e POSTGRES_DB=drupal -e POSTGRES_USER=drupal -e POSTGRES_PASSWORD=$P -v drupal-db:/var/lib/postgresql/data postgres:17 && docker run -d --name drupal --network drupal --restart unless-stopped -p 80:80 -v drupal-modules:/var/www/html/modules -v drupal-profiles:/var/www/html/profiles -v drupal-themes:/var/www/html/themes -v drupal-sites:/var/www/html/sites drupal:11

  • SystemUbuntu 24.04 · x86_64ok
  • Sourcedrupal.orgok
  • Version11.4.8ok
  • Port80/tcplisten

✓ Drupal 11.4.8 installed · about 3 minutes

root@vps:~#

Install command from the library. Output is shortened and may differ on your server.

What it is

  • CMS
  • PHP
  • PostgreSQL
  • Headless

Drupal is a CMS for complex sites: portals, government sites, universities and media. Flexible content types, taxonomies, roles and Views are configured without code.

Drupal is valued for its security and scalability, as well as the ability to use it as a headless backend with JSON:API.

The command runs the official Drupal 11 and PostgreSQL images. The database password is saved to /root/drupal-db-password.

  • Flexible content types and fields
  • Views for lists and queries without code
  • Roles and granular permissions
  • JSON:API for headless
  • Multilingual support in core

Recommended plan

For Drupal: at least 1 vCPU, 3 GB RAM and 30 GB NVMe.

Minimum to run
1 vCPU · 1 GB RAM · 10 GB disk
Systems
Ubuntu 22.04 · Ubuntu 24.04 · Debian 12

How to install

Three steps in the bot or one command over SSH; installation takes about 3 minutes.

  1. 01

    Choose a plan in the bot

    Open @ExpressHost_bot and pay for a VPS. The server will be ready in about 60 seconds.

  2. 02

    Add Drupal

    At the “Add-ons” step pick the script from the library, or run it later: Server settings → Scripts.

  3. 03

    Open http://server-IP and complete the installer

    The bot will send the server address and login details to the chat.

Manually over SSH

Connect to the server as root and run the command. Supported systems: Ubuntu 22.04, Ubuntu 24.04, Debian 12.

Install command
command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh; P=$(openssl rand -hex 16); echo "$P" > /root/drupal-db-password && chmod 600 /root/drupal-db-password && docker network create drupal && docker run -d --name drupal-db --network drupal --restart unless-stopped -e POSTGRES_DB=drupal -e POSTGRES_USER=drupal -e POSTGRES_PASSWORD=$P -v drupal-db:/var/lib/postgresql/data postgres:17 && docker run -d --name drupal --network drupal --restart unless-stopped -p 80:80 -v drupal-modules:/var/www/html/modules -v drupal-profiles:/var/www/html/profiles -v drupal-themes:/var/www/html/themes -v drupal-sites:/var/www/html/sites drupal:11

Ports

Drupal ports
PortProtocolPurpose
80tcpSite and admin panel (HTTP)

After installation

  1. 1.Open http://server-IP and complete the installer
  2. 2.At the database step, choose PostgreSQL: database and user drupal, password in /root/drupal-db-password, and under "Advanced options" host drupal-db
  3. 3.Create the site administrator

Drupal FAQ

Didn’t find an answer? Message @ExpressHost_SupportBot.

Drupal or WordPress?

WordPress is simpler for a blog or a small site. Drupal is chosen for complex content structures, roles and large portals.

How do I update Drupal?

Minor updates: docker pull drupal:11 and re-create the container, then run database updates via /update.php.

Where is the data stored?

Settings and uploads are in the drupal-sites volume, modules and themes in their own volumes, the database in drupal-db.

Drupal installs at checkout — in the bot.