No sections match that search. Try a different word.
Overview
WebDeck is a hosting control panel for Linux servers. It installs and manages the full stack — web server, PHP, database, mail, DNS and SSL — and gives you, your resellers and your customers an interface to run it all from.
It's designed to be installed on a fresh server and to take care of everything from there. You don't configure Apache by hand, you don't write DNS zones, and you don't set up DKIM yourself — WebDeck does it.
What it manages
- Web: Apache, nginx or OpenLiteSpeed, with multiple PHP versions
- Mail: Postfix and Dovecot, with DKIM, SPF and DMARC
- DNS: PowerDNS, authoritative, with your own nameservers
- Database: MySQL/MariaDB, with phpMyAdmin
- SSL: Let's Encrypt, issued and renewed automatically
- Backups: restic and rclone, local and off-site
- Resellers: package types, dedicated resource pools and white-label branding
- Isolation: per-site CPU/RAM/process pools, no CloudLinux licence needed
Requirements
Supported operating systems
- Debian 11, 12, 13
- Ubuntu 20.04, 22.04, 24.04
- Rocky Linux 8, 9, 10
- AlmaLinux 8, 9, 10
- RHEL 8, 9
Minimum server
- 1 vCPU, 1 GB RAM, 10 GB disk — enough to run the panel and a few small sites
- A fresh install of a supported OS — WebDeck expects to own the stack
- Root access
- A public IPv4 address
Recommended for production
- 2+ vCPU, 4 GB RAM, 40 GB+ SSD
- Correct reverse DNS (rDNS) on the IP — mail deliverability depends on it
- Port 25 open outbound if you're sending mail directly
Installation
One command on a fresh server. The installer detects your distribution, installs the stack, configures everything and starts the panel.
Step 1 — download and run
It takes a few minutes — it's installing a full hosting stack. You'll see each step as it completes.
Step 2 — open the panel
At the end, the installer prints your server's free hostname — an address like:
Use it. It carries a browser-trusted certificate, so the panel loads with a
padlock and no warnings. The direct IP (https://YOUR-IP:2087) works
too, but uses a self-signed certificate and shows a warning.
Step 3 — keep the MySQL password
The installer prints your MySQL root password and saves it to
/opt/vm6panel/.env. Keep it somewhere safe.
First-run setup
The first time you open the panel, a wizard walks you through the essentials. There are no config files to edit.
- Licence — VM6 Networks clients are licensed automatically by server IP and skip this step. Everyone else enters a licence key, or clicks Start a 14-day free trial for full features with no key.
- Admin account — your username, email and password. Use a strong password; this account controls the server.
- Nameservers — the
ns1/ns2hostnames your DNS will be served from. You'll point these at your server's IP with your domain registrar. - Web server — Apache, nginx or OpenLiteSpeed. You can switch later without rebuilding sites.
- Mail — set up the mail server, or skip it if you're using an external provider.
- Done — you land on the dashboard.
Setting up your nameservers
To serve DNS for customer domains you need glue records at your registrar:
- Register a domain for your nameservers (e.g.
yourhost.com) - At the registrar, create host records / glue records:
ns1.yourhost.com → your.server.ipandns2.yourhost.com → your.server.ip - Enter those hostnames in the panel's Nameservers step
Logging in
There are three ways into WebDeck, depending on who you are:
- Admin / reseller — the panel at port
2087 - Customers — the same address; they see only their own account
- Webmail — customers can open webmail from inside the panel
Two-factor authentication
Enable TOTP two-factor from Security. Scan the QR code with any authenticator app. Strongly recommended for admin accounts. Turning it on asks for your password, and reused one-time codes are rejected, so a code can't be replayed.
Websites
Adding a website creates everything it needs in one step: the virtual host, the document root, the DNS zone, an SSL certificate and a PHP pool.
Adding a site
- Go to Websites → Add website
- Enter the domain and choose a PHP version
- WebDeck creates the vhost, DNS zone and requests an SSL certificate
Per-site options
- Force HTTPS — redirect all traffic to the secure version
- Page caching — a quick speed boost for static-heavy sites
- PHP version — change per site at any time
- Edit PHP Settings — memory limit, upload size, execution time and more, for that site alone
- Directory privacy — password-protect a folder
- Analytics — visits, top pages, referrers and errors, built from the server's own logs (no tracking scripts)
SSL certificates
WebDeck issues free Let's Encrypt certificates and renews them automatically.
How it works
- Point the domain's DNS at your server (an A record to your IP)
- Add the site in WebDeck
- WebDeck requests a certificate as soon as the domain resolves
- Renewal happens automatically, well before expiry
dig +short yourdomain.com — if it doesn't
show your server's IP, that's the problem. Once DNS is right, the self-healing
engine will pick the certificate up on its next pass.
Free panel hostname
Every WebDeck install is assigned a free hostname under
wd-server.co.uk — for example srv-a1b2c3.wd-server.co.uk —
pointing at your server, with a browser-trusted HTTPS certificate.
This gives you a clean, padlocked panel address from the very first minute, before you've set up any of your own domains.
How it works
- On boot, the panel claims its hostname and the DNS record is published
- It fetches a trusted certificate and installs it into the web server
- The certificate is kept renewed automatically — you do nothing
PHP versions & settings
Multiple versions
Install several PHP versions and assign them per site — a legacy app on 7.4 and a modern one on 8.3, on the same server. Go to PHP Versions to install or remove versions.
Modules
Sixty-five modules can be toggled on and off per PHP version — gd, imagick, redis, intl, soap, ionCube and the rest. WebDeck installs the right package for your distribution and reloads the right service, so a toggle takes effect immediately.
Per-site settings
Click Edit PHP Settings on any website to change:
memory_limit— how much memory a script may useupload_max_filesize— largest uploadable filepost_max_size— largest form submissionmax_execution_time— how long a script may runmax_input_time,max_input_varsdisplay_errors— leave off on live sites
Settings apply to that website only, take effect immediately, and can't affect any other site on the server. Admins, resellers and customers can all use it, each for the sites they manage.
Databases
Create MySQL/MariaDB databases and users from Databases. Each user can be scoped to a single database.
- phpMyAdmin is built in — one click from the panel logs you straight in to the selected database, no separate password to enter
- Backups include your databases automatically
- Remote access can be enabled per user if an external app needs it
DNS & nameservers
WebDeck runs PowerDNS as an authoritative nameserver. Zones are created automatically when you add a site.
Editing records
Go to DNS Records, pick a domain, and edit A, AAAA, CNAME, MX, TXT, SRV and CAA records. Mail records (MX, SPF, DKIM, DMARC) are written for you when mail is set up.
Adding a secondary nameserver
A second nameserver on a different machine means DNS keeps working if one box goes down. Since 2.2.5 this is a self-contained feature with its own page — you run one command on the new server and it enrols itself.
Secondary DNS
A secondary nameserver holds a full, automatically-updated copy of every zone on a second machine. If your main server goes offline, your customers' domains keep resolving. Added in 2.2.5.
Setting one up
- In the panel, go to Secondary DNS in the sidebar
- Click Add secondary nameserver — you get a single command
- Paste that command into a root shell on the new machine
- Wait a minute or two, then click Refresh
The command installs PowerDNS, configures it as a secondary of your panel, opens the firewall for DNS, and registers back with the panel. Zones start transferring immediately afterwards.
curl or wget.
Supported systems
- Debian 12+ and Ubuntu 22.04 / 24.04 / 26.04
- AlmaLinux, Rocky Linux and RHEL 9+
The installer picks the right packages, config paths, firewall tool and SELinux settings for whichever it finds, and matches the PowerDNS version on the box.
What the statuses mean
| Status | Meaning |
|---|---|
| In sync | Answering DNS and holding every zone. Nothing to do. |
| Out of sync | Reachable, but some zones are missing or extra. Press Sync; it usually resolves itself on the next background run. |
| Unreachable | Not answering on port 53, or the panel cannot reach its API. Check the machine is up and that its firewall allows the panel. |
| Waiting | Just enrolled and not yet verified. Give it a minute. |
Nameserver records are handled for you
Copying zones is only half of it — a domain will not use a nameserver its NS records never mention. Once a secondary is confirmed to be answering, WebDeck adds it to the NS records of every zone it manages. A secondary still starting up is left out on purpose: advertising a nameserver before it answers only makes lookups slow.
sub.example.com, is preserved exactly as you set it. Zones the
panel does not manage records for are never rewritten.
Glue records at your registrar
For the world to use your secondary, the nameserver hostname needs glue at the registrar
of your nameserver domain — an A record pointing ns2.yourdomain.com at the
secondary's IP. The panel's Check glue records button tells you what is
missing. This is the one step WebDeck cannot do for you, because only your registrar can
publish it.
Retiring a nameserver
Once a healthy secondary exists you can disable one of the server's own nameservers from the Secondary DNS page — useful when moving DNS onto dedicated machines. WebDeck refuses if that would leave fewer than two working nameservers.
How many can I add?
As many as you like; there is no limit. Two or three is typical. WebDeck warns you if
they all sit in the same /24, since that undermines the point of having them.
If something goes wrong
- "Refused the connection" — the secondary's API allow-list does not include your panel's IP. Re-running the enrolment command fixes it.
- "Not answering DNS on port 53" — PowerDNS is not running, or a firewall in front of the machine blocks port 53 (both TCP and UDP are needed).
- Zones stay at 0 — check the primary can reach the secondary, then press Sync. The panel also reconciles by itself every 10 minutes.
- Re-running is safe — the enrolment command is idempotent and is the supported way to repair a half-finished install.
Email accounts
WebDeck runs Postfix and Dovecot. Create mailboxes per domain from Email.
- Mailboxes — unlimited per domain, with quotas if you want them
- Aliases and forwarders
- Catch-all addresses
- Webmail — customers open it from inside the panel
Connecting a mail client
WebDeck publishes autoconfig and autodiscover records, so Outlook and Thunderbird set themselves up from just the email address and password. Manual settings:
- IMAP:
mail.yourdomain.com, port993, SSL/TLS - SMTP:
mail.yourdomain.com, port587, STARTTLS - Username: the full email address
Deliverability — DKIM, SPF and DMARC
This is what stops your customers' mail landing in spam, and WebDeck sets it up for you rather than leaving it as homework.
- DKIM — a signing key is generated per domain and the DNS record published automatically
- SPF — a record authorising your server to send for the domain
- DMARC — a policy record telling receivers what to do with mail that fails the checks
The deliverability checker
Go to Email → Deliverability to see, per domain, whether DKIM, SPF, DMARC and rDNS are correct — and exactly what to fix if they aren't.
SMTP relay
Some providers block outbound port 25, and some IP ranges have a poor sending reputation. You can route all outbound mail through a relay instead.
- Go to Settings → Mail Relay
- Enter the relay host, port, username and password
- Outbound mail is routed through the relay from then on
Works with any SMTP relay — a commercial sending service, or your own.
Backups
WebDeck backs up websites, databases, mail, DNS and the panel's own configuration. Backups are deduplicated and encrypted (restic under the hood).
Setting up scheduled backups
- Go to Backup Manager
- Choose a destination — local disk, SFTP, or any rclone remote (S3, Backblaze B2, Google Drive and others)
- Set the schedule and how many copies to keep
Backup self-test
The self-test verifies that a backup can actually be restored — not just that it exists. Run it occasionally. An untested backup isn't a backup.
Disaster recovery
WebDeck can rebuild an entire server from a backup onto a brand-new machine.
Rebuilding a dead server
- Install WebDeck on the new server as normal
- Go to Backup Manager → Restore
- Point it at your backup destination
- Choose a full restore
Accounts, packages, websites, databases, mail, DNS zones and panel settings are all restored.
Restoring one website
You can also roll a single site back without touching anything else — and customers can restore their own sites from the backups you manage, scoped to their own domains.
Resellers & packages
WebDeck has four roles: admin, master reseller, reseller and user.
Packages
A package defines what an account gets — disk, bandwidth, number of websites, databases and email accounts. Create packages under Packages, then assign them when creating accounts or provisioning from WHMCS.
Package type
Every package has a type chosen from a dropdown: Normal User, Reseller or Master Reseller. The type decides what kind of account the package creates — so when you provision from it (in the panel or from WHMCS) the right account is made automatically, with no separate setting to keep in sync.
- Normal User — a hosting account that owns websites directly.
- Reseller — can create and manage their own customers. You also set how many user accounts they may create.
- Master Reseller — can create both users and other resellers. You set how many user accounts and how many reseller accounts.
Unlimited limits
Any limit — disk, bandwidth, websites, sub-accounts, email, databases or FTP — can be set to unlimited. Each field has an Unlimited tickbox: tick it and the number box disappears; untick it to type a value. An unlimited reseller is still bounded by their own pool.
Dedicated resource pools
A package can carry a dedicated pool — a CPU, RAM and process cap that each website on the plan runs inside, isolated from everyone else. Toggle a package from Shared to Dedicated and its caps pre-fill from your global isolation defaults, ready to edit. On a reseller plan the pool cascades: every website the reseller and their customers create is automatically built with those caps. Set 4 GB on a reseller package and each site across their whole account is capped at 4 GB. See Account isolation for how the enforcement works.
Allocation and overselling
When you create a reseller you allocate them a pool — disk, bandwidth, account slots and site slots. They can only hand out what they've been given. WebDeck refuses to let a reseller oversell their pool.
What resellers can see
Resellers manage their own customers and nothing else. They never see the server, its settings, other resellers' customers, or the isolation/pool controls.
White-label branding
Under Branding you can set the panel's name, logo, favicon and accent colour.
Branding cascades: a reseller's customers see the reseller's brand, not yours. If a reseller sets no brand of their own, they inherit the brand above them.
Security
- Two-factor authentication (TOTP) — enable it on admin accounts
- fail2ban — bans IPs that brute-force; managed from the panel
- Firewall — manage rules from the interface
- Login rate limiting — cap attempts per minute per IP
- API keys — scoped keys for automation
- Audit log — every administrative action, with who and when
Account isolation
WebDeck confines each customer to their own website's files, so one account can't read another's data or exhaust the server. It's on by default for new accounts and needs no configuration — and unlike the big panels, it doesn't require a CloudLinux licence.
What you get
- Filesystem confinement — each SFTP/SSH account is jailed to its own site's folder. It cannot see other customers' files, or browse the wider system.
- Resource limits — CPU, memory and process caps per account, so a single customer can't fork-bomb or hog the box.
- Process cage (optional) — where the kernel supports it, an optional
bubblewrapcage also stops a tenant seeing other tenants' running processes.
New accounts
Every SFTP/SSH account created in WebDeck is isolated automatically. There's nothing to enable and nothing to remember — it's simply how accounts are made.
Existing accounts
Accounts that existed before you upgraded are left exactly as they are. Nothing changes until you choose. To confine one, go to Server → Isolation, find the account and click Isolate. Its files and access are unchanged — it's simply contained. Un-isolate reverses it.
The Isolation page
Server → Isolation shows every SFTP/SSH account on the server, which website it
belongs to, and whether it's isolated. It also tells you what your server supports — resource
limits, and whether the process cage is available. If the cage isn't available, install
bubblewrap and click Refresh. This page also holds your global isolation
defaults — the CPU, RAM and process caps a newly isolated site gets unless a package
says otherwise.
Per-site pools & dedicated package pools
Under the bonnet, an isolated site runs in its own PHP-FPM pool with its own cgroup, so its CPU, RAM and process caps apply to that one site alone — a busy site can't starve its neighbours, and a limit on one never throttles the rest.
You can drive these caps from a package. Set a package's pool to Dedicated and give it CPU/RAM/process values; every website created under an account on that plan is then built isolated with those caps automatically. On a reseller plan it cascades all the way down — the reseller's own sites and every one of their customers' sites inherit the same pool. For example, a reseller package with 4 GB RAM means each website across that reseller's whole account is capped at 4 GB.
To confirm a site's pool is really enforcing on the server, you can check its unit
directly, e.g. systemctl show webdeck-fpm@<site-id> -p MemoryMax,CPUQuota,TasksMax.
Self-healing
If a jail's mount or configuration is ever lost — after a reboot, or a manual change — WebDeck repairs it automatically. You can see what it fixed in the self-heal activity feed on the Server dashboard.
Notifications
WebDeck can alert you when something happens on your server — in the panel via the notification bell in the header, and by email if you set it up. Go to Settings → Notifications to switch on the alerts you want; the bell works even if you never touch the email settings.
What you can be alerted about
- Service down or auto-healed — a core service (web server, database, mail, DNS) stopped, or was restarted for you
- Backups — completed, or failed
- Low disk space
- Security — repeated failed logins or a login from a new location
- Panel updated, and new account created
Critical alerts (a service going down, a failed backup, security) are on by default; chattier ones (every new account) are off until you turn them on.
Customer notifications
Your customers get their own toggles in their panel, for alerts about their own sites — SSL, backups, suspension, account changes. You set the defaults in the admin Notifications tab; each customer can override their own.
Sending method
Out of the box, WebDeck sends through the server's own mail server, so it works with no setup. For the most reliable delivery — especially on a fresh server — switch the sending method to a custom SMTP relay and enter your mail provider's host, port 587, and your mailbox login. Use the Send test email button to confirm it's working.
Updates
WebDeck updates itself. New releases are fetched, applied and verified — and if an update fails to come back up, it rolls itself back automatically.
You can also update on demand from Settings → Updates, and see exactly what changed in each release.
Migrating from cPanel
The cPanel importer reads standard cPanel backup archives and recreates the account in WebDeck — websites, databases, email accounts, DNS records and files.
Importing an account
- Generate a full backup in cPanel (or a
cpmovearchive in WHM) - In WebDeck, go to cPanel Importer
- Upload the archive, or pull it directly from the old server
- Review what was found, then import
Moving a whole server
Bulk import handles many accounts at once — point it at a directory of archives, or at the old server, and let it work through them.
After importing
- Check DNS — point the domains at the new server when you're ready to cut over
- SSL certificates are requested once DNS resolves to the new box
- Test mail before switching MX records
WHMCS module
The WebDeck WHMCS module provisions hosting accounts automatically when an order is paid, and handles the whole lifecycle after that — suspensions, upgrades, usage sync, single sign-on and terminations. It's free, and it talks to your panel over its own API, so your WHMCS server and your WebDeck server can be entirely separate machines.
Requirements
- WHMCS (any currently-supported version) with the Provisioning Modules feature.
- A WebDeck panel reachable from your WHMCS server on port
2087. - WebDeck 2.1.14 or newer for the current module (package-type driven provisioning, dedicated pools and full reseller termination). Older panels provision but won't have those features.
Step 1 — install the module
- Download the module from the WHMCS module page.
- Copy the
webdeck/folder tomodules/servers/webdeck/on your WHMCS server, so you havemodules/servers/webdeck/webdeck.php.
Step 2 — create an API key in WebDeck
- In WebDeck go to Settings → API and create a key.
- Lock it to your WHMCS server's outbound IP. Find that IP by running
curl -s https://api.ipify.orgon the WHMCS server — it isn't always the same as the IP your billing site is served from. - Copy the key (it starts
wdk_). You'll paste it into WHMCS next.
wdp_ format aren't accepted — delete and recreate if you see an
"old format" message.
Step 3 — add the server in WHMCS
- System Settings → Servers → Add New Server.
- Set Module to WebDeck.
- Hostname = your panel's hostname; Port =
2087; tick Secure (SSL). - Paste the API key into the Access Hash field. (Leave username/password blank — the module authenticates with the key.)
- Click Test Connection — it should go green.
2087. The module
handles that automatically — it verifies TLS where it can and falls back safely for the
self-signed panel certificate — so Test Connection works without extra configuration.
Step 4 — create a product
- Create a hosting product with Type = Shared Hosting so WHMCS asks the customer for a domain at checkout, and require the domain.
- On the product's Module Settings tab, choose WebDeck and your server.
- Pick a Package from the dropdown — these load live from your panel. The package's type (User, Reseller or Master Reseller) decides what kind of account the order creates, so there's nothing else to set.
- Or choose Custom resources and set Disk, Bandwidth and Max websites on the product itself. Custom always creates a normal user account.
- Save, then place a test order to confirm the flow end to end.
Selling users, resellers & master resellers
There's no separate "account level" to set on the product — the package type drives the role. To sell a reseller plan, create a Reseller-type package in WebDeck (optionally with a dedicated pool and account limits), then point a WHMCS product at it. This means a product can never drift out of sync with the plan it sells.
- User package → a normal hosting account.
- Reseller package → a reseller who can create their own customers, bounded by the account limits and pool you set on the package.
- Master Reseller package → can create both users and resellers.
If a package has a dedicated pool, every website provisioned under it — including a reseller's customers' sites — is automatically isolated with that pool's CPU, RAM and process caps. See Resellers & packages.
The full lifecycle it automates
- Create — order paid → account (and its website, if a domain was ordered) is created with the package's quotas and the customer's login.
- Suspend / Unsuspend — an unpaid invoice suspends the account on WHMCS's schedule; payment unsuspends it. The customer's data is untouched throughout.
- Change package — upgrades and downgrades re-apply the new plan's quotas.
- Change password — a password change in WHMCS updates the account.
- Terminate — cancellation removes the account and everything under it. For a reseller that means their own hosting account and all their customers, with every website and database — cleanly, and scoped to that reseller only.
- Usage sync — disk and bandwidth are pulled back into WHMCS nightly in a single call per server, so client accounts show real usage.
- Single sign-on — from the WHMCS client area the customer clicks through and lands in the panel already logged in. Works for users and resellers.
- Admin service tab — the WHMCS admin sees the account's live status, type and disk usage on the service page.
Upgrading the module
Replace the webdeck/ folder with the new version. Products you configured
under an older module keep working — the module detects the earlier field layout and reads
it correctly, so existing custom-resource products don't misread after an upgrade.
curl -s https://api.ipify.org on the
WHMCS box), and that the key is a current wdk_ key created in the panel you're
pointing at — remember each WebDeck panel has its own keys.
API keys
WebDeck has a REST API for automation. Create keys under Settings → API.
- Lock keys to an IP wherever you can — a key that only works from one address is far safer than one that works from anywhere
- Scope them to what they need
- Revoke a key the moment it's not needed
The API is what the WHMCS module uses, and you can use it for your own automation — provisioning, monitoring, or wiring WebDeck into whatever else you run.
REST API reference
WebDeck exposes a REST API for provisioning and automation. It is the same API the WHMCS module uses, so anything WHMCS can do, your own scripts can do.
Base URL
Everything below is relative to that. If you are using the panel's free hostname the
base URL looks like https://srv-a1b2c3.wd-server.co.uk:2087/api.
Authentication
Create a key under Settings → API. Keys begin with
wdk_ and are shown once — only a hash is stored, so copy it then.
Send it as a bearer token:
An X-Api-Key: wdk_yourkeyhere header works too. If the key has an IP
allow-list, requests from any other address are rejected — always set one where you
can.
Endpoints
| Method | Path | What it does |
|---|---|---|
GET |
/provision/test |
Check the key and IP are valid |
GET |
/provision/packages |
List packages (id, name, owner) |
POST |
/provision/create |
Create a hosting account, optionally with its first site |
POST |
/provision/suspend |
Suspend an account |
POST |
/provision/unsuspend |
Unsuspend an account |
POST |
/provision/terminate |
Delete an account and everything it owns |
POST |
/provision/change-password |
Set a new account password |
POST |
/provision/change-package |
Move an account onto another package |
GET |
/provision/usage |
Disk and bandwidth usage. Optional ?username= |
POST |
/provision/sso |
One-time token to log a customer straight in |
Creating an account
username and password are required. Everything else is
optional: pass a package_id to take the quotas and account type from a
package, or set the limits directly.
Returns:
Fields for create
username,password— requiredemail,domain— optional; a domain creates the first sitepackage_id— takes quotas and account type from that packagedisk_mb,bandwidth_mb,max_sites— set limits directly instead of using a packagelevel—user,resellerormaster_resellerreseller_id— create the account under a specific reseller
Acting on an account
Suspend, unsuspend, terminate and SSO all take just a username:
change-password additionally takes password, and
change-package takes package_id.
Single sign-on
/provision/sso returns a one-time token and a relative URL. Send the
customer to that URL on your panel and they are logged straight into their account —
this is how the "Login to panel" button works in WHMCS.
Errors
401— missing or invalid key, or the request came from an IP the key does not allow. If the key predates thewdk_format, delete it and create a new one.404— the account or package does not exist400— a required field is missing or invalid
terminate deletes an account and
everything it owns. Lock every key to an IP, give each integration its own key, and
revoke keys you are not using.
What your customers can do
When a customer logs in they see only their own account — never the server, never anyone else. Here's what's available to them, so you know what you're selling.
Websites
- See their sites, SSL status and PHP version
- Edit PHP Settings — memory limit, upload size, execution time
- Toggle Force HTTPS and page caching
- View analytics — visits, top pages, referrers, 404s
- Password-protect directories
- Create mailboxes, aliases and forwarders
- Open webmail without leaving the panel
- Get the settings for Outlook, Thunderbird or their phone
Files & databases
- File manager — browse, upload, edit, download
- FTP accounts
- Create databases and users; open phpMyAdmin
- Cron jobs
Backups
- Restore their own site from the backups you manage — scoped to their own domains, restore only, they can't touch anyone else's
Apps
- Install WordPress and thirty-seven other applications in one click, with the database created and SSL live from the start
One-click apps
Fifty-three applications install properly — database created, permissions set, config written, SSL working from the first request. Go to Apps on a website, pick one, and it's up in a minute or two.
Websites & blogs
- WordPress — plus a WordPress + WooCommerce variant
- Ghost, Drupal, Grav, Typecho, Pico, Bludit, HTMLy
- Laravel — for developers starting a project
E-commerce
- WooCommerce, Magento, PrestaShop, OpenCart
Business, CRM & billing
- SuiteCRM, Dolibarr — CRM and ERP
- Invoice Ninja, Akaunting, Firefly III — invoicing and accounts
- Kimai — time tracking
- Snipe-IT — IT asset management
- Monica — personal CRM
- WHMCS — needs your own licence
Support & helpdesk
- osTicket, GLPI
Files, docs & productivity
- Nextcloud — file sync and share
- BookStack, DokuWiki, MediaWiki — docs and wikis
- Kanboard — project boards
- wallabag, Shaarli, LinkAce — read-later and bookmarks
- Moodle, Chamilo — learning management
Community, media & tools
- HumHub — your own social network
- Piwigo — photo gallery
- Matomo — privacy-friendly analytics
- YOURLS — your own URL shortener
- Roundcube, phpList, FreshRSS, Cachet
Files, FTP & cron
File manager
Browse, upload, download, rename, delete and edit files straight in the panel. Useful for a quick config fix without opening SSH.
FTP accounts
Create FTP accounts per site under FTP Accounts. Each is scoped to its own home directory — an FTP user can't wander into another site's files.
- Host: the domain or the server IP
- Port: 21 (FTP) — use FTPS where your client supports it
- Username: as created in the panel
Cron jobs
Create scheduled tasks under Cron Jobs. Standard cron syntax, with common schedules available as presets if you'd rather not remember the fields.
wp-cron.php rather than relying on WordPress's
traffic-triggered version.
Troubleshooting
Most problems fall into a handful of categories, and nearly all of them are fixable in a couple of minutes once you know where to look. If yours isn't here, email us — we'd genuinely rather hear about it than have you struggle.
The panel won't load at all
Work through these in order:
- Is the panel running?
systemctl status vm6panel - Is the web server running?
systemctl status apache2(orhttpdon Rocky/Alma, ornginx) - Is port 2087 open — both in the server's firewall and at your VPS provider? A lot of providers have their own firewall in front of the box.
- Check the panel's log:
journalctl -u vm6panel -n 50
"Your connection is not private" warning
If you're on the IP address, that's expected — the IP uses a self-signed certificate. Use your server's free hostname instead (the installer printed it, and it's shown in the panel). That address has a proper trusted certificate.
If you're on the hostname and still see a warning, the certificate may not have been fetched yet. Give it a minute, then reload. Chrome caches certificate errors aggressively — try an incognito window to be sure.
An SSL certificate won't issue for a customer's site
Nearly always DNS. Let's Encrypt has to reach the domain from the public internet, so:
- Check the domain resolves to your server:
dig +short thedomain.com - If it doesn't show your server's IP, the A record is wrong or hasn't propagated yet — fix that first, then wait
- Once DNS is right, run self-heal from the dashboard and it'll pick the certificate up
Email is going to spam
Go to Email → Deliverability. It checks everything and tells you exactly what's wrong. The usual culprits, in order of how often they're the problem:
- Missing reverse DNS (rDNS/PTR) — set this with your VPS provider so your IP resolves back to your mail hostname. Without it, a lot of receivers will bin your mail no matter what else you do.
- SPF, DKIM or DMARC missing — WebDeck sets these up, but if the domain's DNS is hosted elsewhere you'll need to copy the records across.
- A poor-reputation IP range — some VPS ranges are simply distrusted. If that's you, use an SMTP relay.
Mail isn't sending at all
- Is port 25 outbound blocked? Many providers block it by default
and will unblock on request. Test with
telnet gmail-smtp-in.l.google.com 25 - Check the mail queue in the panel under Logs — it'll show what's stuck and why
- If port 25 is blocked and your provider won't open it, use an SMTP relay
A website shows the wrong content, or "It works!"
Usually a virtual host that didn't get written, or a DNS record pointing somewhere unexpected. Run self-heal from the dashboard — it rebuilds missing or drifted vhost configuration. If it persists, check the domain actually resolves to this server.
A PHP module won't enable
The error message names the packages it tried. If none of them were found, that module may not be packaged for your PHP version on your distribution. Tell us which module and which OS and we'll add the right package name — it's usually a one-line fix in the next release.
A site is slow
- Check the dashboard — is the server itself under load?
- Turn on page caching for the site
- Raise the site's memory limit under Edit PHP Settings if it's a heavy app like Magento
- Make sure OPcache is enabled (PHP Versions → modules)
- Look at Resource Usage to see which account is using what
I've locked myself out
If fail2ban has banned your IP, you'll need console access from your VPS provider.
Then: fail2ban-client set sshd unbanip YOUR.IP.HERE
If you've forgotten the admin password, you can reset it from the server — ask support and we'll walk you through it.
An update went wrong
WebDeck rolls itself back automatically if an update fails to come back up. If you're stuck on an old version, check Settings → Updates for the error, and send it to us.
Where are the logs?
- Panel:
journalctl -u vm6panel -f - Install log:
/var/log/webdeck-install.log - Web, mail and panel logs: in the panel under Logs
- Mail queue:
mailq
Glossary
Hosting is full of jargon. Here's the plain-English version of the terms you'll meet in WebDeck — no shame in checking.
- A record — a DNS entry that points a domain at an IP address.
- DKIM — a cryptographic signature on outgoing mail proving it really came from your domain. Big deal for not landing in spam.
- SPF — a DNS record listing which servers are allowed to send mail for your domain.
- DMARC — a DNS record telling receivers what to do with mail that fails SPF and DKIM.
- rDNS / PTR — reverse DNS. Makes your IP resolve back to a hostname. Set it with your VPS provider; mail deliverability depends on it.
- MX record — the DNS entry saying which server receives mail for a domain.
- Virtual host (vhost) — the web server's configuration for one website. WebDeck writes these for you.
- Document root — the folder on disk that a website is served from.
- PHP-FPM — the process manager that runs PHP for nginx and modern Apache setups.
- Let's Encrypt — the free certificate authority WebDeck uses for SSL.
- Propagation — the delay between changing a DNS record and the world seeing the change.
- TTL — how long DNS resolvers cache a record before checking again.
- Reseller — an account that can create and manage its own customers, within a quota you allocate.
- Self-heal — WebDeck's engine that rebuilds missing configuration and repairs drift automatically.
Getting support
WebDeck is built and maintained by VM6 Networks Ltd — a small UK hosting company. There's no support ticket queue with fifty people in front of you; you email us and we read it.
Bug reports genuinely get fixed, often in the next release. If something's broken, wrong, confusing, or just annoying — tell us. We'd much rather know.
How to get help fast
Email support@vm6.co.uk and include:
- Your OS and version — e.g. "Rocky Linux 9"
- Your WebDeck version — shown in the top-right of the panel
- What you were doing when it broke
- The exact error, copied and pasted — a screenshot works too
- Anything from the logs —
journalctl -u vm6panel -n 50
That's usually enough for us to spot it straight away. If it's a bug, you'll normally see the fix in the next release with a note in the changelog.