Run a Mock IT Support Desk

Configure a local help desk, triage 12 real-world tickets, and build a knowledge base.

Introduction

30 Second Summary

Every IT support team faces the same nightmare: dozens of tickets flooding in at once, and no way to tell which ones are urgent. The skills to bring order to that chaos are what separate a help desk technician from a ticket-clearing machine.

In this project, you will install and configure a full IT ticketing system, flood it with realistic support requests, then triage and resolve them using industry-standard ITIL practices.

What You'll Build

You open your browser, see a queue of 12 overdue tickets from panicking users, and methodically work through them in priority order while tracking every resolution against a ticking SLA deadline.

By the end of this project, you'll have:

  • A live ticketing system running in your browser where you can log, triage, and resolve support requests just like a real help desk agent.
  • 12 realistic tickets spanning password lockouts, VPN failures, and onboarding requests. Each is categorized with the correct department, priority, and SLA deadline.
  • A knowledge base with self-service articles that end users can search before submitting a ticket, reducing repeat requests.
  • Secret Mission: Configure automated ticket filters that route incoming requests to the right team without manual intervention.

Are there any prerequisites?

None. This project includes full setup instructions for Docker Desktop and osTicket. All you need is a Windows PC and a web browser.

Before We Start

Before we dive in, let's lock in what you're about to build and why it matters for the IT support role you're targeting.

Install Docker Desktop and Launch osTicket

To practice ITIL workflows, you need a real ticketing system to work with. Cloud-hosted options cost money and require account approvals that slow you down.

In this step, you'll install Docker Desktop to run osTicket locally on your Windows machine. Two containers (the osTicket app and a MySQL database) give you a complete IT help desk in minutes with zero cost.

In this step, get ready to:
  • Install Docker Desktop on your Windows machine.
  • Create a Docker Compose file that defines the osTicket and MySQL services.
  • Launch osTicket and confirm the Staff Control Panel loads in your browser.
Install Docker Desktop

Docker Desktop runs containers on your Windows machine using the WSL 2 backend. Let's check if it's already installed.

  • Press the Windows key on your keyboard to open the search bar.
  • Type PowerShell and press Enter to open it.
  • Check if Docker is already installed by running this command:
docker --version

Look at what PowerShell printed and pick the tab that matches your result.

✔️ I see a version number

Docker Desktop is already installed. Make sure Docker Desktop is running by checking for the whale icon in your system tray (bottom-right corner of your screen). If it's not there, open Docker Desktop from the Start menu.

Skip ahead to the next substep where you create the project folder.

ⓧ Command not found

Docker is not installed yet. Follow these steps to install it.

  • Download the Docker Desktop installer by opening this link in your browser:
  • https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe
  • Once downloaded, double-click the installer file to run it.
  • The installer may prompt you to enable WSL 2. Make sure Use WSL 2 instead of Hyper-V is checked, then click Ok to continue.
  • Wait for the installation to finish. You may be asked to log out and log back in, or restart your computer.
  • After restarting, press the Windows key, type Docker Desktop, and press Enter to launch it.
  • Wait for the Docker engine to start. The whale icon in your system tray (bottom-right) stops animating when it's ready.

What is the Docker Desktop startup flow?

Docker Desktop might show a welcome screen or ask you to accept terms of service on first launch. Accept the defaults and skip any sign-in prompts. You do not need a Docker Hub account for this project.

  • Confirm Docker is working by running this command in PowerShell:
docker --version

You should see a version number printed, something like Docker version 27.x.x. The exact number does not matter.

Still seeing command not found?

Close PowerShell completely and reopen it. Docker Desktop adds itself to your system PATH, but existing terminal sessions don't pick up the change until they're restarted.

If it still fails, make sure Docker Desktop is running (look for the whale icon in the system tray). The engine must be started before the docker command works.

Having trouble?

Create the Docker Compose file and start osTicket

Docker Compose lets you define multiple containers in a single file. You'll create a docker-compose.yml that describes the osTicket app container and its MySQL database.

  • Create your project folder and navigate into it by running these commands:
mkdir C:\osticket-lab
cd C:\osticket-lab
  • Create an empty docker-compose.yml file and open it in Notepad by running:
New-Item docker-compose.yml
notepad docker-compose.yml

What do these commands do?

