IT · Internal
Installation Guide

Everything you need to get Ticket Foundry up and running. No web development experience required — just a hosting account and about 20 minutes.

Before You Begin

What You'll Need

Web Hosting Any server running PHP 8.1+ and MySQL 5.7+ or MariaDB 10.3+. Works on shared hosting (Dreamhost, Bluehost, SiteGround), VPS, or self-hosted Windows/Linux servers.
Domain / Subdomain Where Ticket Foundry will live — e.g., helpdesk.yourcompany.com. A subdomain is recommended to keep it separate from your main site.
FTP / File Manager To upload files to your server. FileZilla is a free FTP client. Most control panels also include a web-based file manager.
Email Provider Optional but recommended. Free accounts with Postmark, Mailgun, SendGrid, or Brevo work out of the box. SMTP also supported.

PHP Requirements

Required PHP extensions — the setup wizard checks these automatically:

pdo_mysqlDatabase connectivity — required
mbstringMulti-byte string handling — required
opensslCredential encryption — required
curlEmail API providers (Postmark, Mailgun etc.) — required if using API-based email
fileinfoFile attachment handling — required
jsonAPI responses — enabled by default in PHP 8+
sessionLogin sessions — enabled by default

Apache Requirements

mod_rewriteURL rewriting — required. Usually enabled by default on shared hosting.
AllowOverride AllRequired for .htaccess to work. Set in your Apache virtual host config.
.htaccessIncluded in the package — handles all rewrite rules and security headers automatically.

IIS (Windows Server) Requirements

PHP for IISUse PHP Manager for IIS (free, from Microsoft) — easiest way to install PHP on Windows Server.
URL Rewrite ModuleFree download from Microsoft. Required for clean URLs. Install before uploading files.
web.configIncluded in the package — use this instead of .htaccess on IIS. Do not upload .htaccess.
PHP extensionsEnable php_pdo_mysql, php_mbstring, php_openssl, php_curl, php_fileinfo in PHP Manager.
Application PoolSet to No Managed Code with Integrated pipeline mode.

Nginx Requirements

PHP-FPMRequired — Nginx doesn't execute PHP natively. Install php8.1-fpm (or higher).
PHP extensionsphp8.1-mysql, php8.1-mbstring, php8.1-curl, php8.1-fileinfo, php8.1-openssl
nginx.conf.exampleIncluded in the package — use as your server block. Handles rewrite rules and security headers.
.htaccessIgnored by Nginx — leave it in place, it does nothing but won't cause errors.
💡
Shared hosting? All required PHP extensions are enabled by default on most shared hosts. If you're on Dreamhost, Bluehost, SiteGround, or similar — you're good to go without any extra configuration.
Step 1 of 5
1
Create a Database

Ticket Foundry needs a MySQL database to store all your tickets, users, and settings.

  1. Log in to your hosting control panel (cPanel, Plesk, or similar)
  2. Find MySQL Databases or Database Wizard
  3. Create a new database — name it something like ticket_foundry
  4. Create a database user with a strong password
  5. Assign the user to the database with All Privileges
  6. Write down the database host, name, username, and password — you'll need these in the setup wizard
ℹ️
The database host is usually localhost. Some hosts use a different value — check your hosting documentation if the default doesn't work.
Step 2 of 5
2
Upload the Files

Upload all Ticket Foundry files to your server.

  1. Download the Ticket Foundry zip file and extract it on your computer
  2. Connect to your server via FTP/SFTP (FileZilla is a free option) or use your hosting's file manager
  3. Navigate to the folder for your domain or subdomain
  4. Upload all extracted files — including hidden files (files starting with a dot)
  5. Make sure the uploads/ folder exists — create it if it doesn't
⚠️
Important: The .htaccess file must be uploaded — it controls URL routing. Some FTP clients hide dotfiles by default. In FileZilla: Server → Force showing hidden files.
📎
The uploads/ and includes/ folders must have permissions set to 755. If file uploads don't work or you see permission errors after setup, right-click each folder in your FTP client → File Permissions → set to 755.
Step 3 of 5
3
Import the Database Schema

The setup wizard imports the database schema automatically when you connect your database in Step 4. You can skip this step entirely.

💡
Just proceed to Step 4 and run the setup wizard. When you enter your database credentials and click Test Connection, all 19 tables are created automatically. If the bulk import fails it retries statement-by-statement.
▸ Manual import (fallback only — if the setup wizard reports a schema error)
  1. Log in to phpMyAdmin (available in most hosting control panels)
  2. Select your Ticket Foundry database from the left sidebar
  3. Click the Import tab at the top
  4. Click Choose File and select schema.sql from the Ticket Foundry package
  5. Leave all settings at defaults and click Go
  6. You should see 19 tables created — then proceed to Step 4
