joedwards32 / CS2

CS2 Dedicated Server Docker Image
https://hub.docker.com/r/joedwards32/cs2
MIT License
269 stars 53 forks source link

Worshop maps support #57

Open xe1os opened 10 months ago

xe1os commented 10 months ago

Hi,

Would like to have workshop maps support functionality.

Thank you

DizzyThermal commented 10 months ago

https://github.com/joedwards32/CS2/issues/47

The host can run:

host_workshop_map 12313123

Where 12313123 is the ID of the workshop map (in the URL)

matiargs commented 10 months ago

I was testing the workshops maps, and it works perfect with the host_workshop_map. I'm running that from rcon when the server start. Is there a way to auto load the workshops maps? Because if I don't set host_workshop_map when I try to changelevel the servers says "invalid map name".

dmiales commented 10 months ago

@matiargs @DizzyThermal hi, please show me your docker-compose.yml with an example where any workshop map works. I tried everything possible.

DizzyThermal commented 10 months ago

@matiargs @DizzyThermal hi, please show me your docker-compose.yml with an example where any workshop map works. I tried everything possible.

I use: CS2_ADDITIONAL_ARGS="+host_workshop_map <id>"

dmiales commented 10 months ago

Oh, here's the funny thing, as soon as I add a pool of cards, everything breaks. And if only host_workshop_map - everything works.

- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807 +host_workshop_collection 2428398726" does not work - CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807" works

yannickvr commented 9 months ago

Oh, here's the funny thing, as soon as I add a pool of cards, everything breaks. And if only host_workshop_map - everything works.

- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807 +host_workshop_collection 2428398726" does not work - CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807" works

I had this issue as well. Not sure what is the exact reason, but if I move "${CS2_ADDITIONAL_ARGS}" in entry.sh to somewhere higher, so other parameters are pushed after, this solves the issue. E.g.:

eval "./cs2" -dedicated \
        "${CS2_IP_ARGS}" -port "${CS2_PORT}" \
        -console \
        -usercon \
        -maxplayers "${CS2_MAXPLAYERS}" \
        "${CS2_GAME_MODE_ARGS}" \
        +mapgroup "${CS2_MAPGROUP}" \
        +map "${CS2_STARTMAP}" \
        +rcon_password "${CS2_RCONPW}" \
        +sv_password "${CS2_PW}" \
        "${CS2_ADDITIONAL_ARGS}" \ <<--- this used to be last
        +sv_lan "${CS2_LAN}"
JoSchaap commented 9 months ago

asking here before posting it as an issue just to make sure there are more with this issue; if not it might be the 3 collections i tried.

when using +host_workshop_collection XXX all players are disconnected (they actually just lose connection) on mapchange to the next workshop map. also at round end it first reloads the map it was already on before switching to the next one..

matiargs commented 9 months ago

I've been reading some forums and the discussion page in steam, and there's some problem with the dedicated server and the workshops collection. We need to wait the fix from Valve sides.

At the moment, I'm setting up a server with a default map (de_dust2) and when the server is up, I use rcon to send the command to host_workshop_collection XXXXXX, and then send the command to changelevel XXXXX to a level from that collection, and is working ok. When the map ends, the server gives you the options to vote with the maps from the collection. This solution works for me.

I couldn't make it work with the CS2_ADDITIONAL_ARGS.

dmiales commented 9 months ago

@matiargs изображение Why does this console command work for you?

host_workshop_collection 3070959270 host_workshop_collection 2428398726

https://steamcommunity.com/sharedfiles/filedetails/?id=3070959270 https://steamcommunity.com/sharedfiles/filedetails/?id=2428398726

dmiales commented 9 months ago

@yannickvr It didn’t work out for me, I changed two lines, as you advised, but there was no result. Can you please attach your docker composer file (removing all confidential data). Particularly interesting are ID cards and groups

JoSchaap commented 9 months ago

host_workshop_collection itself works well but on first load you'll need to be patient as it needs to download the maps. (also dont forget your -authkey ;) mapgroup can be set to workshop

the only thing that is broken is the cycling between workshop maps in your collection. It tends to stick on the first map in the collection end of round. players voting for the next map in cycle does work though, endround mapvote does not.