New-Item docker-compose.yml creates an empty file with the correct .yml extension. Opening it with notepad afterwards ensures you edit the real file rather than accidentally creating a .txt file.

  • Copy all of the following YAML content:
services:
  osticket:
    image: devinsolutions/osticket
    container_name: osticket
    ports:
      - "8080:80"
    depends_on:
      - mysql
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_PASSWORD=secret
      - MYSQL_DATABASE=osticket
    restart: unless-stopped

  mysql:
    image: mysql:5.7
    container_name: osticket-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_USER=osticket
      - MYSQL_PASSWORD=secret
      - MYSQL_DATABASE=osticket
    volumes:
      - osticket-db:/var/lib/mysql
    restart: unless-stopped

volumes:
  osticket-db:

What does this file define?

The osticket service pulls the pre-built osTicket image and maps port 8080 on your machine to port 80 inside the container. This is how you'll access osTicket in your browser.

The mysql service runs a MySQL 5.7 database that osTicket uses to store all ticket data. The volumes section ensures your database data persists even if you restart the containers.

  • Paste the content into Notepad (press Ctrl+V).
  • Save the file by pressing Ctrl+S, then close Notepad.
  • Back in PowerShell, confirm the file exists by running:
dir

You should see docker-compose.yml listed in the output.

  • Start the osTicket containers by running:
docker compose up -d

Docker pulls the osTicket and MySQL images from the internet, then starts both containers in the background. This takes 2-3 minutes on first run while the images download and osTicket auto-installs its database schema.

Seeing a port conflict error?

If you see a message about port 8080 already being in use, another application is occupying that port. Close whatever is using it (often another development server) and run docker compose up -d again.

If you see a message that Docker is not running, make sure the whale icon is visible in your system tray. Docker Desktop must be running before you can start containers.

Need help?

✔️ Awesome, I've got everything!

Great. Double check you saved docker-compose.yml and that both containers are running.

ⓧ I'd like to double check the full code

Your docker-compose.yml should contain exactly this:

services:
  osticket:
    image: devinsolutions/osticket
    container_name: osticket
    ports:
      - "8080:80"
    depends_on:
      - mysql
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_PASSWORD=secret
      - MYSQL_DATABASE=osticket
    restart: unless-stopped

  mysql:
    image: mysql:5.7
    container_name: osticket-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_USER=osticket
      - MYSQL_PASSWORD=secret
      - MYSQL_DATABASE=osticket
    volumes:
      - osticket-db:/var/lib/mysql
    restart: unless-stopped

volumes:
  osticket-db:
Verify osTicket is running

Both containers should now be running. Before you open the browser, what do you think you'll see at the osTicket URL? A login page, an error, or a setup wizard?

  • Open your web browser and navigate to:
http://localhost:8080/scp/

You should see the osTicket Staff Control Panel login page. This is where help desk agents work.

What if the page doesn't load immediately?

On first boot, osTicket takes 2-3 minutes to set up its database. If you see a connection error or a blank page, wait a minute and refresh. The devinsolutions/osticket image auto-installs the schema before the web interface becomes available.

  • Log in with username ostadmin and password Admin1.
  • Click Admin Panel in the top-right corner to switch to the admin view.

You should see the Admin Panel with menu options including Settings, Manage, Emails, and Staff. This confirms osTicket is fully operational.

Can't log in or seeing an error?

Make sure you're using http://localhost:8080/scp/ with the trailing slash. Without it, osTicket may redirect incorrectly.

If the login fails, double-check the credentials: username is ostadmin (not admin) and password is Admin1 (capital A, number 1).

Still stuck?

Your local IT help desk is live. Next up, you'll submit your first ticket to see what the end-user experience looks like before any configuration.

Log Your First Ticket

Your help desk is running and you have access to the admin panel. Now it is time to see the system from both sides: the end user submitting a request, and the agent receiving it.

Before you configure anything, you need to experience what an unconfigured queue looks like. When a ticket arrives with no priority, no deadline, and no department routing, how do you know what to work on first?

In this step, get ready to:
  • Submit a ticket through the client portal as an end user.
  • View that ticket from the agent side and observe the lack of structure.
Submit a ticket as an end user

