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.
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 β
βββββββββββββββββββββββββββββββββββββββββββ
faveo.sh (Main Orchestrator):
root/sudo privileges./etc/os-release / /etc/debian_version) and validates OS major/minor compatibility.debian_block.sh or rhel_block.sh).debian_block.sh (Debian/Ubuntu Engine):
apt-specific dependencies, dpkg packaging for wkhtmltox, and Debian service management.rhel_block.sh (RHEL-Family Engine):
firewalld port openings.CA, Client Cert, Client Key, and Identity Verification).9235.| 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 |
A record pointing to the serverβs public IP address.(Also supports internal installation).root or sudo access..
βββ 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
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
support.example.com (do not prefix with https://)admin@example.com (used for Letβs Encrypt and administrator alerts)1) Official (Stable) (recommended), 2) RC, or 3) Beta1) Production (recommended), 2) Development, or 3) TestingYes (recommended for >100 tickets/day) or NoYes or No (default: No)8.4 (default) or custom (8.2, 8.3)Yes (for asset graphical reports) or No1) MySQL (8.0/8.4) (default) or 2) MariaDB (10.6/11.8)1) Local (installed on server) or 2) Remote (connect to RDS/existing DB)1) Apache or 2) Nginx1) FreeSSL (Let's Encrypt), 2) Self-Signed, or 3) Paid SSLPass 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
| 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 |
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
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
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
| 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) |
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
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
A copy of these installation details is automatically saved to:
cat ./credentials.txt
Check the health of all backing services by using the troubleshooting script by following this: Click Here
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:
php-*, mysql-*, mariadb-*, httpd/apache2, nginx, nodejs, supervisor, redis, wkhtmltox).remi*.repo, epel*.repo, mariadb*.repo, nodesource*, Sury GPG keys) to keep the package manager clean.faveo database and local faveo DB user if created locally./var/www/faveo, log folders, temporary SSL keys, and crontabs.A record does not resolve to this serverβs public IP address, or port 80/443 is blocked.dig +short yourdomain.com and ensure your firewall/security group permits inbound traffic on ports 80 and 443.enforcing mode can block Nginx/Apache reverse proxy sockets or PHP-FPM file writes.permissive in /etc/selinux/config. To check status, run getenforce.bind-address = 127.0.0.1 on the DB host).--sqlsecure yes with valid CA certificates if required.--node no) and Meilisearch (--meili no) features during installation.thirumoorthi.duraipandi@faveohelpdesk.com