Deploy+

Deploy+.
From push to production.

Connect your GitHub, GitLab, Bitbucket or Gitea repositories to your hosting and forget about the last step: every push publishes a new version with no downtime, with your build commands, and rolling back is one click.
tuproyecto/web · main Deploy+
  1. 01 Push
  2. 02 Build
  3. 03 Publish
  4. 04 Online

waiting for changes…

Releases

Every version is kept: rolling back is one click, with no downtime.

A git push

and the deployment starts on its own, without going into the panel

No downtime

the new version goes live when a link is switched

Rollback in seconds

you go back to any previous version from the history

Free of charge

included in every hosting plan

Works with your Git, wherever it is

GitHub github.com · webhook and signature GitLab gitlab.com or your own instance Bitbucket bitbucket.org · webhook and signature Gitea / Forgejo Codeberg or your own installation Another Git server any repository over HTTPS

How it works

Four steps, and you never touch them again.

Your code is already under version control. What was missing was the last stretch: getting it to production without uploading files by hand or crossing your fingers.

Connect

Your repository, wherever it is

GitHub, GitLab, Bitbucket, Gitea or any Git over HTTPS, public or private, with a read-only token. Before going on, the panel queries the API and shows you the repository, its branches and what's in the target folder right now.
https:// read-only token access verified

also on the accounts of a Multi-account plan

Five providers, one destination

over HTTPS
Deploy+

Push

Push and the deployment starts by itself

We create the webhook when you connect the repository, and every notification arrives signed. If you'd rather decide when, you trigger it with a button or from your continuous integration using the deployment link.
The usual
Upload files by hand and keep your fingers crossed
Here
A push, and GitHub notifies the server

From push to deployment

signed webhook
A push to the branch notifies via webhook and the deployment starts by itself GITHUB · PUSH main · a91f3c2 fix: checkout with coupon POST · HMAC HOSTSUAR · DEPLOY+ signature verified branch main: gets deployed deploy #48 running
Signed notification · deploy #48 queued

Publish

Atomic deployment, no downtime

Each version is cloned into its own folder, your .env and shared folders are linked, and your script runs. Only if everything went well is it published: a link changes, and the previous one is still there.

0 s

of downtime: the new release goes live by switching a link

Atomic deployment

~/deploy/tienda/

releases/

├─ 20260904-1830 · published

└─ 20260905-1012 · cloning and running script…

shared/

├─ .env → linked in every version

└─ storage/ → linked in every version

current → releases/20260904-1830

Preparing the new version; the previous one stays online

Roll back

One-click rollback, from the history

Date, who triggered it, commit, duration and the full log of every deployment. The latest releases stay on the server: going back to any of them takes seconds, because nothing needs to be cloned.

5 versions

kept by default; you decide how many

Read the full guide

Deployment history

5 saved versions
DateTriggerTime
today 10:12 · a91f3c2 Push 38 s
yesterday 18:30 · e07b9d4 Manual 41 s
yesterday 11:05 · 4c1d8e7 Rollback 2 s
Mon 09:48 · 4c1d8e7 Push 35 s

yesterday 18:30 · e07b9d4

the version stays on the server

Roll back to this version

Assistant

It knows what project it is and prepares it.

You choose the project type and the wizard suggests the web root, the script, the shared folders and whether a database is needed. Then you fine-tune it.
  • PHP

    Laravel

    Composer, optimised caches and publishing from public.

    Web root
    public/
    Shared
    storage
    Database
    prepares it
    Assets with Node
    if you tick it
  • PHP

    Symfony

    Composer, prod environment and publishing from public.

    Web root
    public/
    Shared
    var/log
    Database
    prepares it
    Assets with Node
    if you tick it
  • PHP

    WordPress

    Database, wp-config.php and persistent uploads.

    Web root
    root
    Shared
    wp-content/uploads, wp-config.php
    Database
    prepares it
    Assets with Node
    if you tick it
  • PHP

    PHP / Composer

    A clean base for PHP applications with Composer.

    Web root
    root
    Shared
    —
    Database
    prepares it
    Assets with Node
    if you tick it
  • Static

    Compiled frontend

    Builds with Node and publishes the output of dist.

    Web root
    dist/
    Shared
    —
    Database
    not needed
    Assets with Node
    always
  • Static

    Static HTML

    Publishes the repository as is, without installing anything.

    Web root
    root
    Shared
    —
    Database
    not needed
    Assets with Node
    —
  • Custom

    Another project

    No assumptions: you decide the root, script and persistence.

    Web root
    root
    Shared
    —
    Database
    prepares it
    Assets with Node
    if you tick it