Every osTicket installation has two portals. The Staff Control Panel (where you are now) is for agents. The client portal is the public-facing page where end users submit their requests.

  • Open a new browser tab and navigate to http://localhost:8080/ (the client portal).
  • Click Open a New Ticket.
  • In the Email Address field, enter sarah.chen@example.com.
  • In the Full Name field, enter Sarah Chen.
  • Leave the Help Topic dropdown on whichever default option is available.
  • In the Issue Summary field, enter Password reset - locked out after vacation.
  • In the message body, type: I returned from a two-week vacation and my account is completely locked out. I have tried the self-service portal but it says my account is disabled. I need access restored urgently for a morning meeting.
  • Click Create Ticket.

You should see a confirmation page with a ticket number. Make a note of that number.

What just happened?

You submitted a support request the same way a real employee would. The ticket is now sitting in the system waiting for an agent to pick it up. The ticket number is how the end user tracks their request.

Not seeing a confirmation page?

Make sure you filled in all required fields (email, name, issue summary, and message body). Required fields appear in bold on the form. If the page reloads without a confirmation, scroll up to check for red error messages near any empty required fields.

help me figure out why my osTicket ticket submission is not going through

View the ticket as a help desk agent

Now switch perspectives. You are no longer Sarah Chen the end user. You are the IT support agent responsible for this queue.

Before you look at the ticket, what do you think it will show? Will it have a priority level or an SLA deadline assigned automatically?

  • Switch back to your Staff Control Panel tab at http://localhost:8080/scp/.
  • If you are still in the Admin Panel view, click Agent Panel in the top-right corner to switch to the agent view.
  • Click Tickets in the top navigation bar.
  • Look at the Open tickets queue.

You should see your ticket from Sarah Chen listed in the queue. Notice three things: there is no priority flag, there is no due date, and the ticket is assigned to the default Support department.

  • Click on the ticket subject to open it.
  • Look at the ticket details panel on the right side. Confirm there is no SLA deadline and no meaningful priority assignment.

Why does this matter?

With one ticket, this seems fine. But imagine 12 tickets landing at once. Without priority levels, SLA deadlines, or department routing, every ticket looks identical. You cannot tell which one needs attention first.

This is the exact problem that ITIL incident management processes exist to solve. The structure you build in later steps will bring order to this chaos.

Ticket not appearing in the queue?

Make sure you are in the Agent Panel (not the Admin Panel). The top-right corner shows which panel you are currently in. If you see Admin Panel as a clickable link, you are already in the Agent Panel. If you see Agent Panel as a clickable link, click it to switch.

Also check that you are viewing Open tickets (not Closed or My Tickets). Click Tickets in the top nav, then click Open in the sub-menu.

help me find my submitted ticket in the osTicket Staff Panel

Your first ticket is sitting in the queue with no priority and no deadline. Next up, you will flood the queue with 12 realistic tickets and see exactly why structure matters.

Flood the Queue with Realistic Tickets

You logged your first ticket and saw it appear in the agent queue. One ticket looks manageable.

Real IT desks do not get one ticket at a time. They get flooded. In this step, you will submit 11 more tickets covering the kinds of issues that appear in real IT job postings. When you look at the queue afterwards, you will see the problem that ITIL processes exist to solve.

In this step, get ready to:
  • Submit 11 more tickets from the client portal, each representing a different end user and IT issue.
  • Observe how an unstructured queue becomes impossible to prioritize at scale.
Submit tickets 2 through 6

You already have ticket #1 (Sarah Chen's password reset) from the previous step. Now you will create five more tickets as different end users.

  • Switch to the client portal tab at http://localhost:8080/.
  • Click Open a New Ticket.
  • Fill in the form fields for Ticket #2 using the details below, then click Create Ticket.

For each ticket, fill in the Email Address, Full Name, Issue Summary (the subject line), and a brief message in the Issue Details body. Select any available Help Topic for now.

  • Ticket #2: Name Dr. James Okafor, email james.okafor@example.com, subject New researcher onboarding - account setup, workstation prep, software install.
  • Ticket #3: Name Mike Torres, email mike.torres@example.com, subject Printer offline in meeting room 2.
  • Ticket #4: Name Priya Sharma, email priya.sharma@example.com, subject VPN not connecting from home - macOS.
  • Ticket #5: Name Alex Kim, email alex.kim@example.com, subject Permission denied on shared drive after department transfer.
  • Ticket #6: Name Rachel Green, email rachel.green@example.com, subject Laptop won't join Wi-Fi after OS update.

