{"id":17679365,"url":"https://github.com/tmck-code/csgo-surf-local-server","last_synced_at":"2026-03-19T01:46:15.988Z","repository":{"id":167910689,"uuid":"640395980","full_name":"tmck-code/csgo-surf-local-server","owner":"tmck-code","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-22T22:34:40.000Z","size":321,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-19T17:54:53.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"SourcePawn","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tmck-code.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-14T00:12:56.000Z","updated_at":"2025-09-19T11:45:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"904f83b2-a3bb-44b3-8dac-aa4161df95f4","html_url":"https://github.com/tmck-code/csgo-surf-local-server","commit_stats":null,"previous_names":["tmck-code/csgo-surf-local-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tmck-code/csgo-surf-local-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmck-code%2Fcsgo-surf-local-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmck-code%2Fcsgo-surf-local-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmck-code%2Fcsgo-surf-local-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmck-code%2Fcsgo-surf-local-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tmck-code","download_url":"https://codeload.github.com/tmck-code/csgo-surf-local-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmck-code%2Fcsgo-surf-local-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29594242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T18:54:29.675Z","status":"ssl_error","status_checked_at":"2026-02-18T18:50:50.517Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-24T08:22:12.251Z","updated_at":"2026-02-18T20:10:36.080Z","avatar_url":"https://github.com/tmck-code.png","language":"SourcePawn","funding_links":[],"categories":[],"sub_categories":[],"readme":"# csgo-surf-local-server\n\n\u003e _A local CSGO SurfTimer™ server in docker_\n\n- This repository contains the tools to run a local CSGO SurfTimer™ server in docker.\n- This can bootstrap a new one with all the required dependencies. or using an existing `csgo` directory.\n\n---\n\n- [csgo-surf-local-server](#csgo-surf-local-server)\n  - [TODO](#todo)\n  - [setting up the server](#setting-up-the-server)\n    - [bootstrap commands](#bootstrap-commands)\n    - [the bootstrap explained](#the-bootstrap-explained)\n    - [admin users](#admin-users)\n  - [Admin \\\u0026 Debug commands](#admin--debug-commands)\n    - [The rcon utility](#the-rcon-utility)\n  - [Additional Config](#additional-config)\n    - [`surf_server.cfg`](#surf_servercfg)\n    - [The GSLT token](#the-gslt-token)\n  - [map zones](#map-zones)\n    - [adding your own map zones](#adding-your-own-map-zones)\n  - [Resources](#resources)\n\n## TODO\n\n- [x] create separate cfg/docker-compose definitions for 64/85/100 tick rates\n- [x] get all plugins working\n  - [x] ramp fix\n  - [x] movement unlocker working\n- [ ] configure all plugins\n  - [ ] map chooser, with config\n\n## setting up the server\n\n\u003e Before running the server, you'll need a GSLT token (see [The GSLT token](#the-gslt-token))\n\n### bootstrap commands\n\n```shell\n# create a new csgo config directory (csgo-data/) and mysql data directory\n# (mysql_64t) inside the repository\nDB_PASSWORD=YOUR_PASSWORD make bootstrap\n\n# run a 64 tick server using the data/ directory (or any existing csgo dir)\nCSGO_GSLT=YOUR_TOKEN make serve-64t\n\n# run a 100 tick server using the data/ directory (or any existing csgo dir)\n# this uses a separate DB to 64 tick server to preserve your records\nCSGO_GSLT=YOUR_TOKEN make serve-100t\n```\n\n### the bootstrap explained\n\nThere are a few distinct stages that occur in order to get everything in place\n\n1. Building the Dockerfile\n   1. This is based off the image `cm2network/csgo:sourcemod`, which comes with all the dependencies to run a CSGO server, and sourcemod.\n   2. This Dockerfile fetches all of the required plugins, including but not limited to\n     - [SurfTimer](https://github.com/surftimer/SurfTimer)\n     - [SurfZones](https://github.com/Sayt123/SurfZones)\n     - CSGO movement unlocker (ground sliding for prestrafe)\n     - Ramp Slope Fix (ramp bug fix)\n2. Copying the CSGO directory from the Docker image -\u003e your local machine.\n   1. The CSGO directory in the docker image contains all of the required plugins in the correct location\n   2. Pulling this into your local machine allows easy file access \u0026 backups\n3. Bootstrap the MySQL database with the zones\n   1. The SurfTimer plugin needs zone coordinates and WR times in order to function properly!\n   2. These sql files were downloaded during the docker build, copied to the local machine, and then bind-mounted for running\n4. Tweak configs\n   1. Set up admin users\n   2. Adjust server cfg file\n   3. Update the `databases`\n\n### admin users\n\n\u003e There is an excelled community wiki here that details adding admins: https://wiki.alliedmods.net/Adding_Admins_(SourceMod)\n\nWhen you launch the server you'll find that you can't run `!zone` or similar commands, as there aren't any admins configured.\n\n1. In your CSGO client, open the console and run `status`, which will output something like this:\n  ```shell\n  # userid name uniqueid connected ping loss state rate\n  #47 \"ESL - GOTV\" BOT active 24\n  # 70 \"username\" STEAM_1:1:xxxyxyxyxyx 02:06 33 0 active 128000\n  #end\n  ```\n  1. Grab the \"uniqueid\" for your user, e.g. `STEAM_1:1:xxxyxyxyxyx`\n2. Edit the admin file `csgo-data/csgo/addons/sourcemod/configs/admins_simple.ini`\n  1. Add the line `\"STEAM_1:1:xxxyxyxyxyx\" \"@Full Admins\"`\n  2. You can double-check the admin group name by looking in `csgo-data/csgo/addons/sourcemod/configs/admin_groups.cfg`\n3. Call `sm_reloadadmins` by _either_\n  1. Using the CSGO console and running `rcon sm_reloadadmins`, or\n  2. Running the rcon script:\n    ```shell\n    RCON_PASSWORD=XXX RCON_HOST=123.123.123.123 ./ops/scripts/rcon_command 'sm_reloadadmins'\n    ```\n\n## Admin \u0026 Debug commands\n\n### The rcon utility\n\n```shell\n./ops/rcon_command 'sm plugins list'\n```\n\n## Additional Config\n\n### `surf_server.cfg`\n\n\u003e see `config/surf_server.cfg`\n\nThis CFG file contains all of the required vars to make surf work.\n\n### The GSLT token\n\nThe GSLT token is required to run the server. The Makefile (and docker-compose) expects this to be accessible via the environment variable `CSGO_GSLT`\n\nIn order to create a GSLT token, navigate to this page, login and follow the prompts to create a game server account and token: https://steamcommunity.com/dev/managegameservers\n\n## map zones\n\n### adding your own map zones\n\nhttps://github.com/Sayt123/SurfZones/pull/2#issuecomment-1630978597\n\n```\nWhen manually zoning like you did here, you'd want to raise your zones quite a bit on both ends.\nStart zones you usually want to encapsulate the info_teleport_destination entity where players\nspawn. You can see them with !itd. This is also where you can find other spawns like the bonus!\n\nMost modern maps/mappers also use hookzones to make zoning easier as well. A trigger_multiple\nentity that's given a name like mapstart | cp1 | bonus1start | bonus1end. Using the !hookzone\nmenu you can actually hook a map or bonus zone TO that trigger shape the mapper made.\n\n(Hard to see in the picture but with !triggers enabled you can see the trigger_multiple's shape\nthis hookzone is using.)\n\n...\n\nOther than that on linear maps like this you also would want to add a few Checkpoint zones\nevenly spaced between the start and end zones.\n\n...\n```\n\n## Resources\n\n- There's an excellent community developer guide for CSGO dedicated servers\n  - https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive/Dedicated_Servers\n- How to add your own map zones\n  - https://github.com/Sayt123/SurfZones/pull/2#issuecomment-1630978597\n- How to run CSGO via Steam on Linux\n  - https://github.com/ValveSoftware/csgo-osx-linux/issues/3291#issuecomment-1741956737\n- Community wiki for adding admins\n  - https://wiki.alliedmods.net/Adding_Admins_(SourceMod)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmck-code%2Fcsgo-surf-local-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftmck-code%2Fcsgo-surf-local-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmck-code%2Fcsgo-surf-local-server/lists"}