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
8443approved 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:
text
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
-
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.
-
Double-click
Install-BareBonesTicketing.cmd.
You can also run the same file from an already-elevated Command Prompt.
-
Approve the User Account Control prompt.
-
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.
-
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. A PostgreSQL installer failure is reported immediately with
its exit code, and a redacted copy of the PostgreSQL installer log is kept at
C:\ProgramData\BareBonesTicketing\install\postgresql-installer-failure.log
(readable by administrators only; removed again by the next successful
install).
-
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.
-
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.
-
Open PowerShell as Administrator.
-
Change to the extracted package root.
-
Run:
powershell
.\Install-BareBonesTicketing.ps1 -DatabaseMode External
- 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.
-
Wait for the installer to run its authority and role-name checks, create the restricted runtime identity, apply migrations, and test the runtime connection.
-
Continue only when both database setup and runtime privilege verification report success.
-
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
BareBonesTicketingas running. In local database mode,BareBonesTicketingPostgreSQL18is also running. - The installer reported database setup and runtime privilege verification as successful.
- The firewall rule is enabled for inbound TCP
8443. It appears inwf.mscasBareBones Ticketing HTTPS. https://localhost:8443/setupresponds.-
The installation record contains no password, connection string, certificate password, or private address.
-
https://localhost:8443/health/readyreturns{"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 — and, for a PostgreSQL stage,
postgresql-installer-failure.log in the same folder. Correct the cause and
rerun the same package. If the earlier failure left a half-finished
product-managed PostgreSQL installation behind, the rerun refuses within
seconds and names the setup record and PostgreSQL directories to remove first —
do that cleanup, then rerun.
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.