Skip to main content
.com domains from $2.99 — free WHOIS privacy on every name

Engineering Brief

Hosting with git deployment — One command to release, one command to undo it

The problem with dragging files is not the dragging — it is that afterwards nobody can say exactly which version is on the server.

The short answer

Deploy with Git on a plan where the shell and the toolchain are already there: Turbo at $4.66 a month gives you SSH with Git and Composer, so a release is a `git pull` in the document root and a rollback is `git checkout` against the previous tag.

The part most guides omit is that the pull is not the end of the release. PHP's OPcache may still be executing the bytecode it compiled from the old files, and LiteSpeed may still be handing out the cached HTML it built before your change. A deploy that does not clear both is a deploy that appears not to have happened.

Below: the minimum viable release loop, the two caches to invalidate, how to make a rollback a ten-second operation, and what the account needs underneath it.

By the HostingFast team · Reviewed 24 August 2026

NVMe

Storage, every tier

Free

Domain, first year

99.9%

Uptime, monitored

Flat

Renewal pricing

Version-controlled deployment is not about elegance. It is about being able to answer two questions instantly: what is running right now, and how do I put back what was running an hour ago.

On a shared account you can have both without adopting a CI platform. What you need is a shell, Git on the server, a document root you control, and a clear idea of what caches sit between your files and your visitor.

The smallest release loop that is still honest

Clone the repository into the account over SSH, point the domain's document root at the working tree, and you are done setting up. From then on a release is `git fetch --all && git reset --hard origin/main` — reset rather than pull, so an accidental edit on the server cannot silently block the deploy.

If the project has PHP dependencies, `composer install --no-dev --optimize-autoloader` after the reset. Composer is already installed on the account, so this needs no root and no build agent.

Tag every release. `git tag -a v2026-08-15-1 -m 'copy fix'` costs nothing and it is what turns the rollback below from an archaeology exercise into one command.

A post-receive hook is a refinement rather than a requirement. Add one when the manual pull starts feeling like the slow part of your day, not before — a hook you do not understand is a deployment you cannot debug at midnight.

The two caches that will happily serve yesterday's code

PHP OPcache holds compiled bytecode keyed by file path and modification time. Usually the new timestamp is enough to invalidate it, but if your deploy replaces files in a way that preserves timestamps — or if validate_timestamps is off — the old code keeps running. The reliable fix is to restart the PHP process for the account from the panel after a release.

LiteSpeed sits in front of that with the cached HTML. Purge it after the deploy, either from the panel or from the cache plugin's purge-all control, or your visitors carry on getting the previous page while you stare at a correct file on disk.

Confirm rather than assume: `curl -sI https://yourdomain.example | grep -i x-litespeed-cache` tells you whether the response came from cache, and a distinctive string in the new release tells you whether the code is live. Two commands, thirty seconds, and no more mystery deploys.

Rollback, timed

The measure of a deployment process is how long it takes to undo. With tags, `git checkout v2026-08-14-2` puts the previous release back in the time it takes to read the tag name. Then repeat the cache steps above, because a rollback is a release too.

What Git does not roll back is the database. A migration that added a column is still there, and a plugin update that rewrote rows has already rewritten them. That is why the database dump belongs in the deploy routine: `mysqldump` before the release, kept next to the tag.

Daily backups on the account are your second net, restorable from the panel in minutes without a ticket. Treat them as the safety line, not the plan.

What the account has to provide

Turbo at $4.66 a month: 25 websites, 20 GB of NVMe, 1 TB of bandwidth, 1 core and 2 GB of RAM, 50 MySQL databases, full SSH with Git and Composer, per-site PHP version switching, and a renewal charged at the same $4.66.

Free SSL reissues itself on every domain, so a new staging hostname does not become a certificate errand. Softaculous is there for the parts of the stack you would rather not build by hand.

If a project eventually needs a build agent, a permanent worker or a runtime that is not PHP, Overdrive at $19.99 adds native Node.js, Python and Ruby on Rails, and a KVM VPS from $13.52 gives you full root. Both are a step you take when the constraint is real, not in advance.

A developer working against a hosted server over SSH

Why we publish the failure modes too

A page that only lists features would not have told you about OPcache, and OPcache is the thing that will waste your first evening. We would rather be the host whose documentation warned you.

Support is staffed at every hour and shell questions are in scope: a hook that will not fire, a permissions problem after a reset, a cache that refuses to purge. Two-hour first-reply target, one hour when a site is down.

  • Git and Composer already on the server
  • A purge step you can verify with one curl
  • Tagged releases, so rollback is a single command
  • $4.66 at order is $4.66 at renewal

Why HostingFast

Standard on every plan

Git on the box, not just in your workflow

Clone straight into the account over SSH. No build agent, no third-party deploy service sitting between you and the document root.

Composer without root

`composer install --no-dev --optimize-autoloader` runs on the account, so PHP dependencies resolve where the code will actually execute.

A cache you can see

