DeployManage, server management for any cloud

WordPress Git Deployment to Deploy WordPress With Git From GitHub to Your Own Servers

Connect a cloud account, launch a server with Nginx, PHP 8.1 to 8.4, MySQL or MariaDB, Redis and Composer, and deploy every client WordPress site straight from its git branch. Each release is built in its own folder, uploads and wp-config.php stay outside it, and traffic only moves when the whole build has passed.

One-time demo, no credit card required.

WP Engine, SpinupWP, Laravel Forge and Envoyer details 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 WordPress with git, keep your theme, plugins and composer.json in a repository, never uploads or wp-config.php, and have a deploy tool check out each commit into a new folder on the server, link the shared uploads folder and config file into it, and switch a symlink. DeployManage does that for every site on servers you own and can deploy on every push to GitHub, GitLab or Bitbucket. For a single site, SpinupWP or Laravel Forge cost less, and this page says where.

Agency developer at a desk with a terminal on one monitor and a server dashboard on the other during a WordPress release

Why FTP and git pull break client WordPress sites

Most agencies still ship WordPress changes in one of two ways. Somebody drags a theme folder over SFTP, or somebody runs git pull inside the live document root. Both replace files while the site is answering requests, so for a few seconds a visitor can load a page that mixes the old functions.php with a new template part, and a fatal error lands in front of a client.

Neither method gives you a way back either. If a plugin update in the repository breaks checkout on a WooCommerce store, the old files are gone and the fix is another rushed commit. A release folder per deploy solves both problems: the new code is built next to the old code, the switch is one symlink, and the previous build is still on disk.

What DeployManage does for a WordPress site in git

A WordPress ready server in your cloud account

Paste a DigitalOcean or Hetzner API token and the server is created through their API, or run one install command on an AWS, Vultr, Linode or other Ubuntu VPS. You get Nginx, PHP-FPM 8.1 to 8.4, MySQL 8 or MariaDB, Redis, Composer and Supervisor, with only ports 22, 80 and 443 open.

Connect GitHub, GitLab or Bitbucket

Point a site at a repository and a branch. The server keeps a bare mirror of the repository, so each deploy only fetches what changed instead of cloning the whole history again.

A new folder for every release

On Growth and Business each deploy checks the commit out into releases/<timestamp>, runs your deploy script inside it, and only then points the current symlink at it. A failed composer install or build step stops the deploy and the live site keeps serving the previous release.

Uploads and wp-config.php kept outside releases

Your deploy script gets the site folder as DM_SITE_DIR. Two lines link the shared uploads folder and wp-config.php (or the Bedrock .env, which the panel shares automatically) into each new release, so media and credentials never live in git.

Deploy on every push

Turn on quick deploy and the panel gives you a webhook URL for GitHub, GitLab or Bitbucket. A push to the production branch starts a deploy, and the log streams in the panel with the commit hash, author and message.

The last five releases stay on disk

Old builds are pruned automatically after five, so disk use stays flat. Going back means deploying the previous commit, which builds in a fresh folder and swaps the symlink the same way.

Domains and free SSL per site

Add the client domain, point DNS at the server and the panel issues and renews a Let's Encrypt certificate. Redirects, the web directory (/ for classic WordPress, /web for Bedrock) and the PHP version are set per site.

A database and user per client

Create a MySQL or MariaDB database and a database user for each client site from the panel, so one compromised plugin cannot read another client's tables with the same credentials.

Seats and an activity log for the agency

Growth includes 10 team members and Business is unlimited. Every deploy, server change and member action is written to the team activity log, which is what a client asks for after an incident.

How it works

  1. 1
    Connect a cloud account

    Paste a DigitalOcean or Hetzner token and the server is created for you, or run the install command on a server you already have at AWS, Vultr or Linode.

  2. 2
    Add the WordPress site

    Pick the WordPress project type, set the domain and the web directory, create the database, and connect the repository and branch.

  3. 3
    Link the shared folders

    Add the two lines that link uploads and wp-config.php into the release, plus composer install if you manage plugins with Composer or Bedrock.

  4. 4
    Push to deploy

    Push to the production branch. The release builds in its own folder, the symlink moves, PHP-FPM reloads and the log shows the commit that went live.

WordPress git deployment options compared

Prices from each vendor's own pricing page, read in October 2026, in USD. The honest headline: for one or two WordPress sites, SpinupWP and Laravel Forge are far cheaper than DeployManage, and WP Engine GitPush is the simplest if you already host there. DeployManage is for agencies running many client sites on their own servers that want atomic releases on every site, seats and an activity log on one flat plan.

