DeployManage, server management for any cloud

Drupal Deployment and Drupal VPS Hosting With Zero Downtime Releases on Your Own Servers

Connect a cloud account, launch a PHP 8.1 to 8.4 server with Nginx, MySQL, MariaDB or PostgreSQL, Redis and Supervisor, and ship every Drupal site from git as an atomic release. Composer and drush run in the new release, sites/default/files stays in a shared folder, and traffic only moves when every step has passed.

One-time demo, no credit card required.

Drupal, Pantheon, Acquia, Laravel Forge and DigitalOcean figures read from their own docs and pricing pages in October 2026.

Servers 5 online
New server
Servers
Sites
Deployments
Databases
Mailboxes
Recipes
Activity
Server Provider Load
web-01.prod
fsn1
Hetzner
32%
web-02.prod
fsn1
Hetzner
47%
db-01.prod
fra1
DigitalOcean
18%
worker-01
eu-central-1
AWS
61%
mail-01
gra
OVHcloud
9%
Deploy to web-01.prod Live
  • Pull main from GitHub
  • Build and migrate
  • Switch release, zero downtime
Finished in 11.3 s
The short answer

To deploy Drupal without downtime, build each release in a fresh directory: run composer install --no-dev, link the shared settings file and sites/default/files, then run drush deploy and switch a symlink so the web server starts serving the new code in one step. DeployManage runs that sequence on servers you own for every client site, with seats and an audit log. If you host one small Drupal site, Pantheon Basic at $55 a month or Laravel Forge at $12 is cheaper. Agencies with ten or more client sites usually pay far less on their own servers than on per site plans.

Two developers at an agency office discussing a client Drupal release next to a whiteboard deployment sketch

Where Drupal deploys usually break

Most broken Drupal deploys come from running the right commands in the live directory. A composer install over the code that is serving requests leaves a half replaced vendor folder for several seconds, and a git pull that deletes a module file while a page is rendering produces a white screen until the cache is rebuilt.

The second classic failure is the files folder. sites/default/files holds every upload, image style and aggregated CSS file, so a deploy that clones a fresh copy of the repository without linking that folder back makes every image on the site return 404. The sequence below keeps files, private files and the settings file outside the release, so a new release never starts empty.

What DeployManage does for a Drupal site

A PHP server ready for Drupal 10 and 11

Pick DigitalOcean or Hetzner and the server is created through their API, or run one install command on AWS, Vultr, Linode or any Ubuntu VPS. You get Nginx, PHP-FPM 8.1 to 8.4, MySQL 8, MariaDB or PostgreSQL 16, Composer, Redis and Supervisor, with every port closed except 22, 80 and 443.

Atomic releases from git

Every push to your branch clones the commit into a new releases directory, runs your deploy script inside it and only then moves the current symlink. Nginx serves the web directory you choose (web/ for drupal/recommended-project), so a failed composer step never touches the live site.

Your deploy script, in plain bash

Write the Drupal steps you already trust: composer install, the links to shared files and settings, drush deploy. The script runs as the deploy user with DM_SITE_DIR and DM_RELEASE_DIR set, so each shared folder is one line.

Drupal cron from the panel

Add drush cron as a scheduled job per site, every five or fifteen minutes, with the same PHP version as the site. No crontab edits over SSH, and turning off the automated cron module saves page requests from doing that work.

Queue runners under Supervisor

Sites that push work into Drupal queues (feeds imports, search indexing, mail) can run drush queue:run as a daemon. Supervisor keeps it alive and restarts it after a deploy so it picks up the new code.

The last five releases kept on disk

Old releases are not deleted on deploy. A git revert and push builds a clean release, and because the previous release is still on the server, pointing current back at it is a one line fix while you prepare the proper patch.

Free SSL and a firewall

Let's Encrypt certificates are issued and renewed for each domain, and the firewall rules are part of the server record, so a client security review can see exactly what is open.

GitHub, GitLab and Bitbucket repositories

