Installation Guide

Install CloudBill Pro on your server in minutes using the web-based installer.

Step 1 — Upload Files

Extract the downloaded ZIP and upload all files to your web server. The application should be accessible at your domain root (e.g., https://billing.yourdomain.com/) or a subdirectory.

Important: Do NOT upload the marketing/ folder to your live installation directory. That folder is the CodeCanyon marketing website, not part of the billing app.

Step 2 — File Permissions

Set the following directories to be writable by the web server:

chmod 775 config/
chmod 775 cache/
chmod 775 logs/
chmod 775 uploads/
chmod 775 uploads/tickets/
chmod 775 uploads/invoices/

Step 3 — Create a Database

Create a new MySQL database and user. Via command line:

CREATE DATABASE cloudbillpro CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cbpuser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON cloudbillpro.* TO 'cbpuser'@'localhost';
FLUSH PRIVILEGES;

Or use your hosting control panel (cPanel → MySQL Databases).

Step 4 — Web Installer

Visit https://yourdomain.com/install in your browser. You'll be guided through 5 steps:

1
Welcome — Overview and license agreement
2
Requirements Check — Verifies PHP version, extensions, and directory permissions
3
Database Setup — Enter your database credentials; the installer creates all tables and seed data automatically
4
Site Configuration — Set your site name, URL, admin email, and admin password
5
Complete — Installation complete! Links to your admin panel and cron job setup

Step 5 — Configure Cron Job

Add this cron job to run every minute for automated billing:

* * * * * php /home/user/public_html/crons/cron.php >> /home/user/logs/cbpro-cron.log 2>&1

Or via web URL (add your cron secret from Settings → System):

* * * * * curl -s "https://yourdomain.com/cron?secret=YOUR_SECRET" > /dev/null

Step 6 — Secure the Install Folder

After installation, either delete or restrict access to the install/ directory:

rm -rf /path/to/install/
# OR rename it
mv install install_bak_$(date +%Y%m%d)
Leaving the installer accessible after installation is a security risk. Always remove it.

Nginx Configuration

If using Nginx instead of Apache, add this to your server block:

server {
    listen 80;
    server_name billing.yourdomain.com;
    root /home/user/public_html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Block sensitive directories
    location ~* ^/(config|core|logs|cache|install)/ {
        deny all;
        return 403;
    }

    location ~ /\.(env|git) {
        deny all;
        return 403;
    }
}

Troubleshooting

ProblemSolution
White screen / 500 errorCheck logs/error.log. Enable display_errors temporarily: add ini_set('display_errors',1); to the top of index.php
404 on all pagesEnsure mod_rewrite is enabled (a2enmod rewrite) and AllowOverride All is set for your document root
Database connection failedVerify host, port, name, username, and password in config/config.php
File upload errorsCheck permissions on uploads/ directory — must be writable (chmod 775)
Installer loops or won't proceedDelete config/config.php if it exists and restart the installer