LiteSpeed sets a response header on every hit, so you can prove whether a visitor got the new page or the old one.

PHP restart from the panel

The reliable way to flush OPcache after a release, without needing a system service or a support ticket.

Per-site PHP branches

Deploy the same repository to two sites on different branches of PHP when you are testing a version bump.

A backup behind the backup

Daily account backups with self-service restores, for the day a rollback needs to include the database.

Prices Side by Side

Our numbers next to the big names

Typical intro and renewal pricing across the market, lined up against ours — including the renewal figure most comparison charts skip.

HostingFast pricing and features lined up against three other hosts
FeatureHostingFastMost popularTypical household-name hostTypical bargain hostTypical loss-leader deal
Starting price / mo*$2.42/mo$4–$6$2–$4$1–$3
Renewal price / mo$2.42/mo$10–$15$8–$12$4–$6
Cheapest plan renews at its sign-up price
SSL as standard
Migration done for you
NVMe drives on the cheapest tier
Daily backups from the first tier
Real humans on support, 24/7

*Our number is the lowest-priced plan we sell on an annual term, pulled live from the same catalogue that powers our pricing page — it physically cannot fall out of date. The other three columns show the ranges shared hosts in each bracket typically advertise: introductory offers that mostly demand a one-to-four-year commitment, then jump once it expires. We no longer name rivals or print their prices, because a figure we cannot verify on the day you read it has no business on this page. Line us up against whichever host you are really weighing — and give the renewal row the hardest look.

Quick Start

From order to online

  1. 1

    Clone once, then never upload again

    Repository into the account over SSH, document root pointed at the working tree. Every release after that is one command.

  2. 2

    Add a purge step to the release

    Restart PHP for the account and purge the LiteSpeed cache. Until you do, the deploy is only half finished.

  3. 3

    Tag it, and dump the database

    An annotated tag plus a mysqldump next to it. That pair is what makes a rollback a decision rather than a rescue.

  4. 4

    Verify with two curls

    One for the cache header, one for a string unique to the new release. Assume nothing about what the visitor is being served.

Built In

Loaded onto every plan

  • cPanel, the panel most of the industry already documents
  • Virus and spam filtering applied to each mailbox as standard
  • Humans answering around the clock, weekends included
  • Mailboxes on your own domain, included in the plan
  • LiteSpeed caching in the web server, with a verifiable response header
  • A PHP version chosen per document root rather than per account
  • Free SSL on every plan, reissued before it can expire
  • Platform monitoring against a 99.9% uptime target, day and night
  • Renewals charged at the order rate, year after year
  • Softaculous: WordPress and 240+ applications in one click

Frequently Asked

What people ask us most often

What is the smallest Git deployment that is still safe?

Clone the repository into the account over SSH, point the document root at it, and release with `git fetch --all && git reset --hard origin/main`. Reset rather than pull, so a stray edit made on the server cannot block the deploy. Add `composer install --no-dev` if the project has PHP dependencies, then purge the cache.

Why is the site still serving old code after a successful pull?

Almost always one of two caches. PHP OPcache is still running bytecode compiled from the previous files — restart PHP for the account from the panel. Or LiteSpeed is still serving the HTML it cached before your change — purge it. Check with `curl -sI` and look at the LiteSpeed cache header on the response.

Can I use a post-receive hook rather than pulling by hand?

Yes, and the shell is where you set it up. It is worth adding once the manual pull is genuinely the slow part of your day. Until then, a two-command release you fully understand beats an automated one you cannot debug when it fails at an awkward hour.

Where should secrets live if the repository is shared?

Outside the working tree and outside the repository. Keep the environment file above the document root, add it to .gitignore, and set permissions to 600. If a credential has ever been committed, rotate it rather than removing it from the history and hoping.

Keep reading

  • Dedicated Server Value

    The point at which reserved hardware costs less than the shared capacity you keep having to work around.

  • VPS vs Dedicated Servers

    Virtualised cores against physical ones, compared on the workloads where the difference is actually measurable.

  • How to Deploy a Site with Git

    The clone, the hook and the purge step written out as a walkthrough you can follow on a live account.

  • Business Hosting

    Overdrive and Redline: native Node.js, Python and Ruby plus PostgreSQL, for projects that outgrow a PHP document root.

  • Laravel Hosting

    Composer, artisan and queue work on a stack that already has the toolchain a Laravel release expects.

Changing hosts? Run through our checklist first.

A straightforward sequence for a switch your visitors never feel: which files move first, how to shift email across without losing a single message, the right moment to repoint DNS, and the two mistakes behind almost all the downtime we get asked to rescue.

You'll get the checklist email, then occasional pointers on keeping a site running fast. Unsubscribe the moment you want out — the privacy policy covers the rest.

Release it. Then undo it in ten seconds.

Turbo at $4.66 a month with SSH, Git and Composer on the account, LiteSpeed in front and NVMe underneath.

View Business Hosting plans