Point a site at a repository on any of the three hosts. Public repositories clone over HTTPS, private ones over SSH with the server key added to your repository, so no personal token sits on the server.

Seats and an audit log

Growth includes 10 team members and Business is unlimited. Every deploy, environment change and SSH key is recorded with who did it, which matters when an agency runs Drupal sites for paying clients.

How it works

  1. 1
    Connect a cloud account

    Paste a DigitalOcean or Hetzner API token and DeployManage creates the server, or run the install command on an AWS, Vultr, Linode or other VPS. Servers stay in your account and on your provider's invoice.

  2. 2
    Add the Drupal site

    Point it at your GitHub, GitLab or Bitbucket repository and branch, set the web directory to /web, choose PHP 8.3 or 8.4 for Drupal 11 and create the database from the panel.

  3. 3
    Write the deploy script once

    Replace the default Laravel lines with composer install, the links to shared files and settings, and drush deploy. Turn on zero downtime releases and quick deploy on push.

  4. 4
    Push and watch the release go live

    Each push builds a new release, runs your script and switches traffic only on success. Add drush cron as a scheduled job and the site is in production.

Drupal hosting and deployment options compared

Prices from each vendor's own pricing page, read in October 2026, in USD. The honest headline: Laravel Forge is the cheapest panel for a Drupal site on a VPS, and Pantheon removes the server entirely for one site at $55 a month. DeployManage is for agencies and teams that run many Drupal sites on their own servers and want atomic releases across several servers, seats and an audit log on one flat plan.

swipe to see all columns →

What you are comparing DeployManage Laravel Forge Pantheon Acquia
How you pay Starter $59, Growth $129, Business $299 a month, servers billed by your cloud Hobby $12, Growth $19, Business $39 a month, servers billed by your cloud Per site: Basic $55, Performance Small $200 to XL $1,150 a month; Gold workspace $500 a month No public price list, sold by quote
Where the site runs Your own servers on DigitalOcean, Hetzner, AWS, Vultr, Linode or any Ubuntu VPS Your own servers Pantheon containers Acquia cloud
Zero downtime deploys Yes on Growth and Business, symlink releases Yes on new sites, one server per site Code pushed through Dev, Test and Live environments Platform deploy workflow
Same release to several servers Yes on Growth and Business Needs Envoyer at $10 to $50 more Platform load balances containers on Performance plans Platform managed
Traffic limits None from us, your server is the limit None from Forge 25K visits on Basic to 300K on XL a month, overage rate $40 per 10K visits Set in the quote
SSH and local disk Full root SSH, persistent disk Full SSH No root access, files in Pantheon's file system Managed access
Team seats 2 on Starter, 10 on Growth, unlimited on Business Varies by plan Unlimited members in a workspace Set in the quote
Multidev or preview environments Run a staging server or site Staging sites by hand Multidev with the $500 Gold workspace Included in higher tiers

Who it's for

An agency hosting client Drupal sites

Ten to forty client sites, mostly marketing and association sites under 25,000 visits a month, each paying a per site plan today. Two or three servers the agency owns can host them all, with each client in its own site, database and database user.

A university department or nonprofit with several sites

A web team that runs a main site plus a handful of program and event sites on Drupal, wants every developer to deploy without sharing a root password, and needs a record of who changed what for its IT review.

A company that must stay on AWS or its own cloud

Security review, an AWS contract or credits mean the site has to run in the company's own account. DeployManage provisions nothing outside it and keeps the servers, data and invoices where the auditors expect them.

A busy Drupal Commerce or membership site

Logged in traffic bypasses the page cache, so PHP workers and memory matter more than visit counts. A dedicated 8 or 16 GB server with Redis gives steady capacity without moving up a per site tier priced on visits.

How do you deploy Drupal to production?

Deploy Drupal by building each release from git in a new directory, installing vendors with composer, linking the files folder and settings that must persist, running drush deploy against the production database and then switching traffic to the new directory in one step. Exporting configuration in development and importing it in production is what makes this repeatable: the code and the config travel together through git, and the database keeps only content.

