Faveo Helpdesk Multi-OS Automated Installer

An enterprise-grade, automated Bash installation suite for deploying Faveo Helpdesk on Linux enterprise distributions. This installer handles the entire deployment pipelineβ€”from OS verification and dependency provisioning to database orchestration, SSL/TLS termination, search engine setup, background queue worker configuration, and Faveo core application bootstrap.


πŸ“‹ Table of Contents

  1. Architecture Overview
  2. Key Features
  3. Supported Operating Systems & Matrix
  4. System Requirements & Prerequisites
  5. Repository Structure
  6. Installation & Usage
  7. Command-Line Arguments Reference
  8. Deployment Examples
  9. Technology Stack & Services Provisioned
  10. Post-Installation & Verification
  11. Failure Recovery & Rollback Engine
  12. Troubleshooting & FAQ
  13. Maintainers & Support

πŸ— Architecture Overview

The installation suite is split into a modular orchestrator and distribution-specific execution engines:

                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚           faveo.sh            β”‚
                  β”‚   (Root check, Shell verify,  β”‚
                  β”‚     OS detection & banner)    β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                                                 β”‚
         β–Ό (Debian / Ubuntu)                               β–Ό (RHEL / Rocky / AlmaLinux / CentOS)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         debian_block.sh         β”‚               β”‚          rhel_block.sh          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€               β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ APT / Sury Repositories       β”‚               β”‚ β€’ DNF / Remi / EPEL Modules     β”‚
β”‚ β€’ Apache2 / Nginx (Debian paths)β”‚               β”‚ β€’ Httpd / Nginx (RHEL paths)    β”‚
β”‚ β€’ MySQL 8.0/8.4 / MariaDB 10/11 β”‚               β”‚ β€’ MySQL 8.0/8.4 / MariaDB 10/11 β”‚
β”‚ β€’ systemd / ufw integration     β”‚               β”‚ β€’ SELinux / firewalld handling  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚                                                 β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                          β”‚
                                          β–Ό
                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                     β”‚         Faveo Core Application          β”‚
                     β”‚  β€’ PHP 8.4+ & IonCube Loader            β”‚
                     β”‚  β€’ Redis & Supervisor Daemons           β”‚
                     β”‚  β€’ Meilisearch Full-Text Engine         β”‚
                     β”‚  β€’ NATS Discovery Server (Optional)     β”‚
                     β”‚  β€’ Node.js 22.x & Puppeteer (Optional)  β”‚
                     β”‚  β€’ Artisan CLI Auto-Installer           β”‚
                     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  1. faveo.sh (Main Orchestrator):
    • Validates that the executing shell is native Bash and running with root/sudo privileges.
    • Detects the Linux distribution (/etc/os-release / /etc/debian_version) and validates OS major/minor compatibility.
    • Delegates installation arguments and environment variables to the respective engine (debian_block.sh or rhel_block.sh).
  2. debian_block.sh (Debian/Ubuntu Engine):
    • Integrates with OndΕ™ej SurΓ½ / PPA repositories for modern PHP and Apache2/Nginx packages.
    • Handles apt-specific dependencies, dpkg packaging for wkhtmltox, and Debian service management.
  3. rhel_block.sh (RHEL-Family Engine):
    • Integrates with EPEL, Remi modular repositories, and CodeReady Builder (CRB / PowerTools).
    • Manages RHEL-specific intricacies (e.g., RHEL 10 modularity changes, Valkey/Redis modular streams, AppStream packages).
    • Configures SELinux (permissive transition for proxying) and firewalld port openings.

πŸš€ Key Features


πŸ’» Supported Operating Systems & Matrix

Distribution Family Version / Codename Architecture Supported Engines
Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS x86_64 / amd64 debian_block.sh
Debian 11 (Bullseye), 12 (Bookworm), 13 (Trixie) x86_64 / amd64 debian_block.sh
Red Hat Enterprise Linux (RHEL) 8.x, 9.x, 10.x x86_64 rhel_block.sh
Rocky Linux 8.x, 9.x, 10.x x86_64 rhel_block.sh
AlmaLinux 8.x, 9.x, 10.x x86_64 rhel_block.sh
CentOS Stream 8 / 9 x86_64 rhel_block.sh

βš™οΈ System Requirements & Prerequisites

Minimum Hardware

Licensing & Domain Prerequisites

  1. Domain Name: A fully qualified domain name (FQDN) with an A record pointing to the server’s public IP address.(Also supports internal installation).
  2. Faveo License Key: A 16-character license key obtained from Faveo Billing Portal.
  3. Faveo Order Number: An 8-character order identifier associated with your license.
  4. Elevated Privileges: root or sudo access.
  5. Billing Access: Server needs to have an active access to out billing and lincese portal domain’s : (billing.faveohelpdesk.com & license.faveohelpdesk.com).

πŸ“ Repository Structure

