Finlay.worksBareBones Ticketing manual

Install On Windows Server

This page installs the application as the BareBonesTicketing Windows Service on one Windows Server host. The default path also installs and manages PostgreSQL 18 on the same host.

The package is self-contained. Do not install .NET, the ASP.NET Core runtime, an SDK, IIS, or Docker.

Before you start

  • Windows Server 2019, 2022, or 2025, under your organization's control.

  • Windows Administrator rights on that host.

  • Inbound TCP 8443 approved under your firewall policy.

  • The customer package, its manifest, integrity evidence, and legal material, extracted to a folder. Extract it fully — do not run the installer from inside the archive.

  • A decision on database mode. Local is the default. See PostgreSQL.

  • For an offline install, the exact PostgreSQL installer file placed beside Install-BareBonesTicketing.cmd:

    postgresql-18.4-2-windows-x64.exe
    SHA-256: 0698d1a6083da490e5a57149257f5d9220d8c34109ed11b38aa592d320bf5385
    Size: 376326192 bytes

    For a connected install, the installer downloads this same file from EnterpriseDB. It checks the hash and the EnterpriseDB publisher signature, and it will not fall back to another version.

Install with the local database

  1. Check that the package, manifest, integrity evidence, legal material, and version procedure all name the same product and version. If they disagree, stop and return the package to whoever supplied it.

  2. Double-click Install-BareBonesTicketing.cmd.

    You can also run the same file from an already-elevated Command Prompt.

  3. Approve the User Account Control prompt.

  4. Wait. The installer checks the host and package, installs the PostgreSQL server and command-line tools, creates the BareBones Ticketing database, creates the restricted runtime database identity, applies the database migrations, installs and starts the Windows Service, and adds the firewall rule.

  5. Read the final result. Continue only if the installer reports success.

    On success it prints two addresses: https://localhost:8443/setup, which it has already tested, and https://<machine-name>:8443/setup for use from another computer. It tries to open the local one in a browser.

    If it failed, read C:\ProgramData\BareBonesTicketing\install\last-install-failure.json for the stage that failed, and the Windows Event Viewer Application and System logs.

  6. Open the setup address. Your browser warns that the certificate is not trusted. That is expected: the application is using its own self-signed bootstrap certificate. Confirm you are on the right server before continuing.

  7. Go to First administrator.

Install against an existing PostgreSQL server

Use this only when your organization has deliberately approved an existing PostgreSQL target. The database must already exist before you start.

  1. Open PowerShell as Administrator.

  2. Change to the extracted package root.

  3. Run:

    .\Install-BareBonesTicketing.ps1 -DatabaseMode External
  4. Answer the prompts. You are asked only for values the installer has no default for — the server, the setup and runtime usernames, and the setup password. The port, the target database name, and the SSL mode are supplied with defaults (5432, barebonesticket, Prefer) and are not prompted for. Override them with the corresponding installer parameters if your site needs different values.

    Do not put the password on the command line. If your automation needs the BBT_DATABASE_ADMIN_PASSWORD environment variable, remove it once the installer returns.

  5. Wait for the installer to run its authority and role-name checks, create the restricted runtime identity, apply migrations, and test the runtime connection.

  6. Continue only when both database setup and runtime privilege verification report success.

  7. Go to First administrator.

The setup login needs CREATEROLE or PostgreSQL superuser rights. See PostgreSQL for why, and for exactly what setup touches.

What gets installed where

Path Contents
C:\Program Files\BareBonesTicketing\app Application binaries
C:\Program Files\BareBonesTicketing\tools Maintenance tools
C:\ProgramData\BareBonesTicketing\config Generated runtime configuration
C:\ProgramData\BareBonesTicketing\attachments Ticket attachments
C:\ProgramData\BareBonesTicketing\keyring Data Protection keys and managed HTTPS material
C:\ProgramData\BareBonesTicketing\install Installer state and local-database maintenance record
C:\ProgramData\BareBonesTicketing\backups Rollback copies of the application files
C:\ProgramData\BareBonesTicketing\postgresql\data Product-managed PostgreSQL data
C:\Program Files\PostgreSQL\18 PostgreSQL program files

Services and firewall

Name Type When it exists
BareBonesTicketing Windows Service Always
BareBonesTicketingPostgreSQL18 Windows Service Local database mode only
BareBonesTicketing-HTTPS Inbound firewall rule, TCP 8443 Always

The installer creates or repairs only that one firewall rule. It does not open the HTTP port.

That rule has two names. BareBonesTicketing-HTTPS is its internal name, which is what Get-NetFirewallRule -Name matches. BareBones Ticketing HTTPS is its display name, which is what Windows Defender Firewall (wf.msc) lists and what default Get-NetFirewallRule output shows. Searching the firewall console for BareBonesTicketing-HTTPS finds nothing.

The local setup credential is stored in the maintenance record, readable only by Administrators and SYSTEM. The Windows Service receives only the restricted runtime database configuration, never the setup credential.

Check it worked

  • Windows reports BareBonesTicketing as running. In local database mode, BareBonesTicketingPostgreSQL18 is also running.

  • The installer reported database setup and runtime privilege verification as successful.

  • The firewall rule is enabled for inbound TCP 8443. It appears in wf.msc as BareBones Ticketing HTTPS.

  • https://localhost:8443/setup responds.

  • The installation record contains no password, connection string, certificate password, or private address.

  • https://localhost:8443/health/ready returns {"status":"Healthy"}.

The installer also configures the Windows service to restart itself if it fails, retrying twice a minute apart before giving up. That covers a crashed process. It does not cover a process that is running but cannot reach its database, which is what /health/ready is for. See Diagnostics and logs.

If it does not work

The installer fails partway. Read last-install-failure.json for the stage name, then the Event Viewer logs. Correct the cause and rerun the same package.

The offline PostgreSQL file does not match. Stop. Do not substitute another installer. Get the correct file.

You need to repair or upgrade. Rerun the current approved package. It keeps the database mode, runtime identity, configuration, PostgreSQL data, attachments, and Data Protection keys. It stops the service before replacing files and keeps a copy of the previous application files.

Replacing application files is not a database rollback. If database setup already completed on a rerun, the schema change stands.

Setup is only reachable over an untrusted connection. Stop. Do not type administrator credentials. Go back to whoever owns HTTPS for this deployment.

Next step

First administrator.