Keep messages short

For the Issue Details body, write 1-2 sentences describing the problem. Something like "I returned from two weeks of leave and my VPN client shows authentication failed when I try to connect" is plenty.

  • After submitting Ticket #6, switch back to the Staff Panel at http://localhost:8080/scp/.
  • Click Tickets in the top navigation to view the Open queue.

You should see 6 tickets listed. Notice they all have the same default priority and no due dates.

Only seeing your original ticket?

Make sure you are submitting tickets from the client portal at http://localhost:8080/ (no /scp/ at the end). The Staff Panel at /scp/ is where you view tickets, not where end users submit them.

Also confirm you clicked Create Ticket after filling in each form and saw a confirmation message with a ticket number.

Help me troubleshoot missing tickets

Submit tickets 7 through 12

Return to the client portal and continue creating tickets for the remaining six users.

  • Switch to the client portal tab at http://localhost:8080/.
  • Submit each of the following tickets using the same process (click Open a New Ticket, fill in the fields, click Create Ticket):
  • Ticket #7: Name David Park, email david.park@example.com, subject Outlook calendar not syncing on mobile.
  • Ticket #8: Name Dr. Lisa Wang, email lisa.wang@example.com, subject Request for admin rights to install Python for data analysis.
  • Ticket #9: Name Operations Team, email ops.team@example.com, subject Zoom room display showing no signal in conference room A.
  • Ticket #10: Name HR Department, email hr@example.com, subject New hire needs Microsoft 365 license assignment.
  • Ticket #11: Name Carlos Rivera, email carlos.rivera@example.com, subject USB drive not recognized on locked-down workstation.
  • Ticket #12: Name Jennifer Walsh, email jennifer.walsh@example.com, subject MFA not sending codes to new phone number.

Why these specific scenarios?

These 12 tickets are pulled from the types of issues mentioned in real IT support job postings. Password resets, VPN problems, onboarding, permissions, and hardware issues are the bread and butter of any help desk.

By using realistic scenarios, you are building a demo you can walk an interviewer through and explain your triage decisions.

Observe the unstructured queue

All 12 tickets are submitted. Before you look at the queue, think about this: if you were the only agent on shift, which ticket would you work on first? How would you decide?

  • Switch to the Staff Panel at http://localhost:8080/scp/.
  • Click Tickets in the top navigation.
  • Count the tickets listed in the Open queue.

You should see 12 tickets. Every single one has the same default priority, no SLA deadline, and is assigned to the same default Support department.

Someone locked out of their account (critical in a real environment) looks identical to a software install request that could wait days. There is no way to tell which ticket needs attention first.

What is the problem here?

This is the exact situation that ITIL incident management exists to solve. Without categorization, priority levels, and SLA deadlines, every ticket looks equally urgent.

Agents either guess or work first-in-first-out, which means a locked-out executive waits behind a printer jam. In the next step, you will add the structure that brings order to this chaos.

This queue is a mess on purpose. In the next step, you will configure departments, help topics, and SLA plans that transform this chaos into a structured workflow where priorities are clear and deadlines are enforced.

Configure Departments, Help Topics, and SLA Plans

In the last step, you saw the problem firsthand: 12 tickets piled up with identical priority, no due dates, and all dumped into the same default department.

That chaos exists because there is no structure telling the system which tickets are urgent, who should handle them, or when they are overdue. In this step, you build the three ITIL building blocks that fix this: departments define who handles what, help topics categorize incoming requests, and SLA plans set deadlines so tickets escalate before end users complain.

In this step, get ready to:
  • Create three departments that mirror a real IT support team.
  • Define three SLA plans with escalating grace periods.
  • Build six help topics that automatically route tickets to the correct department and SLA.
Create departments

Departments determine which team of agents can see and respond to a ticket. Right now everything lands in the default "Support" bucket with no specialization.

  • In the osTicket Admin Panel, click Agents in the top navigation bar.
  • Click Departments in the submenu.
  • Click Add New Department.
  • In the Name field, enter Desktop Support.
  • Leave all other settings at their defaults and click Create Dept.

You should see "Desktop Support" appear in the departments list.

  • Repeat the same process to create a second department named Network and Infrastructure.
  • Create a third department named Applications and Licensing.

