Hosting Guides

Hosting ACC Racing Leagues via Pterodactyl

10 min readDebian 12PterodactylUnreal
Once your server is online, jump to the Assetto Corsa Competizione command and config reference.

Assetto Corsa Competizione runs on Unreal Engine, but its dedicated server is a Windows binary that is shipped without a panel friendly wrapper. The community Pterodactyl egg solves the deployment side via Wine, leaving the operator with the real work: maintaining a strict trio of JSON config files (settings.json, event.json, entrylist.json) that define a competitive league. This guide walks through running a locked Sunday night GT3 lobby with whitelisted entrants and a fixed track rotation, on Debian 12 inside Pterodactyl.

Prerequisites

  • Debian 12 with Pterodactyl Panel and Wings.
  • The ACC community egg imported into the Sims nest.
  • UDP 9231 (game) and UDP 9232 (TCP, HTTP listing) open at the firewall.
  • A list of player Steam GUIDs (S76561198xxxxxxxx) for the league entrants.

Step 1: Create the Server

  • Nest: Sims. Egg: Assetto Corsa Competizione.
  • Memory: 4096 MB (ACC is light, this is comfortably above its footprint).
  • Disk: 10 GB.

Step 2: configuration.json

Note: every ACC JSON file is UTF-16 LE with BOM, not UTF-8. Edit them on the panel UI (the egg handles encoding) or via an editor that respects encoding. A UTF-8 file is silently rejected and the server logs could not parse config with no further detail.

cfg/configuration.json
{
"udpPort": 9231,
"tcpPort": 9232,
"maxConnections": 28,
"registerToLobby": 1,
"lanDiscovery": 0,
"configVersion": 1
}

Step 3: settings.json

cfg/settings.json
{
"serverName": "Sunday Night GT3 League",
"password": "REPLACE_LONG_PASSWORD",
"spectatorPassword": "REPLACE_SPECTATOR",
"adminPassword": "REPLACE_ADMIN",
"carGroup": "GT3",
"trackMedalsRequirement": 3,
"safetyRatingRequirement": 70,
"racecraftRatingRequirement": 60,
"ignorePrematureDisconnects": 1,
"isRaceLocked": 1,
"shortFormationLap": 0,
"dumpLeaderboards": 1,
"dumpEntryList": 1,
"isPrivateQualifyingEnabled": 1,
"configVersion": 1
}

Step 4: event.json

cfg/event.json
{
"track": "spa",
"preRaceWaitingTimeSeconds": 80,
"sessionOverTimeSeconds": 120,
"ambientTemp": 18,
"cloudLevel": 0.2,
"rain": 0.0,
"weatherRandomness": 1,
"configVersion": 1,
"sessions": [
{ "hourOfDay": 17, "dayOfWeekend": 1, "timeMultiplier": 1, "sessionType": "P", "sessionDurationMinutes": 30 },
{ "hourOfDay": 18, "dayOfWeekend": 2, "timeMultiplier": 8, "sessionType": "Q", "sessionDurationMinutes": 15 },
{ "hourOfDay": 19, "dayOfWeekend": 3, "timeMultiplier": 4, "sessionType": "R", "sessionDurationMinutes": 60 }
]
}

Step 5: entrylist.json

The entrylist is what makes the lobby exclusive. Only Steam GUIDs listed here can join when the server is locked (isRaceLocked: 1). It also pins each driver to a specific car model and race number, which is the basis for a real league.

cfg/entrylist.json
{
"entries": [
{
"drivers": [
{
"firstName": "Alex",
"lastName": "Driver",
"shortName": "DRV",
"driverCategory": 3,
"playerID": "S76561198000000001"
}
],
"raceNumber": 11,
"forcedCarModel": 12,
"ballastKg": 0,
"restrictor": 0,
"isServerAdmin": 0
}
],
"forceEntryList": 1,
"configVersion": 1
}

Step 6: Boot and Verify Lobby Visibility

server console
# Healthy first boot prints:
# Registration of server succeeded
# Lobby connection successful, listing as: Sunday Night GT3 League
# Listening on UDP 9231, TCP 9232

Performance and Tuning

  • Keep maxConnections at or below 28. ACC's netcode degrades visibly past 30 cars.
  • Set trackMedalsRequirement and safetyRatingRequirement to filter out unlicensed drivers from public lobbies.
  • Use forceEntryList: 1 for any locked league. Without it, the lobby is open even with a password set.
  • Schedule a daily restart at 04:00. ACC's process holds memory after long sessions even when empty.

Conclusion

A working ACC league deployment is 90 percent JSON discipline and 10 percent infrastructure. Pterodactyl handles the deploy, Wine handles the binary, and the four config files (configuration, settings, event, entrylist) define the entire competitive experience. Lock them in a private git repository, treat changes as pull requests, and the Sunday night lobby behaves like a real championship.