Releases: heyvaldemar/tf2-server-docker-compose
Releases · heyvaldemar/tf2-server-docker-compose
Release list
v1.2.0
Added
TF2_SERVER_TIMEZONE: the game gets the household clock too. Every timestamp this server writes — a ban, a join, the crash it leaves behind — is read next to a log line from somewhere else, and two clocks turn that into arithmetic. Six of this fleet's eleven game templates already carried the setting and this one did not. It defaults to UTC, which is now a choice rather than an accident, and the image carries the whole tz database so any zone name works. Measured against the pinned image: unset givesUTC, set gives the zone asked for.
Upgrading
git pull (or ./update.sh), then docker compose up -d. Nothing changes unless you set the new variable: the default is UTC, which is what the container did before.
Full history in CHANGELOG.md.
v1.1.0
Added
update.sh: move between release tags on purpose. It updates to the latest release (a combination this repository's CI has booted and smoke-tested), refuses to cross a major version unattended, refuses to run over local changes, and names any new required variable before anything has moved.--dry-runsays what would happen.
Upgrading
git pull (or ./update.sh). Nothing running changes: this release adds or extends the update script and touches no image pin.
Full history in CHANGELOG.md.
v1.0.0
Added
- A Team Fortress 2 dedicated server, image pinned by digest as an
interpolation default, sogit pulldelivers the build this repository has
tested and.envoverrides survive it. The tag islatestbecause upstream
publishes no version numbers: the digest is the version, and the daily
freshness check is what notices a rebuild. - A health check anchored to the game binary rather than a substring. Two
commands run in the container:srcds_linux64, the game, and
srcds_run_64, its restart wrapper. A substring search is satisfied by
either, so the game can crash and leave the wrapper standing while the
container reports healthy — and docker does not restart an unhealthy
container by itself.tests/e2e-healthcheck.shproves the distinction
against a real container, with no game download. - The hostname in server.cfg, not on the command line. The launcher drops
everything after a|in an argument; a name passed through.envarrived
truncated with no error. - A 24-slot casual rotation that bots keep alive.
tf_bot_quota_mode fill
with a quota of six: bots yield slots as humans join, so the server never
reads as empty in the browser. Every map on the rotation ran with a
navigation mesh on the machine this template comes from; anavs/mount is
there for maps that ship without one. - The published port equal to the port the server binds. Steam's list
records what the server bound, not what was forwarded, so a mismatch hands
players an address where a different server answers. - Measured limits. A full server peaked at 1.57 GB; the 4 GB ceiling
exists so a leak here cannot get some other container OOM-killed in its
place. - Deployment Verification CI: shell and workflow linting, a Trivy scan of
the pinned image, a daily freshness check on the pin, and the health-check
suite. It deliberately does not boot the game: the image is 10 GB compressed,
and a test that pretends a runner can hold it never runs.
Upgrading
First release: nothing to upgrade from. git clone, copy .env.example to .env, create the external volume where the compose file says so, and docker compose up -d.
Full history in CHANGELOG.md.