Your departments list should now show three new entries alongside the original default departments.

What do these departments represent?

Each department mirrors a specialization you would find in a real IT team. Desktop Support handles physical hardware, printers, and workstation issues. Network and Infrastructure handles VPN, Wi-Fi, shared drives, and user accounts. Applications and Licensing handles software installs, licenses, and cloud apps like Microsoft 365 and Zoom.

Don't see the Add New Department button?

Make sure you are in the Admin Panel (not the Agent Panel). The toggle between these two views is in the top-right corner of the navigation bar. If it says "Agent Panel" as a clickable link, you are already in the Admin Panel.

help me find where to create departments in osTicket

Create SLA plans with escalating deadlines

An SLA plan sets a grace period: the number of hours before a ticket becomes overdue if it is not closed. Different issue types need different deadlines. A locked-out user cannot wait 24 hours for a password reset.

  • In the Admin Panel, click Manage in the top navigation bar.
  • Click SLA Plans in the submenu.
  • Click Add New SLA Plan.
  • In the Name field, enter Critical.
  • In the Grace Period field, enter 1 (this means 1 hour before the ticket becomes overdue).
  • Set Status to Active.
  • Click Add Plan.

You should see "Critical" appear in the SLA Plans list with a 1-hour grace period.

  • Create a second SLA plan named High with a grace period of 4 hours.
  • Create a third SLA plan named Standard with a grace period of 24 hours.

Your SLA Plans page should now list three active plans: Critical (1 hour), High (4 hours), and Standard (24 hours).

What is a grace period?

The grace period is the number of hours before a ticket with this SLA becomes overdue if it is not closed. A 1-hour Critical SLA means that if a locked-out user submits a ticket at 9:00 AM, that ticket turns overdue at 10:00 AM unless it is resolved.

In a production environment, overdue tickets trigger alerts to managers and appear highlighted in the queue. This is what makes SLAs enforceable, not just aspirational.

Create help topics that route tickets

Help topics are the categories end users select when submitting a ticket. Behind the scenes, each help topic automatically assigns the ticket to a department and an SLA plan. The end user never sees this routing logic.

  • In the Admin Panel, click Manage in the top navigation bar.
  • Click Help Topics in the submenu.
  • Click Add New Help Topic.
  • In the Topic field, enter Password Reset / Account Lockout.
  • Click the New Ticket Options tab.
  • Set Department to Network and Infrastructure.
  • Set SLA Plan to Critical.
  • Click Add Topic.

You should see "Password Reset / Account Lockout" appear in the Help Topics list.

Why does routing happen on the help topic?

When an end user selects a help topic, osTicket applies all the settings you configured on its New Ticket Options tab. The user never chooses a department or SLA directly. This gives you control over routing without exposing your internal team structure to the person submitting the ticket.

  • Create the remaining five help topics using the same process. For each one, set the Topic name, then switch to the New Ticket Options tab to assign the department and SLA:
  • VPN / Network Connectivity routes to Network and Infrastructure, SLA: High.
  • Hardware / Printer Issue routes to Desktop Support, SLA: High.
  • Software Installation Request routes to Applications and Licensing, SLA: Standard.
  • New Hire Onboarding routes to Network and Infrastructure, SLA: Standard.
  • Permissions / Access Request routes to Network and Infrastructure, SLA: High.

After creating all six, your Help Topics page should list six new entries alongside any default topics that came with osTicket.

Don't see your SLA or department in the dropdowns?

If the SLA plan or department you created does not appear in the dropdown menus when configuring a help topic, go back and confirm you saved them with an Active status. Disabled or unsaved items will not appear as options.

help me figure out why my SLA plans or departments are not showing up in help topic options

Before moving on, take a moment to predict: if you open one of your 12 existing tickets right now, do you think it will already have an SLA deadline applied?

  • Click Tickets in the top navigation to return to the Open queue.
  • Open any one of your 12 existing tickets.

The ticket still has no SLA deadline and still sits in the default Support department. Your new structure only applies when you manually re-categorize existing tickets or when new tickets are submitted with the new help topics. That re-categorization is exactly what the next step tackles.

Why didn't the existing tickets change?

Help topics apply their routing rules at the moment a ticket is created, or when an agent changes the help topic on an existing ticket. Creating the help topic after the fact does not retroactively update tickets that were already submitted.

