DeployManage, server management for any cloud
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.
| 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%
|
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 |
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 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.
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.
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.
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 deployThe 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.
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.
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.
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.
| Setup | Pantheon | Servers + Laravel Forge | Servers + 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 servers | 10 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.
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.
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 startedBuild 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.
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.
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.
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.
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.
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.
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.
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.