Faveo Helpdesk on AWS User Guide
Overview
This image runs Faveo Helpdesk Community, a Laravel 9 application, behind nginx with PHP FPM 8.2 and OPcache enabled. The mysql, mbstring, imap, gd, intl and bcmath PHP extensions that Faveo needs are installed. MariaDB provides the database, on the same instance and bound to the loopback interface only. A Laravel scheduler runs every minute through a systemd timer to process queued jobs, fetch email and run SLA escalations.
The image ships with Faveo's web setup wizard already run and locked, so the first request lands directly on the sign-in page with no wizard to work through. Faveo's install middleware bypasses the wizard whenever the application's .env file is present, which it is in this image, so the /step1../step5 setup routes redirect to the sign-in page and the wizard can never be re-run. A fresh administrator password, a fresh MariaDB password and a fresh Laravel application key are generated on the first boot of every deployed instance. Two instances launched from the same Amazon Machine Image never share secrets. The administrator and database credentials are written to /root/faveo-helpdesk-credentials.txt with mode 0600 so that only the root user can read them.
Faveo forces every generated URL to HTTPS, so the image serves the application on port 443 with a self signed certificate that is regenerated uniquely on each instance's first boot; port 80 redirects to 443. Because the certificate is self signed, your browser will show a warning on the first visit until you replace it with a certificate for your own domain (see the Let's Encrypt step below).
The Faveo application code and Laravel storage (uploads, attachments, logs) live under /var/www/faveo on a dedicated EBS volume separate from the operating system disk. The MariaDB data directory sits on its own EBS volume at /var/lib/mysql. Each tier can be resized independently of the others.
Prerequisites
Before you deploy this image you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups, and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group allowing inbound port 22 from your management network and inbound port 443 from the networks your agents and customers will reach Faveo on
- The AWS CLI (version 2) installed locally if you plan to deploy from the command line
Step 1: Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images choose AWS Marketplace AMIs and search for Faveo Helpdesk. Select the cloudimg listing and choose Select, then Continue on the subscription summary.
Pick an instance type of m5.large or larger — the Faveo workload is PHP and MariaDB heavy, and report generation and email processing benefit from memory. Choose your EC2 key pair under Key pair (login). Under Network settings select your VPC and subnet, and either create or select a security group that allows inbound port 22 from your management network and inbound port 443 from the networks your users use. Leave the root volume at the default size or larger.
Select Launch instance. First boot initialisation takes a few seconds after the instance state becomes Running and the status checks pass.
Step 2: Launch the Instance from the AWS CLI
The following block launches an instance from the cloudimg Faveo Helpdesk Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, <subnet-id> with your subnet ID, and <security-group-id> with a security group that opens ports 22 and 443 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30,"VolumeType":"gp3"}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=faveo-01}]'
The command prints a JSON document on success. Note the instance ID, then retrieve its public address once it is running with aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[].Instances[].PublicIpAddress" --output text.
Step 3: Connect and Retrieve Initial Credentials
Connect over SSH with the key pair you selected and the public IP address from step 2. The SSH login user depends on the operating system of the AMI variant you launched:
| AMI variant | SSH login user |
|---|---|
| Faveo Helpdesk 2.0.3 on Ubuntu 24.04 | ubuntu |
Connect with ssh -i <path-to-key.pem> ubuntu@<instance-public-ip>, substituting your key path and the instance's public IP address.
The per instance administrator and database credentials are written to a root only file on first boot. Read it with:
sudo cat /root/faveo-helpdesk-credentials.txt
The file lists the application URL, the administrator sign-in email and password, and the MariaDB database name, user and password. Store the administrator password in your password manager and treat this file as sensitive.
Step 4: Verify the Stack is Running
Faveo is served by three systemd units. Confirm they are active:
systemctl is-active nginx php8.2-fpm mariadb
Each line returns active. Confirm Faveo answers on HTTPS (the -k flag accepts the self signed certificate):
curl -sk -o /dev/null -w 'sign-in page HTTP %{http_code}\n' https://127.0.0.1/auth/login
This returns HTTP 200. The Laravel scheduler, which processes queued jobs and fetches email, runs every minute through a systemd timer:
systemctl status faveo-helpdesk-scheduler.timer --no-pager
Step 5: First Sign In to the Agent and Admin Console
Browse to https://<instance-public-ip>/. Because the image ships a self signed certificate, your browser will warn you the first time — accept the warning to proceed (you will replace the certificate in the Let's Encrypt step). You land on the Faveo sign-in page.
Sign in with the administrator email and password from /root/faveo-helpdesk-credentials.txt. After signing in you land on the Dashboard, which summarises inbox, unassigned, overdue and due-today ticket counts and shows a report chart. The top navigation gives you Dashboard, Users, Tickets, Tools and Report, and the Admin Panel link opens the configuration area. The same address serves the customer self service portal for people who are not signed in as agents.
Step 6: Change the Administrator Password and Set Your Details
While the first-boot password is unique to your instance, you should still set your own. Open the user menu in the top right, open your Profile, set your name and a personal email address, and change the password to one you control. Faveo stores agent passwords as bcrypt hashes.
Step 7: Set the Helpdesk Name, URL and System Email
Open Admin Panel → Settings. Set the helpdesk name and the system URL to the address your users will use (for example https://support.example.com/). Under Admin Panel → Email → Email settings, configure the address that outbound notifications are sent from. Configuring system mail is what lets Faveo send and fetch ticket email, so it is the first thing to set on a new helpdesk.
Step 8: Create Departments, Help Topics, SLA Plans and Agents
Faveo routes tickets using departments and help topics, from the Admin Panel:
- Departments (Admin Panel → Staff → Departments) group your agents and own ticket queues — for example Support, Billing, or IT.
- Help topics (Admin Panel → Manage → Help topics) are what a customer chooses when opening a ticket; each maps to a department and SLA plan.
- SLA plans (Admin Panel → Manage → SLA plans) set response and resolution targets; the image ships 6, 12 and 24 hour plans you can adapt.
- Agents (Admin Panel → Staff → Agents) are your staff. Add an agent, assign them to a department and a role, and they receive their own sign-in.
Create the departments your team is organised around, a help topic per request type, and an agent record for each member of staff.
Step 9: Work a Ticket
From the Tickets tab, open any ticket to see the full conversation, the requester, the status, priority, department, SLA plan and due date. Use Reply to respond to the customer, Internal notes for a note only agents see, and the action buttons to assign, change status, generate a PDF or edit the ticket. Agents can raise a ticket on a customer's behalf with Create ticket.
Step 10: Configure Inbound Email (Email Fetching)
To turn inbound email into tickets, configure a mailbox under Admin Panel → Email → Emails. Faveo can fetch mail from an IMAP or POP mailbox — the php-imap extension this image ships is what makes that work — on the schedule run by the scheduler timer. Enter the mailbox host, login and folder, choose the department and help topic new mail maps to, and enable fetching. The scheduler timer already running on this instance polls the mailbox each minute.
Step 11: The Customer Self Service Portal and Knowledge Base
Your customers use the portal at https://<instance-public-ip>/. There they can register, open a new ticket, check the status of an existing ticket, and browse the knowledge base. Build out the knowledge base under Admin Panel → Manage — published articles appear on the portal and deflect repetitive tickets.
Step 12: Replace the Self Signed Certificate with Let's Encrypt
The image serves HTTPS with a self signed certificate so the site is encrypted out of the box. For production use, replace it with a trusted certificate for your own domain. Point a DNS name at the instance's public address, then install Certbot and obtain a certificate. The commands below are illustrative — replace support.your-domain.com with your domain and run them yourself, because they involve a domain you own and interactive prompts.
Install Certbot and the nginx plugin, then request a certificate. Certbot edits the nginx site in place and reloads nginx:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d support.your-domain.com
After the trusted certificate is live, update the system URL under Admin Panel → Settings to the https:// address so links and assets resolve to your domain.
Step 13: Backups and Maintenance
The Faveo database lives in MariaDB on the /var/lib/mysql volume and the application files and attachments under /var/www/faveo. Back up both. A simple database dump is:
sudo mysqldump --single-transaction faveo | gzip > faveo-db-$(date +%F).sql.gz
Take EBS snapshots of the data volumes for point-in-time recovery, and snapshot before any Faveo version upgrade. Keep the operating system patched with sudo apt-get update && sudo apt-get -y upgrade.
Step 14: Storage Layout
The application and database tiers are on dedicated EBS volumes, each independently resizable:
df -h /var/lib/mysql /var/www
/var/lib/mysql holds the MariaDB data directory and /var/www holds the Faveo code, Laravel storage and ticket attachments. To grow a tier, modify the EBS volume in the EC2 console and then extend the filesystem with sudo resize2fs <device>.
Screenshots
The Faveo Helpdesk sign-in page, served on first boot with a per-instance administrator password and the setup wizard already locked:

The agent and admin dashboard after sign-in, showing inbox, unassigned, overdue and due-today counts and a report chart:

The ticket list, with each ticket's subject, ID, requester, assignee and last activity:

A single ticket, showing status, priority, department, SLA plan, due date and the reply and internal-notes actions:

The admin panel — configure staff, departments, help topics, SLA plans, email and the knowledge base:

Support
This image is backed by 24/7 technical support from cloudimg, covering Faveo deployment, upgrades, inbound and outbound email and IMAP fetching, SLA and department configuration, the knowledge base, plugins, and database administration. Contact support through the channel listed on the AWS Marketplace listing.