You will fix this in the next step by manually assigning the correct help topic to each of your 12 tickets.

Your help desk now has the structural bones of a real IT support operation. Next up, you will put this structure to work by re-categorizing all 12 tickets, watching SLA deadlines appear, and resolving them in priority order.

Triage, Resolve, and Document

You built the structure in the previous step. Departments, help topics, and SLA plans are all configured and waiting. But structure without action is just configuration sitting in a settings panel.

Now you work the queue like a real IT support agent. You will re-categorize each ticket with the correct help topic, watch SLA deadlines appear automatically, resolve tickets in priority order, and write knowledge base articles for recurring issues.

In this step, get ready to:
  • Re-categorize all 12 tickets with the correct help topics and observe SLA deadlines activate.
  • Resolve each ticket in SLA priority order with internal notes and public replies.
  • Build a knowledge base with three public FAQ articles for recurring issues.
Re-categorize existing tickets and watch SLAs kick in

Each ticket in the queue still has the default help topic assigned. Changing the help topic on a ticket triggers the routing rules you configured. The ticket moves to the correct department and an SLA due date appears automatically.

  • Return to the Staff Panel at http://localhost:8080/scp/.
  • Click Tickets in the top navigation to view the Open queue.
  • Click on the first ticket ("Password reset - locked out after vacation" from Sarah Chen).
  • In the ticket header, click the Help Topic field (it appears highlighted in blue, indicating it is editable).
  • Select Password Reset / Account Lockout from the dropdown.
  • Click Save to apply the change.

Look at the ticket header after saving. You should now see the ticket assigned to the Network and Infrastructure department with an SLA due date showing a 1-hour deadline from the Critical plan.

Why did the SLA deadline appear?

When you created the "Password Reset / Account Lockout" help topic in the previous step, you linked it to the Critical SLA plan (1-hour grace period). Changing the ticket's help topic triggers those linked settings automatically. The department, SLA, and priority all update in one action.

Now repeat this process for the remaining 11 tickets. Use the mapping below to assign the correct help topic to each one.

Ticket-to-help-topic mapping

  • Ticket #1 "Password reset" Password Reset / Account Lockout (Critical SLA).
  • Ticket #2 "New researcher onboarding" New Hire Onboarding (Standard SLA).
  • Ticket #3 "Printer offline in meeting room 2" Hardware / Printer Issue (High SLA).
  • Ticket #4 "VPN not connecting from home" VPN / Network Connectivity (High SLA).
  • Ticket #5 "Permission denied on shared drive" Permissions / Access Request (High SLA).
  • Ticket #6 "Laptop won't join Wi-Fi after OS update" Hardware / Printer Issue (High SLA).
  • Ticket #7 "Outlook calendar not syncing on mobile" Software Installation Request (Standard SLA).
  • Ticket #8 "Request for admin rights to install Python" Software Installation Request (Standard SLA).
  • Ticket #9 "Zoom room display showing no signal" Software Installation Request (Standard SLA).
  • Ticket #10 "New hire needs Microsoft 365 license" New Hire Onboarding (Standard SLA).
  • Ticket #11 "USB drive not recognized" Hardware / Printer Issue (High SLA).
  • Ticket #12 "MFA not sending codes to new phone" Password Reset / Account Lockout (Critical SLA).
  • Open each ticket from the queue, click the Help Topic field, select the correct topic from the mapping above, and save.
  • After updating all 12 tickets, click Tickets in the top navigation to return to the queue.

Your Open tickets queue now shows every ticket with a department assignment and an SLA due date. Critical tickets (1-hour deadlines) float to the top of the priority sort. This is the power of help topics. One change to a single field triggers automatic categorization, routing, and deadline enforcement.

Tickets still showing default department?

Make sure you clicked Save after selecting the new help topic. If the department did not update, verify the help topic's routing in Admin Panel > Manage > Help Topics and confirm the correct department is set under the New Ticket Options tab.

Help me figure out why my ticket's department didn't change after updating the help topic.

Resolve tickets with proper notes

