Quick Start

What is Hostzeros?

Hostzeros is a self-hosted control panel that lets you manage websites on any VPS (Virtual Private Server). Think of it as a modern alternative to cPanel — but cheaper, faster, and developer-friendly.

It consists of two parts:

  • Control plane — the web app at hostzeros.com where you manage everything
  • Agent — a lightweight Go binary that runs on your VPS and executes commands

The agent connects outbound to the control plane, so you don't need to open any ports on your VPS.

Requirements

Before you start, you need:

  • A VPS running Ubuntu 22.04 or 24.04 (64-bit)
  • At least 1GB RAM (2GB+ recommended)
  • Root or sudo access to the VPS
  • A Hostzeros account (free at hostzeros.com)
Note: Any VPS provider works — Contabo, Hetzner, DigitalOcean, Linode, Vultr, etc.

Install the Agent

SSH into your VPS and run the install script:

bash
curl -s https://hostzeros.com/install | bash

The script will:

1
Download and install Docker + Docker Compose
2
Download the Hostzeros agent binary
3
Create a systemd service so the agent starts on boot
4
Show you a registration token to connect the server
Note: The install process takes about 2–3 minutes on a fresh VPS.

Connect a Server

After running the install script:

1
Go to the Hostzeros dashboard and click "Add Server"
2
Enter your VPS IP address, a name, and the registration token shown by the install script
3
Click "Add Server" — the agent will connect within seconds
4
Wait for the server status to change to "Online"
Tip: The server status updates every 60 seconds. Refresh the page if it stays "Offline" for more than 2 minutes.

Sites

Create a Site

A site is a web application running in its own Docker container on your VPS.

1
Go to your server and click "New Site"
2
Enter a site name (used internally — e.g. my-blog)
3
Optionally enter a primary domain (e.g. yourdomain.com). If you leave it blank, a temporary .nip.io URL is assigned so you can test immediately
4
Choose a runtime: PHP, Node.js, or Static
5
Optionally check "Create a database" to provision a MariaDB database at the same time
6
Click "Create site"

Provisioning takes 30–60 seconds. Once the status shows Active, your site is live.

PHP, Node.js & Static

PHP — Runs Apache + PHP (8.1, 8.2, or 8.3). Files are served from /var/www/html/ inside the container, mapped to your site's public/ folder on the VPS. Perfect for WordPress, Laravel, and any PHP app.

Node.js — Runs your Node.js app (18, 20, or 22). You specify a start command (e.g. npm start) and the port your app listens on. Traefik proxies incoming HTTP/HTTPS to that port.

Static — Nginx serves static files directly. Upload your HTML/CSS/JS via the file manager. Perfect for frontend apps, documentation sites, or landing pages.

Add a Domain

1
In your domain registrar (Hostinger, Cloudflare, etc.), add an A record pointing to your server's IP address
2
Go to your site → Domains & SSL section
3
Type the domain name and click "Add"
4
The agent updates Traefik routing automatically. SSL will be issued automatically within a minute
Note: DNS propagation can take up to 24 hours, but usually happens in minutes. Cloudflare DNS propagates instantly.
Tip: You can add multiple domains to the same site. All will be routed to the same container.

Create a Subdomain Site

Each subdomain can be its own independent site with separate files, databases, and SSL.

1
On the parent site's page, click "Add Subdomain" in the Domains & SSL section
2
Type the subdomain prefix (e.g. blog for blog.yourdomain.com)
3
Add the DNS A record shown — it points to the same server IP
4
A new site is created, completely independent from the parent
Tip: Add a wildcard * A record in your DNS pointing to the server IP — then any subdomain works without individual A records.

Delete a Site

Warning: Deleting a site is permanent. All files, databases, and cron jobs for that site are removed.

Go to your site → scroll to Danger Zone → click "Delete site". You will be asked to confirm before anything is deleted.

The agent will stop the container, remove Docker volumes, and clean up the VPS. Any associated database and database users are also deleted automatically.

SSL & HTTPS

How SSL Works

Hostzeros uses Traefik as a reverse proxy on your VPS. Traefik handles SSL certificates via the Let's Encrypt ACME HTTP-01 challenge — no DNS API keys needed.

When you add a domain, Traefik automatically requests a free SSL certificate from Let's Encrypt. Certificates are renewed automatically before they expire (every 90 days).

Enable SSL

SSL is issued automatically when you add a real domain. There is nothing to click.

If you need to manually trigger it: go to the site → Domains & SSL → click the lock icon next to your domain.

The status will show "Issuing…" then change to "SSL active" within 30–60 seconds.

Auto-issuance & Renewal