swipe to see all columns →

What you are comparing DeployManage SpinupWP Laravel Forge WP Engine GitPush
How you pay Starter $59, Growth $129, Business $299 a month, servers billed by your cloud Essentials $12 or Advanced $19 a month for one server, extra servers on a sliding scale Hobby $12, Growth $19, Business $39 a month, servers billed by your cloud Included with a WP Engine hosting plan
Where WordPress runs Your servers at DigitalOcean, Hetzner, AWS, Vultr, Linode or any Ubuntu VPS Your servers Your servers WP Engine infrastructure
How a git deploy lands New release folder and a symlink switch on Growth and Business; in place reset on Starter git pull into the live site, then your deploy script Zero downtime releases on new sites, one server per site Push to git.wpengine.com, tracked files copied to the environment
Going back after a bad deploy Previous five releases kept, redeploy the earlier commit No rollback documented Not stated on the pricing page Push a revert commit or restore a backup
Uploads and wp-config.php Linked from the site folder into each release Live in the site directory Configured per site Excluded from GitPush by WP Engine
Deploy on push Webhook on Growth and Business Yes Yes You run git push yourself
Other stacks on the same panel Laravel, Symfony, Drupal, Craft, Statamic, static sites WordPress only PHP, Laravel, WordPress, Statamic, Node.js WordPress only
Best for Agencies with 10 or more client sites on several servers A WordPress freelancer or small studio Developers who mix Laravel and WordPress on a budget Teams already paying WP Engine

Who it's for

A WordPress agency with 20 to 60 client sites

Custom themes and a curated plugin set live in git per client. Two or three servers the agency owns host every site, each with its own database, and every change goes out as a release folder the agency can step back from.

A Bedrock and Composer shop

Plugins are Composer packages from wpackagist, config lives in .env and the document root is web/. The panel shares .env across releases automatically and composer install runs inside the new release before it goes live.

A WooCommerce store with a developer on retainer

Checkout cannot go down during a theme deploy on a Tuesday afternoon. Atomic releases mean the old build keeps taking orders until the new one has fully built.

A team running WordPress next to Laravel

The marketing site is WordPress and the product is Laravel. One panel, one bill and one activity log cover both, with Horizon workers for the app and Nginx sites for the blog on the same servers.

How do I deploy WordPress with git?

Put the code you own in git (your theme, custom plugins, mu-plugins and, if you use Composer, composer.json and composer.lock), leave WordPress uploads and wp-config.php out, and let a deploy tool check each commit out on the server. The tool should build every release in a new directory, link uploads and the config file into it, run composer install, and switch a symlink only when everything has succeeded.

The .gitignore for a classic layout usually excludes wp-content/uploads, wp-config.php, cache folders and any plugin you install from the WordPress dashboard rather than from the repository. Track WordPress core only if you want core updates to go through code review; most agencies either track it or pull it in with Composer, and both work with release folders.

In DeployManage you choose the WordPress project type when you add the site, connect the repository and branch, and the deploy script runs inside the fresh release with DM_SITE_DIR pointing at the site folder. That variable is what you use to reach the shared uploads folder and wp-config.php.

The deploy script for classic WordPress and for Bedrock

For a classic layout, three lines are enough: create the shared uploads folder once, link it into wp-content, and link wp-config.php from the site folder.

mkdir -p "$DM_SITE_DIR/uploads"
rm -rf wp-content/uploads
ln -s "$DM_SITE_DIR/uploads" wp-content/uploads
ln -sfn "$DM_SITE_DIR/wp-config.php" wp-config.php

For Roots Bedrock the config is a .env file, which DeployManage already links into every release from the environment you set in the panel, and the uploads folder sits at web/app/uploads. Set the web directory to /web and use:

composer install --no-dev --optimize-autoloader
mkdir -p "$DM_SITE_DIR/uploads"
rm -rf web/app/uploads
ln -s "$DM_SITE_DIR/uploads" web/app/uploads

If your theme has a build step, add npm ci and npm run build in the theme folder before those lines. Because all of this runs in a release that is not live yet, a failed build costs you nothing but the time it took.

Can you deploy WordPress from GitHub automatically?

Yes. Turn on quick deploy for the site and add the webhook URL the panel shows you to the repository on GitHub, GitLab or Bitbucket; every push to the production branch then starts a deploy. The deploy log records the commit hash, author and message, so you can tell which push put which code live.