In a real IT environment, every resolution needs documentation. Internal notes record what the agent did (for the team). Public replies confirm the fix to the end user. You will resolve tickets in SLA priority order, starting with Critical tickets that have the tightest deadlines.

  • From the Open tickets queue, click on the first Critical-SLA ticket ("Password reset - locked out after vacation" from Sarah Chen).
  • Click Post Internal Note (the tab at the bottom of the ticket thread).
  • Type a resolution note. For example: "Reset password via Active Directory. User confirmed access restored. Reminded user of self-service password portal."
  • Click Post Note to save the internal note.
  • Click Post Reply (the other tab at the bottom of the ticket thread).
  • Type a public message to the end user. For example: "Hi Sarah, your password has been reset. Please log in and set a new password. If you get locked out again, use the self-service portal at password.example.com."
  • In the Ticket Status dropdown at the bottom of the reply form, change the status to Closed.
  • Click Post Reply to send the reply and close the ticket.

You should see the ticket status change to Closed. The ticket disappears from the Open queue.

Why internal notes and public replies?

Internal notes are visible only to staff. They document the technical steps taken so another agent can reference them later. Public replies go to the end user and confirm the issue is resolved.

In ITIL incident management, this separation ensures knowledge stays in the system while the customer receives a professional, non-technical response.

  • Now resolve the remaining 11 tickets using the same process: open ticket, post an internal note describing the resolution, post a public reply to the user, and set the status to Closed.
  • Work in priority order: resolve the other Critical ticket (#12 MFA codes) first, then the High-SLA tickets (#3, #4, #5, #6, #11), then the Standard-SLA tickets (#2, #7, #8, #9, #10).

Keep resolution notes realistic

Write notes as if this were a real desk. For a printer issue, mention restarting the print spooler service. For a VPN issue, mention checking split-tunnel settings. These notes are what an interviewer would look at when you demo this system.

  • After closing all 12 tickets, click Tickets in the top navigation to return to the Open queue.

Before you look, predict what you expect to see in the Open queue now. How many tickets should be there?

The Open tickets queue should be completely empty. All 12 tickets are now in the Closed state. You can verify by clicking the Closed tab to see all 12 listed there with their resolution timestamps.

Still seeing tickets in the Open queue?

If any tickets remain, open them and check the Ticket Status field. You may have posted a reply without changing the status dropdown to Closed. Reopen the ticket, change the status to Closed, and post the reply again.

Help me close a ticket that's stuck in Open status after I posted a reply.

Build knowledge base articles for recurring issues

A Knowledge Base lets end users find answers before they even submit a ticket. After resolving 12 tickets, you can see patterns. Password resets, VPN issues, and Wi-Fi problems are the top repeat offenders. Writing FAQ articles for these reduces future ticket volume.

First, you need to enable the Knowledge Base feature (it is disabled by default in osTicket).

  • Switch to the Admin Panel by clicking the link in the top-right corner.
  • Click Settings in the top navigation.
  • Click Knowledgebase in the left sidebar.
  • Check the box next to Enable Knowledge Base.
  • Click Save Changes at the bottom of the page.

What does enabling the Knowledge Base do?

This makes public knowledgebase articles accessible to end users through the client portal. Without enabling this setting, FAQ articles you create will only be visible to staff internally.

Now create a category to hold your FAQ articles.

  • Switch to the Agent Panel by clicking the link in the top-right corner.
  • Click the Knowledgebase tab in the top navigation.
  • Click Categories in the submenu.
  • Click Add New Category.
  • Enter Common IT Issues as the category name.
  • Set the visibility to Public (this is required for end users to see it).
  • Click Add to create the category.

Now create your first FAQ article inside this category.

  • Click the FAQs submenu item under the Knowledgebase tab.
  • Click on the Common IT Issues category name.
  • Click Add New FAQ.
  • Enter How to Reset Your Password as the question title.
  • In the answer field, write 3-4 sentences describing self-service password reset steps (e.g., "Navigate to the self-service portal. Click Forgot Password. Enter your email address. Follow the link sent to your inbox to set a new password.").
  • Set the Listing Type to Public.
  • Click Add FAQ to save.

Why must both category and FAQ be Public?

In osTicket, both the category AND the individual FAQ must be marked Public for end users to see the article in the client portal. If either one is set to Private, the article stays internal-only.

  • Repeat the process to create a second FAQ. Click Add New FAQ again inside the Common IT Issues category.
  • Enter VPN Connection Troubleshooting Guide as the question title.
  • In the answer field, write common VPN fixes (e.g., "Restart the VPN client. Check that your internet connection is active. On macOS, go to System Settings and remove then re-add the VPN profile. On Windows, run the Network Troubleshooter.").
  • Set Listing Type to Public and click Add FAQ.
  • Create the third and final FAQ. Click Add New FAQ inside Common IT Issues.
  • Enter Connecting to Wi-Fi After an OS Update as the question title.
  • In the answer field, write reconnection steps (e.g., "Open your Wi-Fi settings. Click Forget Network on the office Wi-Fi entry. Reconnect by selecting the network and entering the password. If the issue persists, restart your laptop.").
  • Set Listing Type to Public and click Add FAQ.

Time to verify that end users can actually see your articles. Before you check, predict what you expect to see at the client portal's knowledge base page.

  • Open a new browser tab and navigate to http://localhost:8080/kb/.

You should see the "Common IT Issues" category listed with all three FAQ articles visible. End users can now browse these articles and find answers without submitting a ticket.

Knowledge base page is blank or showing a 404?

Verify that you enabled the Knowledge Base in Admin Panel > Settings > Knowledgebase. Also confirm that both the "Common IT Issues" category and each FAQ article have their visibility set to Public. A category needs at least one Public FAQ inside it to appear on the client portal.

Help me figure out why my knowledge base articles aren't showing up in the client portal.

Secret mission

Automate Ticket Routing with Filters

Manual re-categorization works fine for 12 tickets. But a real help desk handles hundreds per week. Can you build an automation rule that routes VPN tickets to the right team without any human intervention?

Clean Up Your Resources

Clean Up Your Resources

This project runs entirely on your local machine using Docker containers. There are no cloud services or ongoing costs to worry about.

Decide whether to keep your resources running, pause them to come back later, or delete them entirely.

Resources you used:

  • Docker containers (osticket and osticket-mysql) running locally.
  • Docker volume (osticket-db) storing your MySQL database.
  • Project folder C:\osticket-lab containing your docker-compose.yml file.
  • Docker Desktop application installed on your machine.

Keep everything running

No action needed. Choose this if you are still actively building on your osTicket lab or want to practice more ITIL workflows.

  • Your containers will keep running as long as Docker Desktop is open.
  • Access the Staff Panel anytime at http://localhost:8080/scp/.
  • Access the client portal anytime at http://localhost:8080/.
  • Docker Desktop will use approximately 1-2 GB of RAM while running.

Pause - I'll come back to this later

Shut down the containers to free up memory. Your data is preserved in the Docker volume and will be there when you restart.

  • Open PowerShell and navigate to your project folder by running:
cd C:\osticket-lab
  • Stop the containers by running:
docker compose stop
  • When you are ready to come back, restart the containers by running:
docker compose start
  • You can also quit Docker Desktop from the system tray to free up more memory. The containers will automatically restart next time you open Docker Desktop.

Delete - I don't want to use this again

Remove all project containers, volumes, and files. This cannot be undone.

  • Open PowerShell and navigate to your project folder by running:
cd C:\osticket-lab
  • Remove the containers and all stored data by running:
docker compose down -v
  • This removes both containers and the osticket-db volume containing your database.
  • Delete the project folder by running:
cd C:\
Remove-Item -Recurse -Force C:\osticket-lab
  • If you no longer need Docker Desktop for other projects, uninstall it. Open Settings from the Start menu.
  • Select Apps, then Apps & features.
  • Find Docker Desktop in the list, select it, and click Uninstall.
  • Confirm by clicking Uninstall again.

Nice Work!

Nice Work!

You just built and operated a fully functional IT support desk from scratch. You configured departments, SLA plans, and help topics, then triaged and resolved 12 realistic tickets using the same ITIL incident management lifecycle that production help desks follow every day.

You've learned how to:

  • Install and configure a self-hosted IT ticketing system (osTicket) using Docker, with departments, help topics, and SLA plans that mirror a real IT support organization.
  • Log, triage, and resolve tickets using the ITIL incident management lifecycle: categorize, prioritize, assign, resolve, and close.
  • Build a public-facing knowledge base with self-service articles that reduce repeat tickets by helping end users solve common issues themselves.
  • Secret Mission: Configure automated ticket filters to route and prioritize incoming tickets without manual intervention.

Ready to quiz yourself?