Every 10 minutes, a background job checks for domains without active SSL and triggers issuance automatically. This means even if you add a domain while the server is offline, SSL will be issued once the server comes back online.

Certificates renew automatically via Traefik's built-in renewal. You never need to manually run certbot.

Troubleshooting SSL

If SSL issuance fails, common causes are:

  • DNS not propagated yet — Let's Encrypt can't reach your domain. Wait a few minutes and try again.
  • Port 80 blocked — The HTTP-01 challenge requires port 80 to be open. Check your VPS firewall.
  • Domain points to wrong IP — Verify your A record points to the correct server IP.
  • Rate limit — Let's Encrypt allows 5 failed attempts per domain per hour. Wait and retry.
Note: Temporary domains (nip.io, sslip.io) are never eligible for SSL — use a real domain.

File Manager

Browse & Navigate

The file manager is available on every site's detail page under "Files". It shows the contents of your site's public/ directory.

Click any folder to navigate into it. Use the breadcrumb at the top to go back. Folders appear first, sorted alphabetically, followed by files.

Edit Files

Click the pencil icon (or click directly on a file name) to open the code editor.

The editor features:

  • Syntax highlighting for PHP, JS, HTML, CSS, JSON, and more
  • Line numbers
  • Tab key support

Click "Save" to write the file back to the VPS. Changes are immediate.

Warning: Large files (over 1MB) may be slow to load in the browser editor. Use SFTP for large files.

Upload Files

There are two ways to upload:

Drag & drop — Drag files from your computer onto the file manager area. A blue drop zone appears.

Upload button — Click the Upload button (cloud with arrow) in the toolbar and select files.

Multiple files can be uploaded at once. Progress is shown per file.

Note: Maximum file size per upload is 50MB. For larger files, use SFTP or deploy via Git.

Create Folders & Files

Click the + folder icon in the toolbar to create a new directory. You will be prompted for the folder name.

To create a new file, click the + file icon and enter the filename (e.g. index.php). An empty file is created which you can then edit.

To rename a file or folder, click the three-dot menu (⋯) next to it and select Rename.

Server File Manager

The server-level file manager lets you browse all sites' files from one place, without switching between sites.

Access it from your server's detail page under "Server Files". It starts at /opt/easypanel/sites/ and shows all site directories.

Navigate into any site's folder to browse and edit its files. All the same operations are available: edit, upload, delete, rename.

Note: The server file manager operates on the VPS filesystem directly. Be careful when deleting — there is no recycle bin.

Databases

Create a Database

Hostzeros manages a MariaDB instance on your VPS. Each site can have its own database (or share one).

1
Go to your site → Databases section
2
Click "Create database"
3
Enter a name (letters, numbers, hyphens)
4
A database and user are created. The credentials are shown once — save them!
Warning: The database password is shown only once. It is not stored in the panel. Save it immediately to a password manager.

Database Users

Each database comes with a dedicated user that has full privileges on that database only. You can also create additional users.

To rotate (regenerate) a password: click the rotate icon next to the user. The new password is shown once.

phpMyAdmin

Need a GUI for your database? Deploy phpMyAdmin with one click from the Databases section.

1
In the Databases section, click "Deploy phpMyAdmin"
2
Wait ~30 seconds for it to start
3
Click the link to open phpMyAdmin (runs on port 8889)
Note: phpMyAdmin is exposed on the server IP directly (no SSL). Use it from a trusted network or remove it when done.

Rotate Password

To rotate a database user's password:

1
Go to the site → Databases → expand the database
2
Click the rotate icon next to the user
3
The new password is shown once. Update your app's environment variables immediately

Environment Variables

Add Variables

Environment variables are injected into your site's container at startup. They're perfect for API keys, database URLs, and secrets.

1
Go to your site → Environment Variables
2
Click "Edit"
3
Add rows with KEY = value pairs
4
Click "Save"

Common variables:

APP_KEY=base64:xxxx...
APP_URL=https://yourdomain.com
DB_HOST=mariadb
DB_DATABASE=mysite_db
DB_USERNAME=mysite_user
DB_PASSWORD=secret

Applying Changes

Environment variable changes take effect after the site container is restarted.

After saving, click "Restart" in the site header to apply the new values.

Tip: For Laravel, run php artisan config:cache via the terminal after updating env vars.

Deployments

Deploy from Git

Hostzeros can deploy any public or private Git repository directly to your site.