GitHub Actions can do the same with a workflow that runs rsync or an SSH command, and plenty of teams start there. The cost is that the workflow, the SSH keys in repository secrets and the release logic are now yours to maintain in every client repository, and a workflow that rsyncs straight into the document root has the same half deployed window as FTP. A panel keeps that logic in one place for every site.

Deploying WordPress from git on WP Engine, SpinupWP and Laravel Forge

WP Engine GitPush pushes your tracked files to git.wpengine.com and copies them to the chosen environment; its documentation lists wp-config.php, wp-content/uploads and media and binary files among what GitPush will not deploy, and only removes files you have also removed from the repository. It is a good fit if you already pay WP Engine and do not need your own servers.

SpinupWP runs git push to deploy as a pull into the live site followed by your script. It is inexpensive and WordPress focused, but there is no documented rollback, so a bad deploy is fixed by another commit.

Laravel Forge supports WordPress as well as Laravel, and new sites get zero downtime deployments. Forge's own FAQ says it "only supports deployments with zero downtime on one server", so a site behind a load balancer needs Envoyer at $10 to $50 a month on top.

What it costs for an agency with 20 WordPress sites

Twenty small client sites fit on two DigitalOcean 4 GB Droplets at $24 each, so the servers cost $48 a month whichever panel you choose. The panel fee is what changes:

SetupPanelServersMonthly total
Laravel Forge Growth$19$48$67
SpinupWP Essentials, 2 servers$20$48$68
DeployManage Starter, in place deploys$59$48$107
DeployManage Growth, atomic releases and deploy on push$129$48$177

On price alone Forge and SpinupWP win, and if your sites change once a month that may settle it. Growth earns its extra $110 when releases happen weekly across many clients: every site deploys as a release folder with five builds kept, ten people share the account with their own logins, and the activity log shows who deployed what. Spread across 20 clients that is $5.50 per site per month, which most agencies already bill several times over as a care plan.

Who should not use DeployManage for WordPress

If you run one WordPress site, or a handful that rarely change, you do not need a release based deploy panel; SpinupWP at $12 or Forge Hobby at $12 covers it. If you want no server at all, managed WordPress hosting is the simpler purchase. And if you never put WordPress code in git, start with our WordPress VPS control panel page, which covers running client sites on your own servers without a git workflow.

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 WordPress with git?

Keep your theme, custom plugins and composer files in a repository, leave uploads and wp-config.php out, and use a deploy tool that checks each commit out into a new folder on the server, links the shared uploads folder and config into it, and switches a symlink when the build passes. That avoids the half updated window you get with FTP or git pull.

Can you deploy WordPress from GitHub?

Yes. Connect the GitHub repository and branch to the site in DeployManage, turn on quick deploy and add the webhook URL to the repository. Every push to that branch starts a deploy, and the log shows the commit that went live. GitLab and Bitbucket work the same way.

Should wp-content be in git?

Your own theme, custom plugins and mu-plugins should be in git. wp-content/uploads should not, because media changes on the live site every day and belongs in a shared folder linked into each release. Third party plugins can be tracked or installed with Composer; pick one method and stick to it per site.

Should wp-config.php be in git?

No. It holds database credentials and salts that differ per environment. Keep it in the site folder on the server and link it into each release from the deploy script, or use Bedrock, where configuration comes from a .env file that DeployManage shares between releases automatically.

Does WP Engine support git deployment?

Yes. WP Engine GitPush lets you push to git.wpengine.com over SSH and deploys tracked files to the environment. Its documentation lists wp-config.php, the uploads folder and media and binary files as excluded. It only works for sites hosted on WP Engine.

Can I roll back a WordPress deploy?

On Growth and Business, DeployManage keeps the last five releases on the server. To go back you deploy the previous commit, which builds in a fresh folder and swaps the symlink. Database changes made by a plugin update are not reversed by a code rollback, so take a database backup before major plugin upgrades.

Does DeployManage work with Bedrock?

Yes. Set the web directory to /web, run composer install --no-dev in the deploy script and link web/app/uploads to the shared uploads folder. The .env file you set in the panel is linked into every release automatically.

Related

WordPress VPS control panel SpinupWP alternative Deploy from git Laravel Forge alternative GridPane pricing Drupal deployment Craft CMS deployment Deploy to DigitalOcean FlyWP alternative

Deploy your client WordPress sites from git.

Connect a cloud account, launch a server and push your first WordPress release with shared uploads and wp-config kept safe. Every account starts with a one-time demo, no card required.

Get started Pricing

One-time demo, no credit card required.