.
β”œβ”€β”€ faveo.sh            # Main entry point & OS dispatcher
β”œβ”€β”€ debian_block.sh     # Debian / Ubuntu provisioning module
β”œβ”€β”€ rhel_block.sh       # RHEL / Rocky / AlmaLinux / CentOS provisioning module
└── README.md           # Documentation & usage guide

πŸ“₯ Installation & Usage

1. Clone or Download the Repository

curl -sL "https://github.com/faveosuite/faveo-server-images/archive/refs/heads/master.tar.gz" \
  | tar -xz --strip-components=3 "faveo-server-images-master/scripts/installation-scripts/faveo_helpdesk"
cd faveo_heldpesk
chmod +x *

Run the main script with root privileges without arguments. The installer will present an interactive wizard:

sudo ./faveo.sh

What the wizard will prompt:

  1. Domain Name: e.g., support.example.com (do not prefix with https://)
  2. Admin Email: e.g., admin@example.com (used for Let’s Encrypt and administrator alerts)
  3. License Code: 16-character Faveo license
  4. Order Number: 8-character Faveo order number
  5. Release Channel: 1) Official (Stable) (recommended), 2) RC, or 3) Beta
  6. Environment: 1) Production (recommended), 2) Development, or 3) Testing
  7. Meilisearch: Yes (recommended for >100 tickets/day) or No
  8. NATS / Agent Discovery: Yes or No (default: No)
  9. PHP Version: 8.4 (default) or custom (8.2, 8.3)
  10. Node.js & Puppeteer: Yes (for asset graphical reports) or No
  11. SQL Server Engine: 1) MySQL (8.0/8.4) (default) or 2) MariaDB (10.6/11.8)
  12. SQL Location: 1) Local (installed on server) or 2) Remote (connect to RDS/existing DB)
  13. Web Server: 1) Apache or 2) Nginx
  14. SSL/TLS Type: 1) FreeSSL (Let's Encrypt), 2) Self-Signed, or 3) Paid SSL

Method 2: Unattended / Automated CLI Mode

Pass arguments directly to ./faveo.sh for non-interactive scripting:

sudo ./faveo.sh \
  --domain support.example.com \
  --email admin@example.com \
  --license ABCDEFGHIJKLMNOP \
  --order 12345678 \
  --webserver nginx \
  --ssl certbot \
  --sql mysql \
  --php 8.4 \
  --meili yes \
  --node yes \
  --nats no \
  --release official \
  --faveoenv production

πŸ›  Command-Line Arguments Reference

CLI Option Allowed Values Default Description
--domain string (FQDN) Required Fully Qualified Domain Name for Faveo (e.g. desk.example.com)
--email email format Required Administrative contact email address
--license 16-char string Required Faveo license serial key
--order 8-char string Required Faveo order identifier
--webserver apache | nginx apache HTTP web server software to install and configure
--ssl certbot | self-signed | paid-ssl certbot SSL certificate provisioning method
--sql mysql | mariadb mysql Relational database management system
--php 8.2, 8.3, 8.4 (or >= 8.2) 8.4 PHP runtime version
--release official | rc | beta official Faveo software release branch
--faveoenv production | development | testing production Laravel application execution environment
--meili yes | no yes Install and configure Meilisearch full-text engine
--node yes | no no Install Node.js 22.x and Puppeteer for graphical reporting
--nats yes | no no Install NATS server for Agent network discovery
--certfile file path | base64 | PEM None Certificate path or PEM string (required if --ssl paid-ssl)
--keyfile file path | base64 | PEM None Private key path or PEM string (required if --ssl paid-ssl)
--cacertfile file path | base64 | PEM None CA bundle path or PEM string (required if --ssl paid-ssl)
--sqlreser yes | no no Set to yes if utilizing a remote database server
--sqlhost IP | Hostname localhost Remote database host address
--sqlport 1-65535 3306 Remote database port
--sqlusername string None Remote database administrative user
--sqlpassword string None Remote database administrative password
--sqlsecure yes | no no Enable SSL/TLS encryption for database traffic
--sqlsslca file path | base64 | PEM None MySQL SSL Certificate Authority file
--sqlsslcert file path | base64 | PEM None MySQL SSL client certificate file (optional)
--sqlsslkey file path | base64 | PEM None MySQL SSL client private key file (optional)
--sqlsslverify yes | no yes Verify SSL identity of the remote database server
--help β€” β€” Display CLI usage reference and options list

πŸ’‘ Deployment Examples

Example 1: Standard Production Setup with Nginx & Let’s Encrypt

sudo ./faveo.sh \
  --domain helpdesk.mycompany.com \
  --email it-admin@mycompany.com \
  --license 1111222233334444 \
  --order 87654321 \
  --webserver nginx \
  --ssl certbot \
  --sql mysql \
  --php 8.4 \
  --meili yes \
  --release official \
  --faveoenv production

Example 2: Enterprise Deployment with Remote AWS RDS MySQL & Custom Paid SSL

sudo ./faveo.sh \
  --domain support.enterprise.com \
  --email ops@enterprise.com \
  --license 5555666677778888 \
  --order 99887766 \
  --webserver apache \
  --ssl paid-ssl \
  --certfile /etc/ssl/certs/star_enterprise_com.crt \
  --keyfile /etc/ssl/private/star_enterprise_com.key \
  --cacertfile /etc/ssl/certs/enterprise_ca_bundle.crt \
  --sqlreser yes \
  --sqlhost rds-mysql.internal.enterprise.com \
  --sqlport 3306 \
  --sqlusername dbadmin \
  --sqlpassword "SuperSecretPass123" \
  --sqlsecure yes \
  --sqlsslca /etc/ssl/certs/rds-combined-ca-bundle.pem \
  --sqlsslverify yes \
  --php 8.4 \
  --meili yes \
  --node yes \
  --nats yes \
  --faveoenv production

Example 3: Internal Staging Server with Self-Signed SSL & MariaDB

sudo ./faveo.sh \
  --domain faveo.local \
  --email staging@local.net \
  --license 9999888877776666 \
  --order 11223344 \
  --webserver nginx \
  --ssl self-signed \
  --sql mariadb \
  --php 8.4 \
  --meili no \
  --node no \
  --nats no \
  --release beta \
  --faveoenv development

🧰 Technology Stack & Services Provisioned

Component Software / Details Configuration & Role
Application Framework Laravel 11.x / PHP 8.4 Deployed to /var/www/faveo
PHP Runtime PHP-FPM (8.2 / 8.4+) Tuned via php.ini (memory_limit=256M, max_execution_time=360s, upload_max_filesize=100M)
PHP Extensions IonCube Loader, OPcache, Redis, Memcached, GD, MBString, XML, SOAP, IMAP, BCMath, GMP, Intl, Zip Encrypted license verification & high-performance execution
Web Server Apache 2.4 (mpm_event + proxy_fcgi) or Nginx Handles HTTP/2, SSL termination, and reverse proxy for WebSockets (/fc/) and NATS (/natsws)
Search Engine Meilisearch v1.x Configured as systemd service with automated master key & dumps directory
Cache & Queue Broker Redis Server In-memory key-value cache and Laravel queue backend
Process Manager Supervisor (supervisord) Manages Horizon queue workers, WebSocket daemons, Node server, and NATS listeners
Background Scheduler System Cron (crontab) Executes php artisan schedule:run every minute under the web server user
PDF Generation wkhtmltopdf / wkhtmltox Headless HTML-to-PDF binary with font rendering dependencies
Asset Graphing (Optional) Node.js 22.x & Puppeteer Server-side chart rendering for IT asset management
Agent Discovery (Optional) NATS Server v2.10 Low-latency messaging for network discovery agents (Port 9235)

πŸ“Š Post-Installation & Verification

Upon successful completion, the script prints an installation summary and creates a credential reference file:

╔══════════════════════════════════════════════════════╗
       Faveo Helpdesk Installation Summary             
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
  URL:                   https://support.example.com
  Email:                 admin@example.com
  License Code:          ****************
  Order Number:          ********
  Release Selected:      official
  SQL Option:            mysql
  SQL Version Installed: 8.4.1
  PHP Version:           8.4
  Meilisearch Option:    yes
  Web Server:            nginx
  Node Option:           yes
  NATS Option:           no
  SSL Option:            certbot
  Database Username:     faveo
  Database Password:     <Randomly-Generated-Password>
  Meilisearch Key:       <Randomly-Generated-Master-Key>
  Faveo Login Username:  demo_admin
  Faveo Login Password:  demopass
  Faveo Environment:     production
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

πŸ“„ Credentials Record

A copy of these installation details is automatically saved to:

cat ./credentials.txt

πŸ” Verification Commands

Check the health of all backing services by using the troubleshooting script by following this: Click Here


πŸ›‘ Failure Recovery & Rollback Engine

The installation suite includes a self-healing rollback routine (rollback()). If any stage fails (such as an invalid domain DNS propagation, network dropout during package installation, failed database credentials, or incompatible PHP modules), the script triggers an automatic rollback:

  1. Service Teardown: Stops and disables Meilisearch, NATS, Redis, Supervisor, Web Server, and PHP-FPM services.
  2. Package Purging: Removes installed packages (php-*, mysql-*, mariadb-*, httpd/apache2, nginx, nodejs, supervisor, redis, wkhtmltox).
  3. Repository Cleanup: Removes added third-party repository definitions (remi*.repo, epel*.repo, mariadb*.repo, nodesource*, Sury GPG keys) to keep the package manager clean.
  4. Database Cleanup: Drops the faveo database and local faveo DB user if created locally.
  5. Storage Purge: Deletes /var/www/faveo, log folders, temporary SSL keys, and crontabs.

❓ Troubleshooting & FAQ

1. Let’s Encrypt / Certbot Fails

2. SELinux Issues on RHEL / Rocky / AlmaLinux

3. Remote Database Connection Timed Out

4. High Memory Consumption


πŸ‘₯ Maintainers & Support