if you have a small collection and it still refuses to load. start small with 1 or 2 maps in it and gradually add maps + restart server big chance one of the maps in the collection is broken or not for cs2 ;)

dmiales commented 9 months ago

@JoSchaap Can you also please attach your docker composer file

Hannes-Beckmann commented 9 months ago

When I set a workshop map and try to join the server, I get a segmentation fault

Below the error message:

cs2-dedicated  | Server waking up from hibernation
cs2-dedicated  | Sending S2C_CONNECTION to xxxxxxx:55241 [addons:'3072739628']
cs2-dedicated  | Client #0 "PlayerName" connected @xxxxxxx:55241
cs2-dedicated  | entry.sh: line 84:    34 Segmentation fault      (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password xxxpass +sv_setsteamaccount XXX +sv_password xxxpass +sv_lan 0 "+host_workshop_map 3072739628" 

Has anyone experienced similar issues and knows of a fix?

I don't know if it is releveant but when I join the server hosting a standard map, the second time I join the server, it also segfaults:

cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | WatchDog! Server took too long to process (probably infinite loop)
cs2-dedicated  | Watchdog timeout exceeded, exiting
cs2-dedicated  |  0 Watchdog timeout exceeded, exiting
cs2-dedicated  |
cs2-dedicated  | entry.sh: line 84:    48 Segmentation fault      (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0
ComputersWithTimo commented 9 months ago

@Hannes-Beckmann

cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | WatchDog! Server took too long to process (probably infinite loop) cs2-dedicated | Watchdog timeout exceeded, exiting cs2-dedicated | 0 Watchdog timeout exceeded, exiting cs2-dedicated | cs2-dedicated | entry.sh: line 84: 48 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0

I'm gonna guess your system is overloaded. Please make sure to have at least 2GB of free RAM and 2 CPU cores. Also check your file system (fsck)

For me, the server uses around 1.1 gigs when no player is connected.

Hannes-Beckmann commented 9 months ago

@ComputersWithTimo I am running the server on a dedicated machine with Proxmox in a Ubuntu Server virtual machine. I have upgraded the RAM from 8GB to 16GB and the CPU cores from 4 cores to 8 cores. Now, the server is up and running, and I can successfully play workshop maps. Thank you for your help!

joedwards32 commented 8 months ago

When I set a workshop map and try to join the server, I get a segmentation fault

Below the error message:

cs2-dedicated  | Server waking up from hibernation
cs2-dedicated  | Sending S2C_CONNECTION to xxxxxxx:55241 [addons:'3072739628']
cs2-dedicated  | Client #0 "PlayerName" connected @xxxxxxx:55241
cs2-dedicated  | entry.sh: line 84:    34 Segmentation fault      (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password xxxpass +sv_setsteamaccount XXX +sv_password xxxpass +sv_lan 0 "+host_workshop_map 3072739628" 

Has anyone experienced similar issues and knows of a fix?

I don't know if it is releveant but when I join the server hosting a standard map, the second time I join the server, it also segfaults:

cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated  | WatchDog! Server took too long to process (probably infinite loop)
cs2-dedicated  | Watchdog timeout exceeded, exiting
cs2-dedicated  |  0 Watchdog timeout exceeded, exiting
cs2-dedicated  |
cs2-dedicated  | entry.sh: line 84:    48 Segmentation fault      (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0

Server hibernation seems to cause this. I tested CS2 outside of the docker container and the same segfault occurs, so it looks like a CS2 on Linux bug.

I'm looking at introducing a change to the default server.cfg to make hibernation configurable and have it disabled by default.

labaland commented 7 months ago

@matiargs изображение Why does this console command work for you?

host_workshop_collection 3070959270 host_workshop_collection 2428398726

https://steamcommunity.com/sharedfiles/filedetails/?id=3070959270 https://steamcommunity.com/sharedfiles/filedetails/?id=2428398726

Where do you type that message? What program? is it in portainer? if yes, how? :)

matiargs commented 7 months ago

Where do you type that message? What program? is it in portainer? if yes, how? :)

I send the command from RCON. You can use this tool https://github.com/gorcon/rcon-cli.

labaland commented 7 months ago

Is it not possible to fix this an easy way yet? if yes, what to add in docker-compose?

domve commented 1 month ago

In case anyone is still having issues with map rotation using host_workshop_collection one quick look at the logs reveals exactly what the problem is

CHANGELEVEL: Not changing level, mp_match_end_restart is false, mp_match_end_changelevel is false and next is the same

Once mp_match_end_changelevel is set, workshop collections work just fine for me

environment:
  CS2_STARTMAP: "\\<empty\\>"
  CS2_MAPGROUP: workshop
  CS2_ADDITIONAL_ARGS: "+host_workshop_collection <id> +mp_match_end_changelevel true"
joedwards32 commented 1 week ago

In case anyone is still having issues with map rotation using host_workshop_collection one quick look at the logs reveals exactly what the problem is

CHANGELEVEL: Not changing level, mp_match_end_restart is false, mp_match_end_changelevel is false and next is the same

Once mp_match_end_changelevel is set, workshop collections work just fine for me

environment:
  CS2_STARTMAP: "\\<empty\\>"
  CS2_MAPGROUP: workshop
  CS2_ADDITIONAL_ARGS: "+host_workshop_collection <id> +mp_match_end_changelevel true"

I've been experimenting with this and I don't get any options to vote on maps or automatic rotation to other maps in the collection, even with +mp_match_end_changelevel true

What behaviour do you see @domve? Can you vote on map changes etc?

Did you define the mapgroup workshop yourself in config?

joedwards32 commented 5 days ago

Keeping issue open. Support is experimental currently.

M-archand commented 4 days ago

I'm getting theses errors when trying to use the new env options:

[S_API FAIL] Tried to access Steam interface SteamUtils010 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUser023 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUtils010 before SteamAPI_Init succeeded.
M-archand commented 1 day ago

Has anyone been able to get the new CS2_HOST_WORKSHOP_COLLECTION and CS2_HOST_WORKSHOP_MAP env variables to work?

Did you test this yourself by chance @joedwards32 ?

joedwards32 commented 1 day ago

I did test myself in my dev environment and I'm right now waiting for a test container to spin up on AWS Fargate. Will post here with the result.

joedwards32 commented 1 day ago

Screenshot from 2024-09-05 21-54-31

joedwards32 commented 1 day ago

Here's my docker compose file from dev environment

services:
  cs2-server:
    image: joedwards32/cs2
    container_name: cs2
    environment:
      # Server configuration
      - SRCDS_TOKEN=**************                 # Game Server Token from https://steamcommunity.com/dev/managegameservers
      - STEAMAPPVALIDATE=0
      - CS2_SERVERNAME=changeme     # (Set the visible name for your private server)
      - CS2_CHEATS=0                # (0 - disable cheats, 1 - enable cheats)
      - CS2_PORT=27015              # (CS2 server listen port tcp_udp)
      - CS2_SERVER_HIBERNATE=0      # (Put server in a low CPU state when there are no players. 0 - hibernation disabled, 1 - hibernation enabled)
      - CS2_RCON_PORT               # (Optional, use a simple TCP proxy to have RCON listen on an alternative port. Useful for services like AWS Fargate which do not support mixed protocol ports.)
      - CS2_LAN=0                   # (0 - LAN mode disabled, 1 - LAN Mode enabled)
      - CS2_RCONPW=changeme         # (RCON password)
      - CS2_PW=changeme             # (CS2 server password)
      - CS2_MAXPLAYERS=11           # (Max players)
      # Game mode
      - CS2_GAMETYPE=0              # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
      - CS2_GAMEMODE=1              # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
      # Workshop Maps
      - CS2_HOST_WORKSHOP_COLLECTION=3320315839 # The workshop collection to use
      - CS2_HOST_WORKSHOP_MAP=3276886893        # The workshop map to use. If collection is also defined, this is the starting map.
      # Bots
      - CS2_BOT_DIFFICULTY=2        # (0 - easy, 1 - normal, 2 - hard, 3 - expert)
      - CS2_BOT_QUOTA=11             # (Number of bots)
      # TV
      - TV_AUTORECORD=0             # Automatically records all games as CSTV demos: 0=off, 1=on.
      - TV_ENABLE=0                 # Activates CSTV on server: 0=off, 1=on.
      - TV_PORT=27020               # Host SourceTV port
      - TV_PW=changeme              # CSTV password for clients
      - TV_RELAY_PW=changeme        # CSTV password for relay proxies
      - TV_MAXRATE=0                # World snapshots to broadcast per second. Affects camera tickrate.
      - TV_DELAY=0                  # Max CSTV spectator bandwidth rate allowed, 0 == unlimited
      # Logs
      - CS2_LOG=on                  # 'on'/'off'
      - CS2_LOG_MONEY=1             # Turns money logging on/off: (0=off, 1=on)
      - CS2_LOG_DETAIL=1            # Combat damage logging: (0=disabled, 1=enemy, 2=friendly, 3=all)
      - CS2_LOG_ITEMS=1             # Turns item logging on/off: (0=off, 1=on)
    volumes:
      - cs2:/home/steam/cs2-dedicated/  # Persistent data volume mount point inside container
    ports:
      - "27015:27015/tcp"           # TCP
      - "27015:27015/udp"           # UDP
      - "27020:27020/udp"           # UDP
volumes:
  cs2:
joedwards32 commented 1 day ago

And some rcon output from that running server

$ ./csgo-rcon-v1.3.0-linux-amd64 -a 192.168.0.31:27015 -p changeme status
Server:  Running [0.0.0.0:27015]
Client:  Disconnected
----- Status -----
@ Current  :  game
source   : console
hostname : changeme
spawn    : 3
version  : 1.40.3.0/14030 10072 secure  public
steamid  : [G:1:10988532] (85568392931027956)
udp/ip   : 0.0.0.0:27015 (public 109.156.218.170:27015)
os/type  : Linux dedicated
players  : 0 humans, 0 bots (0 max) (not hibernating) (unreserved)
---------spawngroups----
loaded spawngroup(  1)  : SV:  [1: de_biome | main lump | mapload]
loaded spawngroup(  2)  : SV:  [2: maps/de_biome_skybox | main lump | mapload | point_prefab]
loaded spawngroup(  3)  : SV:  [3: prefabs/misc/counterterrorist_team_intro | main lump | mapload | point_prefab]
loaded spawngroup(  4)  : SV:  [4: prefabs/misc/terrorist_team_intro | main lump | mapload | point_prefab]
loaded spawngroup(  5)  : SV:  [5: prefabs/misc/end_of_match | main lump | mapload | point_prefab]
loaded spawngroup(  6)  : SV:  [6: prefabs/misc/team_select | main lump | mapload | point_prefab]
---------players--------
  id     time ping loss      state   rate adr name
#end

$ ./csgo-rcon-v1.3.0-linux-amd64 -a 192.168.0.31:27015 -p changeme ds_workshop_listmaps
de_biome
de_vertigo_45
joedwards32 commented 1 day ago

And a working AWS ECS/Fargate example:

{
    "taskDefinitionArn": "arn:aws:ecs:eu-west-1:**********:task-definition/cs2:72",
    "containerDefinitions": [
        {
            "name": "cs2-container",
            "image": "joedwards32/cs2:latest",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 27015,
                    "hostPort": 27015,
                    "protocol": "udp"
                },
                {
                    "containerPort": 27016,
                    "hostPort": 27016,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 27020,
                    "hostPort": 27020,
                    "protocol": "udp"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "CS2_RCONPW",
                    "value": "changeme"
                },
                {
                    "name": "CS2_RCON_PORT",
                    "value": "27016"
                },
                {
                    "name": "SRCDS_TOKEN",
                    "value": "**********"
                },
                {
                    "name": "CS2_HOST_WORKSHOP_COLLECTION",
                    "value": "3320315839"
                },
                {
                    "name": "CS2_GAMETYPE",
                    "value": "0"
                },
                {
                    "name": "TV_PW",
                    "value": "changeme"
                },
                {
                    "name": "CS2_GAMEMODE",
                    "value": "1"
                },
                {
                    "name": "TV_ENABLE",
                    "value": "1"
                },
                {
                    "name": "CS2_BOT_DIFFICULTY",
                    "value": "2"
                },
                {
                    "name": "CS2_BOT_QUOTA",
                    "value": "11"
                },
                {
                    "name": "CS2_HOST_WORKSHOP_MAP",
                    "value": "3276886893"
                },
                {
                    "name": "CS2_PW",
                    "value": "changeme"
                },
                {
                    "name": "CS2_MAXPLAYERS",
                    "value": "11"
                }
            ],
            "mountPoints": [],
            "volumesFrom": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/simple-gaming-service/cs2",
                    "awslogs-region": "eu-west-1",
                    "awslogs-stream-prefix": "streaming"
                }
            },
            "systemControls": []
        }
    ],
    "family": "cs2",
    "executionRoleArn": "arn:aws:iam::**********:role/ecs-sgs-2d6",
    "networkMode": "awsvpc",
    "revision": 72,
    "volumes": [],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "ecs.capability.extensible-ephemeral-storage"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "2048",
    "memory": "4096",
    "ephemeralStorage": {
        "sizeInGiB": 50
    },
    "registeredAt": "2024-09-05T19:23:25.426Z",
    "registeredBy": "arn:aws:iam::**********:user/terraform",
    "tags": []
}
galinette-34 commented 8 hours ago