On a DeployManage zero downtime site the panel clones the commit into releases/<timestamp>, sets DM_SITE_DIR and DM_RELEASE_DIR and runs your script inside the release. A typical script for a project built on drupal/recommended-project looks like this:

composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
mkdir -p "$DM_SITE_DIR/shared/files" "$DM_SITE_DIR/shared/private"
ln -sfn "$DM_SITE_DIR/shared/files" web/sites/default/files
ln -sfn "$DM_SITE_DIR/shared/settings.local.php" web/sites/default/settings.local.php
vendor/bin/drush deploy

The settings.local.php file holds the database credentials, the hash salt and the trusted host patterns, and it never enters git; uncomment the include of settings.local.php at the end of the stock settings.php once and commit that. Put the private files path outside the web directory (the shared/private folder above) and set file_private_path to it. When the script exits with code 0, the panel moves the current symlink, Nginx keeps serving web/ from current, and PHP-FPM picks up the new code on the next request.

What does drush deploy do?

drush deploy runs the standard post deploy sequence in the right order: database updates (updatedb), a cache rebuild, configuration import (config:import), another cache rebuild and finally any deploy hooks your modules define. It replaced the four or five separate drush commands that older deploy scripts chained together, and it fails loudly if any step fails, which is exactly what you want inside a release that has not gone live yet.

Because drush deploy writes to the shared production database, schema updates take effect a few seconds before the symlink moves. For ordinary releases that is harmless. For a release with a heavy update hook (a field type change on a table with millions of rows, for example), put the site in maintenance mode for that one deploy with drush state:set system.maintenance_mode 1 before updatedb and set it back to 0 after the switch. Most weekly releases never need it.

Can you deploy Drupal with zero downtime?

Yes, for code. A symlink release lets visitors keep getting the old code until the new release is fully built, so composer, file links and cache warmup never run under live traffic. The only part that is not atomic is the database: updatedb and config:import change the shared database before the switch, so a release has to stay compatible with the schema for those few seconds. Writing update hooks that add before they remove (add a new field, deploy, migrate data, remove the old field in a later release) keeps that window safe.

On DeployManage, zero downtime releases and quick deploy on push are part of Growth and Business. Starter deploys in place, which suits a staging server but not a client's production site. Laravel Forge also offers zero downtime deploys, limited to one server per site, so a Drupal site behind a load balancer on two servers needs Envoyer on top of Forge.

How much does Drupal hosting cost?

Drupal hosting costs about $24 a month for one small site on a $12 DigitalOcean server with Forge, $55 a month on Pantheon Basic, and from roughly $115 to $225 a month for ten client sites on servers you own, against $550 for the same ten sites on Pantheon Basic. The worked bills below use the vendors' own October 2026 prices: DigitalOcean Basic Droplets at $12 (2 GB), $48 (8 GB) and $96 (16 GB), Pantheon monthly site plans, and the panel fee for Forge and DeployManage Growth.

SetupPantheonServers + Laravel ForgeServers + DeployManage Growth
1 site, about 20K visits a month, one 2 GB server$55 (Basic, or $41.67 a month paid yearly)$12 + $12 = $24$12 + $129 = $141
10 client sites under 25K visits each, two 8 GB servers10 x $55 = $550, or $1,050 with the Gold workspace for Multidev and 24/7 support$96 + $19 = $115$96 + $129 = $225
4 busy sites at about 50K visits each, three 8 GB servers (2 app, 1 database)4 x $350 = $1,400 (Performance Medium)$144 + $19 = $163$144 + $129 = $273

Two things the table does not price. First, labor: Pantheon patches the platform and answers chat, and on your own servers your team owns OS patches, PHP upgrades and the alerts, even with a panel doing the provisioning and deploys. Second, traffic overages: Pantheon's published rate is $40 per 10,000 unique visits above the plan, and its docs say the automated overage program is paused for now. Our full breakdown of the plans is in Pantheon pricing and the real cost of Drupal hosting.

Which PHP version does Drupal 11 need?