1
Go to your site → Deployments
2
Enter your Git repo URL (e.g. https://github.com/user/repo.git)
3
Optionally specify a branch (defaults to main)
4
Click "Deploy"

The agent clones the repo into your site's public/ directory. Deployment logs appear in real time.

Build Commands

For apps that need to be compiled (React, Vue, Node.js), add a build command:

Example build commands:

  • npm install && npm run build
  • composer install --no-dev
  • pip install -r requirements.txt

The command runs inside the site's container after the code is cloned.

Deployment Logs

Each deployment shows a status (Pending → Running → Success/Failed) and full logs.

Click on any deployment row to expand and see the full output including build command output, errors, and timing.

Cron Jobs

Add a Cron Job

1
Go to your site → Cron Jobs
2
Enter a schedule using cron syntax (see below)
3
Enter the command to run
4
Click "Add"

Common use cases:

  • Laravel scheduler: php artisan schedule:run every minute
  • WordPress cron: wp cron event run --due-now every 5 minutes
  • Custom scripts every hour

Cron Syntax

Cron expressions have 5 fields: minute hour day-of-month month day-of-week

* * * * *    Every minute
0 * * * *    Every hour (on the hour)
0 0 * * *    Every day at midnight
0 0 * * 0    Every Sunday at midnight
*/5 * * * *  Every 5 minutes
30 3 * * *   Every day at 3:30 AM
Tip: Use the preset buttons in the Hostzeros UI to quickly set common schedules.

Backups

Configure S3

Hostzeros backs up to any S3-compatible bucket: AWS S3, Backblaze B2, Cloudflare R2, MinIO, etc.

1
Go to Team SettingsS3 Configurations
2
Add a configuration: endpoint URL, bucket name, access key, secret key, region
3
Click "Save"

For AWS S3: endpoint is s3.amazonaws.com. For Cloudflare R2: use your R2 endpoint URL.

Backup Policy

Set up automatic backups per site:

1
Go to your site → Backups → click "Configure"
2
Choose frequency: Hourly, Daily, Weekly, or Monthly
3
Set retention (how many days to keep old backups)
4
Choose whether to include files, database, or both
5
Click "Save policy"
Tip: Click "Backup now" to trigger an immediate backup at any time.

Restore a Backup

To restore a previous backup:

1
Go to your site → Backups
2
Find the backup run you want to restore
3
Click the restore icon
4
Confirm the restore — site files will be overwritten
Warning: Restoring a backup overwrites all current site files. This cannot be undone.

One-Click Apps

Install WordPress

1
Go to your site → One-Click Apps
2
Click WordPress
3
Confirm the admin email, username, and password
4
Optionally set an install path (e.g. /blog) to install in a subdirectory
5
Click "Install WordPress"

The agent downloads WordPress, configures wp-config.php with your database credentials, and runs the installer. Takes about 30–60 seconds.

Note: Make sure you have a database created for the site first. The installer auto-detects the database from your .env file.

Install Laravel

1
Go to your site → One-Click AppsLaravel
2
Confirm the install and click "Install Laravel"

This runs composer create-project laravel/laravel . in your site's public folder and sets a random APP_KEY.

Email

Email Accounts (Mailboxes)

Hostzeros doesn't host email (running a mail server has serious deliverability challenges). Instead, the Email tab generates the exact DNS records you need for third-party email providers.

Go to your site → EmailEmail accounts tab. Choose a provider:

  • Zoho Mail — Free for up to 5 users. Great for individuals and small teams.
  • Google Workspace — Gmail with your domain. Best deliverability.
  • Microsoft 365 — Outlook + Office apps.
  • Fastmail — Privacy-focused, $3/user/month.

The panel shows the exact MX, SPF, DMARC, and DKIM records to add in your DNS provider. Copy each one and add them in Hostinger/Cloudflare/Namecheap.

Transactional SMTP

For your app to send emails (password resets, notifications), you need a transactional email service.

Go to EmailTransactional (SMTP) tab. Choose a provider:

  • Brevo — Free 300 emails/day. Best for small apps.
  • Mailgun — $0.80 per 1,000 emails. Good analytics.
  • SendGrid — Free 100/day, 40k first month.

The panel generates the environment variables to paste into your site's Environment Variables section. For Laravel:

MAIL_MAILER=smtp
MAIL_HOST=smtp-relay.brevo.com
MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-smtp-key
MAIL_FROM_ADDRESS=noreply@yourdomain.com
MAIL_FROM_NAME="My App"

Teams

Create a Team

Teams let you organize servers and share access with other people. Every resource (server, site, database) belongs to a team.

1
Click the team switcher in the sidebar (top left)
2
Click "New team"
3
Enter a team name
4
Click "Create"

Invite Members

1
Go to Team SettingsMembers
2
Enter the email address of the person to invite
3
Click "Send invite"
4
They receive an email with a link to accept the invitation

Team members have access to all servers and sites within that team.

Note: Invitations expire after 7 days. Resend if the person misses the email.

Something missing? Open an issue on GitHub