Here's my docker compose file from dev environment

services:
  cs2-server:
    image: joedwards32/cs2
    container_name: cs2
    environment:
      # Server configuration
      - SRCDS_TOKEN=**************                 # Game Server Token from https://steamcommunity.com/dev/managegameservers
      - STEAMAPPVALIDATE=0
      - CS2_SERVERNAME=changeme     # (Set the visible name for your private server)
      - CS2_CHEATS=0                # (0 - disable cheats, 1 - enable cheats)
      - CS2_PORT=27015              # (CS2 server listen port tcp_udp)
      - CS2_SERVER_HIBERNATE=0      # (Put server in a low CPU state when there are no players. 0 - hibernation disabled, 1 - hibernation enabled)
      - CS2_RCON_PORT               # (Optional, use a simple TCP proxy to have RCON listen on an alternative port. Useful for services like AWS Fargate which do not support mixed protocol ports.)
      - CS2_LAN=0                   # (0 - LAN mode disabled, 1 - LAN Mode enabled)
      - CS2_RCONPW=changeme         # (RCON password)
      - CS2_PW=changeme             # (CS2 server password)
      - CS2_MAXPLAYERS=11           # (Max players)
      # Game mode
      - CS2_GAMETYPE=0              # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
      - CS2_GAMEMODE=1              # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
      # Workshop Maps
      - CS2_HOST_WORKSHOP_COLLECTION=3320315839 # The workshop collection to use
      - CS2_HOST_WORKSHOP_MAP=3276886893        # The workshop map to use. If collection is also defined, this is the starting map.
      # Bots
      - CS2_BOT_DIFFICULTY=2        # (0 - easy, 1 - normal, 2 - hard, 3 - expert)
      - CS2_BOT_QUOTA=11             # (Number of bots)
      # TV
      - TV_AUTORECORD=0             # Automatically records all games as CSTV demos: 0=off, 1=on.
      - TV_ENABLE=0                 # Activates CSTV on server: 0=off, 1=on.
      - TV_PORT=27020               # Host SourceTV port
      - TV_PW=changeme              # CSTV password for clients
      - TV_RELAY_PW=changeme        # CSTV password for relay proxies
      - TV_MAXRATE=0                # World snapshots to broadcast per second. Affects camera tickrate.
      - TV_DELAY=0                  # Max CSTV spectator bandwidth rate allowed, 0 == unlimited
      # Logs
      - CS2_LOG=on                  # 'on'/'off'
      - CS2_LOG_MONEY=1             # Turns money logging on/off: (0=off, 1=on)
      - CS2_LOG_DETAIL=1            # Combat damage logging: (0=disabled, 1=enemy, 2=friendly, 3=all)
      - CS2_LOG_ITEMS=1             # Turns item logging on/off: (0=off, 1=on)
    volumes:
      - cs2:/home/steam/cs2-dedicated/  # Persistent data volume mount point inside container
    ports:
      - "27015:27015/tcp"           # TCP
      - "27015:27015/udp"           # UDP
      - "27020:27020/udp"           # UDP
volumes:
  cs2:

Still needs the "authkey" to access the workshop collection, right?

environment:
  - CS2_ADDITIONAL_ARGS=-authkey *********

or

environment:
  CS2_ADDITIONAL_ARGS: "-authkey *********"
joedwards32 commented 6 hours ago

Doesn't seem to be required. My examples work without it.