Drupal 11 needs PHP 8.3 or newer, and Drupal 10 needs PHP 8.1 or newer with 8.1.6 recommended. Drupal.org lists Drupal 10's end of life as December 2026, so any client site still on 10 needs a move to 11 this year, and that upgrade usually goes together with a PHP upgrade on the server.

DeployManage installs PHP-FPM 8.1, 8.2, 8.3 or 8.4 per server and sets the version per site, so you can run a Drupal 10 site on 8.2 and a Drupal 11 site on 8.4 on the same machine while you upgrade clients one at a time. Pair it with MySQL 8, MariaDB or PostgreSQL 16, all three of which Drupal 11 supports.

When Pantheon or Acquia is the better choice

Be honest about the trade. If you run one or two Drupal sites, have no one on the team who wants to read a server alert, and value Multidev branches for every feature, Pantheon is a good product and $55 a month is a fair price for a small site. If a large organization needs a contractual SLA, Acquia's enterprise features and a vendor to sign a security questionnaire, a quote from Acquia is the normal route and nothing here replaces it.

The math changes for agencies. Per site plans multiply: ten small client sites cost ten Basic plans, and a client that grows past 25,000 visits moves up to a $200 tier. On your own servers the bill grows with RAM, not with the number of sites, and an agency that already runs Laravel or Symfony apps can manage its Drupal sites from the same panel. If you also host Craft or Statamic sites, the same release flow is described on Craft CMS deployment and Statamic hosting.

Ready to stop managing servers by hand? DeployManage provisions, deploys and monitors your fleet from one dashboard.

Get started

Frequently asked questions

How do I deploy a Drupal site to production?

Build the release from git in a new directory, run composer install --no-dev, link sites/default/files and a settings.local.php file kept outside git, run drush deploy, then switch traffic to the new directory with a symlink. DeployManage runs that sequence on every push and only switches when every step succeeds.

What is the best way to deploy Drupal?

Use configuration management plus atomic releases. Export config in development, commit it, and let a deploy script run composer and drush deploy in a fresh release directory before the switch. That keeps code and config in git, content in the database, and visitors on the old release until the new one is ready.

What does drush deploy do?

drush deploy runs database updates, rebuilds the cache, imports configuration, rebuilds the cache again and runs deploy hooks, in that order. It replaces the separate updatedb, config:import and cache:rebuild calls older scripts used, and it stops on the first error.

Can Drupal run on a VPS?

Yes. Drupal runs well on a VPS with Nginx, PHP-FPM 8.3 or 8.4 and MySQL, MariaDB or PostgreSQL. A 2 GB server handles a small site, and 8 GB with Redis comfortably hosts several agency client sites. A panel handles provisioning, SSL, cron and deploys so you are not configuring each server by hand.

How much does Pantheon cost for Drupal?

Pantheon Basic costs $55 a month or $500 a year per site for up to 25,000 visits. Performance plans cost $200, $350, $700 and $1,150 a month per site, and the Gold workspace for Multidev and 24/7 support is $500 a month. Elite plans are quoted.

Does DeployManage keep sites/default/files between deploys?

Yes, through your deploy script. Each release links web/sites/default/files to a shared folder outside the releases directory, so uploads and generated image styles survive every deploy and never sit inside git. The same pattern covers private files and settings.local.php.

Which DeployManage plan do I need for Drupal?

Growth at $129 a month for production client sites, because it includes zero downtime releases, quick deploy on push, 10 servers, 50 sites per server and 10 team members. Starter at $59 deploys in place and suits a staging server. Business at $299 removes the limits.

Related

Pantheon pricing Craft CMS deployment Statamic hosting Deploy Symfony Laravel Forge alternative Deploy from git Deploy to DigitalOcean Laravel hosting for agencies Platform.sh alternative

Deploy your Drupal sites to servers you own.

Connect a cloud account, launch a server and push your first Drupal release with composer, drush deploy and shared files. Every account starts with a one-time demo, no card required.

Get started Pricing

One-time demo, no credit card required.