Step 4 of 5
4
Run the Setup Wizard

Open your browser and go to your domain — you'll be automatically redirected to the setup wizard. The wizard has 6 steps:

1
Database Connection
Enter the database credentials from Step 1. Click Test Connection — the wizard connects to your database and automatically creates all 19 tables. No manual schema import needed.
2
Admin Account
Create your administrator account. Choose a username (no spaces), enter your email, and set a strong password. Write this down or store it in a password manager — recovery without it requires direct database access.
3
Site Settings
Company name — shown throughout the app and in emails. Site URL — full URL, no trailing slash (e.g., https://support.yourcompany.com). Default theme — 10 options, changeable later. Timezone — set correctly for accurate ticket timestamps.
4
Ticket Settings
Prefix — short code before ticket numbers (e.g., IT, SUP). Leave blank for none. Include date — adds the date (e.g., IT-20260513-00001). Recommended. Number padding — 5 digits recommended.
5
Email Configuration
Configure how Ticket Foundry sends notifications and reports. See the Email Configuration section below for full details.
6
Done!
Your install is complete. Next: add team members in Settings → Users & Access, add departments and locations in Settings → Organization, and set up cron jobs for scheduled reports.
Email Configuration
⚠️
About SMTP: SMTP is not recommended for shared hosting. Many hosts block or rate-limit outbound connections, and emails may be flagged as spam without proper SPF/DKIM DNS records. The API providers below are reliable, spam-filter friendly, and all offer free tiers that cover most small IT shops.
SendGrid
Free Tier
Free: 100 emails/day
Widely used, reliable, good documentation.
  1. Create a free account at sendgrid.com
  2. Go to Settings → API Keys, create a key with Mail Send permission
  3. Enter your API key in the setup wizard
Brevo
Free Tier
Free: 300 emails/day
Formerly Sendinblue. Good free tier, easy setup.
  1. Create a free account at brevo.com
  2. Go to SMTP & API → API Keys and create a key
  3. Enter your API key in the setup wizard
SMTP (requires additional setup) ▾ expand
PHPMailer is included. Ticket Foundry ships with PHPMailer pre-installed in includes/PHPMailer/. No separate download or install needed — just configure your SMTP settings below.

PHPMailer is licensed under LGPL 2.1. License file included at includes/PHPMailer/LICENSE.

SMTP Settings

  • Host — your mail server (e.g., smtp.gmail.com)
  • Port587 for TLS or 465 for SSL
  • Username / Password — your email credentials. For Gmail, use an App Password — not your regular password.
  • From name / address — what recipients see as the sender
💡
Use the Send Test Email button in the setup wizard to verify your configuration before finishing.
Cron Jobs
⚠️
Required for scheduled reports. Cron jobs are automated tasks that run on a schedule. Without them, Daily and Monthly reports will not send automatically. You can still generate and send reports manually from the Reports page at any time.

Your cron key is shown in Settings → General after setup. Replace YOUR_CRON_KEY and yourdomain.com in the commands below.

Job Schedule Command
Daily Report
Once daily, e.g. 7:00 AM
Required for
scheduled reports
curl -s "https://yourdomain.com/cron/daily-report.php?key=YOUR_CRON_KEY" > /dev/null
Weekly Report
Chosen day of week
Required for
scheduled reports
curl -s "https://yourdomain.com/cron/monthly-report.php?key=YOUR_CRON_KEY&period=7" > /dev/null
Monthly Report
1st of each month
Required for
scheduled reports
curl -s "https://yourdomain.com/cron/monthly-report.php?key=YOUR_CRON_KEY&period=30" > /dev/null
Login Reminder
Once daily
Optional curl -s "https://yourdomain.com/cron/never-logged-in.php?key=YOUR_CRON_KEY" > /dev/null

How to Set Up a Cron Job

Most hosting control panels include a Cron Jobs tool — look for it under Advanced or Tools.

  1. Find the Cron Jobs section in your hosting control panel
  2. Click Add New Cron Job
  3. Set the frequency (daily at a specific hour, or monthly for the monthly report)
  4. Paste the command, replacing yourdomain.com with your domain and YOUR_CRON_KEY with your key from Settings → General
  5. Save — the job will run automatically on schedule
Troubleshooting
Blank screen or error after uploading
  • Make sure all files were uploaded including hidden files (starting with a dot, like .htaccess)
  • The .htaccess file must be present — it controls how URLs are routed
  • Verify your PHP version is 8.1 or higher in your hosting control panel
"Database connection failed" during setup
  • Double-check all four credentials: host, database name, username, password
  • The host is usually localhost but may differ — check your hosting docs
  • Make sure the database user has been assigned All Privileges
Emails are not sending
  • Use Send Test Email in Settings → Email to diagnose the issue
  • If using SMTP, switch to Mailgun, Postmark, SendGrid, or Brevo
  • Check your spam/junk folder — first emails sometimes land there
File uploads are not working
  • Confirm the uploads/ folder exists in your install directory
  • Set folder permissions to 755 via FTP (right-click → File Permissions)
  • Check your host's maximum file upload size — Ticket Foundry supports up to 50MB but is limited by your server's php.ini settings
Tickets show the wrong time
  • Go to Settings → General and update the Timezone setting
Scheduled reports are not sending
  • Verify cron jobs are configured — see the Cron Jobs section above
  • Check that your cron key matches what's shown in Settings → General
  • Confirm email is working using Send Test Email in Settings → Email
Security Recommendations
Use HTTPS
Most hosts offer free SSL via Let's Encrypt. Enable it in your control panel — look for SSL/TLS or Security. Ticket Foundry should always be accessed over HTTPS.
Strong Admin Password
Use a password manager to generate and store a strong password. The admin account has full system access.
Limit Admin Account Use
Use the admin account only for system management. For day-to-day work, create a Superuser account instead.
Keep Files Updated
Apply updates promptly when new versions of Ticket Foundry are released.
Server Types & Internal Hosting

Ticket Foundry does not need to be publicly accessible on the internet. It works equally well as an internal tool on your company network — no external hosting required.

🏠
Internal hosting examples: A spare PC running Windows Server with IIS, a Linux server with Nginx or Apache, or even a Raspberry Pi on your local network. Users access it via an internal URL like helpdesk.internal or a local IP address.

Apache (Default)

The included .htaccess file handles all configuration automatically. No extra setup needed. Works on shared hosting, LAMP stacks, and Raspberry Pi with Apache installed.

IIS (Windows Server)

Use the included web.config file instead of .htaccess. You'll also need the URL Rewrite Module installed.

  1. Install PHP for IIS — use PHP Manager for IIS (free, from Microsoft) for the easiest setup
  2. Install the URL Rewrite Module — free download from iis.net
  3. Install MySQL (or MariaDB) and phpMyAdmin
  4. Copy all Ticket Foundry files to your IIS site root
  5. Place web.config in the root folder — do not upload .htaccess, IIS ignores it
  6. Configure PHP settings in php.ini: set upload_max_filesize = 50M, post_max_size = 52M (or lower — Ticket Foundry max is configured in Settings → General, but cannot exceed the php.ini limit), display_errors = Off
  7. Proceed with the normal setup wizard
ℹ️
PHP settings can't be set via web.config the way Apache sets them in .htaccess. Set them directly in your php.ini file instead.

Nginx (Linux)

Use the included nginx.conf.example as your server block configuration. The .htaccess file is ignored by Nginx.

  1. Install Nginx, PHP-FPM (8.1+), MySQL or MariaDB, and phpMyAdmin
  2. Copy nginx.conf.example to /etc/nginx/sites-available/ticketfoundry
  3. Edit it — update server_name and root to match your setup
  4. Enable it: sudo ln -s /etc/nginx/sites-available/ticketfoundry /etc/nginx/sites-enabled/
  5. Test and reload: sudo nginx -t && sudo systemctl reload nginx
  6. Proceed with the normal setup wizard

Raspberry Pi

A Pi 4 (2GB+) running Raspberry Pi OS with Apache or Nginx handles Ticket Foundry comfortably for small teams.

  1. Install the LAMP stack: sudo apt install apache2 php8.1 mariadb-server phpmyadmin
  2. Upload files to /var/www/html/ or a subdirectory
  3. Set up a local DNS entry on your router so the Pi is accessible by hostname (e.g., helpdesk.local)
  4. Proceed with the normal setup wizard
ℹ️
MariaDB is fully compatible with Ticket Foundry and is the default on most Linux/Pi setups. Use it exactly as you would MySQL — the setup wizard and all queries work identically.

Internal DNS

To give your install a friendly URL on an internal network (e.g., helpdesk.internal instead of 192.168.1.100):

  • Most routers — look for Local DNS, Static DNS Entries, or Custom DNS in your router admin panel
  • Pi-hole — add a Local DNS Record in the Pi-hole dashboard
  • Windows Server — add an A record in DNS Manager
  • Hosts file (single machine) — add 192.168.1.100 helpdesk.internal to C:\Windows\System32\drivers\etc\hosts (Windows) or /etc/hosts (Mac/Linux)
Getting Help

If you run into issues, please reach out with:

  • A description of what you were doing when the issue occurred
  • Any error messages you see — screenshots are very helpful
  • Your hosting provider name and PHP version
  • Email: sendhelp@ticketfoundry.net
🥳
Thank you for using Ticket Foundry.