What's included

What it takes to deploy properly.

Five engine decisions you won't see in just any “deploy from Git”, and that you'll notice the day something fails.

Script and Node

Your commands, on every version, with Node if needed

Composer, npm, artisan… command by command or as a full Bash script, with the commit, the paths and your .env as variables. If it uses Node and the account doesn't have it, it's installed first.
Composer npm ci artisan Node via NVM

if a command fails, the previous one stays online

Deployment script

template · Laravel
Laravel Symfony WordPress PHP Node / Vite None

composer install --no-dev --prefer-dist --optimize-autoloader

npm ci && npm run build # Node installed via NVM if missing

php artisan migrate --force # optional: rollback does not undo data

php artisan config:cache && php artisan route:cache

If a command fails, the deploy stops and the previous one stays online.

Database

The database, created on connecting

Tick “also prepare the database” and Deploy+ creates an empty MySQL database and a dedicated user, and writes the connection into your .env or wp-config.php. The password isn't stored anywhere.

MySQL

database, user and file in a single operation

Database · on connect

ready
  • Empty MySQL database mi_app
  • Dedicated user with all privileges mi_app_usr
  • Connection written to .env without touching anything by hand

DB_DATABASE=mi_app

DB_USERNAME=mi_app_usr

DB_PASSWORD=•••••••••••• # isn't stored in the panel

Configuration

The .env and uploads survive every version

The .env is kept automatically and you edit it from the panel. The paths you mark, such as storage or uploads, live in shared and are linked into each new version. The project profile already suggests its own.
The usual
Uploads and .env inside the code, at the mercy of each deploy
Here
Outside the code: no deploy or rollback touches them

Shared between versions

~/deploy/tienda/

shared/ → releases/20260905-1012/

.enveditable

storage/from the profile

public/uploads/yours

Linked into each new version; a rollback doesn't touch them either.

Console

Live console and commands on what's published

While it deploys you see each step with its timing and, if something fails, the last lines. Afterwards, a command whenever you need it on the live release, without opening a terminal.

6 steps

connect, clone, shared, script, activate, clean up

Run a command

over current · max. 2 min
$php artisan queue:restart Run

~/deploy/tienda/current

$ php artisan queue:restart

Broadcasting queue restart signal.

✓ finished in 0.4 s

Security

A token with the bare minimum, encrypted and kept out of the log

Read the repository and, if you want us to create the webhook, manage webhooks. Nothing else. Every push notification is checked against the provider's signature.
read-only encrypted HMAC signature

revoke it whenever you like: only the deployment stops working

Token permissions

the minimum, and encrypted
ProviderCloneWebhook
GitHubcontents + metadata · read+ webhooks
GitLabread_repository+ api
Bitbucketrepositories · read+ webhooks
Gitea / Forgejoread+ webhooks
Other Gituser + token—

Encrypted, only for cloning, never in the log.

All of this comes with every hosting plan and with the accounts in a multi-account plan, at no cost.

Read the full guide →

Questions

Before connecting the first repository.

Which plans include Deploy+?

All hosting plans, at no extra cost. You will find the tool in the client area, among the options for your hosting service.

Does it work with private repositories?

Yes, with both public and private repositories. In both cases you need a GitHub access token: create a fine-grained one, limited to the repository you are going to deploy, with Contents: Read-only and Metadata: Read-only permissions. We do not need write access to your code.

Does my website go down while it is being deployed?

No. Each deployment is cloned into a new release, the shared files are linked and your scripts run before it goes live: only when everything has succeeded is the current symlink moved to the new release, and that switch is instant. If a script fails, the deployment stops and the previous release stays online.

How do I go back to the previous release if something goes wrong?

From the history, with the Rollback button on any previous deployment. It takes seconds because nothing is cloned: it only changes which release current points to. By default the last 5 releases are kept, and you can adjust how many you want to keep.

Can I run composer, npm or artisan commands?

Yes. Each repository has a script editor where you define the commands that run on each release before it goes live: composer install --no-dev, npm run build, php artisan config:cache… The system filters out dangerous commands. To use Node.js and npm, first install them from cPanel's package manager.

What happens to the .env file and upload folders?

They are not lost between deployments. The .env file is detected and preserved automatically, and you can add any paths you like (storage/app, uploads…) as shared files: they are stored separately and linked into each new release.

Your next push, already deployed.

Deploy+ is included in every hosting plan, within your service options. If you're coming from another provider, we'll help you set it up.