refactor: made using this repo/image more simple

This commit is contained in:
Maik Laschober 2023-05-12 17:16:39 +02:00
parent 1ea85be898
commit e8b70142f9
14 changed files with 138 additions and 516 deletions

View file

@ -16,9 +16,7 @@ FROM mono:latest as runtime
COPY --from=downloader "./download/" "/game"
# Defaults
ARG vs_data_path=/gamedata/vs
COPY "./serverconfig.json" "${vs_data_path}/serverconfig.json"
ENV vs_data_path=/gamedata/vs
# Expose ports
EXPOSE 42420/tcp

19
NOTE.md
View file

@ -1,19 +0,0 @@
# Contribution note
just some notes for myself in case i forgot how to upgrade the image
```sh
#build
docker build -t devidian/vintagestory .
#push
docker push devidian/vintagestory
#run
docker run -pd 42420:42420 --name VintageStoryServer devidian/vintagestory
# --------------------------------------
# --------- using composer -------------
#start
docker-compose up -d
#rebuild
docker-compose up -d --build
#stop
docker-compose down
```

View file

@ -17,7 +17,7 @@ services:
vsserver:
image: devidian/vintagestory:latest
container_name: vsserver
restart: always
restart: unless-stopped
volumes:
# • your world will be in /appdata/vintagestory/vs by default (/gamedata/vs on the container)
# • if you run multiple servers just change the left part
@ -27,74 +27,17 @@ services:
- 42420:42420
```
## Custom build
You can either copy files from `https://github.com/Devidian/docker-vintagestory/tree/master/build-custom-example` or follow these steps:
- create a `serverconfig.json` with your settings
- create a `Dockerfile` file with contents found below
- create a `docker-compose.yml` file with contents found below (adjust port/path if you need)
- run `docker-compose up -d` to start
- run `docker-compose up -d --build` to rebuild and restart
- run `docker-compose down` to stop
We use `vs_data_path` as ARG because ENV did not get overridden in build phase and we use `VS_DATA_PATH` as ENV because ARG in CMD is empty.
## Dockerfile for custom-build
```docker
# ============== runtime stage ==================
FROM devidian/vintagestory:latest as runtime
ARG vs_data_path=/gamedata/vs
# update with your own serverconfig
COPY serverconfig.json ${vs_data_path}/serverconfig.json
# copy mods
#COPY Mods ${vs_data_path}/Mods/
# copy default player data
#COPY Playerdata ${vs_data_path}/Playerdata/
WORKDIR /game
CMD mono VintagestoryServer.exe --dataPath ${VS_DATA_PATH}
```
### docker-compose.yml
```yml
version: '3.8'
services:
vsserver:
build:
context: .
args:
vs_data_path: /gamedata/vs-custom/
container_name: vsserver
restart: always
volumes:
- gamedata:/gamedata
ports:
- 42420:42420
environment:
VS_DATA_PATH: /gamedata/vs-custom
volumes:
gamedata:
```
### Using unstable versions
To use unstable versions just replace tag `latest` with `unstable` in `Dockerfile`
To use unstable versions just replace tag `latest` with `unstable`. See [docker-compose.yml]( docker-compose.yml ) for all versions.
### Updating container
To update to the latest version call `docker pull devidian/vintagestory` first, this will download the newest latest base image. Then execute `docker-compose up -d --build` if you have not changed any other files it should not override them (did not for me)
To update to the latest version call `docker compose pull` first, this will download the newest latest base image. Then execute `docker compose up -d`.
### Copy/Override files
To copy and override files use `docker exec vsserver cp [local path] [docker-path]` where `docker-path` is starting with `/gamedata/vs-custom/..` for the example composer file. This is useful to update white/blacklists manually or update `serversettings.json`
If you use a host volume, you can just edit files there. First stop the container, then make your changes and start the container again.
## Troubleshooting / Help / Issues

View file

@ -1,15 +0,0 @@
# ============== runtime stage ==================
FROM devidian/vintagestory:latest as runtime
ARG vs_data_path=/gamedata/vs-custom
# update with your own serverconfig
COPY serverconfig.json ${vs_data_path}/serverconfig.json
# copy mods
COPY Mods ${vs_data_path}/Mods/
# copy default player data
COPY Playerdata ${vs_data_path}/Playerdata/
WORKDIR /game
CMD mono VintagestoryServer.exe --dataPath ${VS_DATA_PATH}

View file

@ -1,21 +0,0 @@
version: '3.8'
services:
vsserver:
build:
context: .
args:
vs_data_path: /gamedata/vs-custom/
container_name: vsserver
restart: always
volumes:
- gamedata:/gamedata
ports:
- target: 42420
published: 42420
protocol: tcp
# mode: host
environment:
VS_DATA_PATH: /gamedata/vs-custom
volumes:
gamedata:

View file

@ -1,349 +0,0 @@
{
"ConfigVersion": "1.0",
"ServerMonitor": true,
"MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",
"ClientConnectionTimeout": 120,
"EntityDebugMode": false,
"MapSizeX": 1000000,
"MapSizeY": 256,
"MapSizeZ": 1000000,
"ServerLanguage": "en",
"SkipEveryChunkRow": 0,
"SkipEveryChunkRowWidth": 0,
"ModPaths": [
"Mods",
"/gamedata/vs-custom/Mods"
],
"WorldConfig": {
"Seed": null,
"SaveFileLocation": "/gamedata/vs-custom/Saves/default.vcdbs",
"WorldName": "VintageDockerCustomExample",
"AllowCreativeMode": true,
"PlayStyle": "surviveandbuild",
"PlayStyleLangCode": "surviveandbuild-bands",
"WorldType": "standard",
"WorldConfiguration": null,
"MapSizeY": null,
"CreatedByPlayerName": null,
"DisabledMods": null,
"RepairMode": false
},
"NextPlayerGroupUid": 10,
"GroupChatHistorySize": 20,
"MaxOwnedGroupChannelsPerUser": 10,
"ServerName": "EN - Vintage Story Server - CustomBuild",
"ServerUrl": null,
"ServerDescription": "VintageServer running in Docker container",
"WelcomeMessage": "Welcome {0}, may you survive well and prosper",
"Ip": null,
"Port": 42420,
"Upnp": false,
"CompressPackets": true,
"AdvertiseServer": true,
"MaxClients": 16,
"Password": null,
"MaxChunkRadius": 12,
"TickTime": 33.3333321,
"BlockTickChunkRange": 4,
"MaxMainThreadBlockTicks": 10000,
"RandomBlockTicksPerChunk": 16,
"BlockTickInterval": 300,
"Roles": [
{
"Code": "suvisitor",
"Name": "Survival Visitor",
"Description": "Can only visit this world and chat but not use/place/break anything",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"chat"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
"Color": "Green",
"LandClaimAllowance": 0,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 3,
"AutoGrant": false
},
{
"Code": "crvisitor",
"Name": "Creative Visitor",
"Description": "Can only visit this world, chat and fly but not use/place/break anything",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"chat"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
"Color": "DarkGray",
"LandClaimAllowance": 0,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 3,
"AutoGrant": false
},
{
"Code": "limitedsuplayer",
"Name": "Limited Survival Player",
"Description": "Can use/place/break blocks only in permitted areas (priv level -1), create/manage player groups and chat",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"build",
"useblock",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
"Color": "White",
"LandClaimAllowance": 0,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 3,
"AutoGrant": false
},
{
"Code": "limitedcrplayer",
"Name": "Limited Creative Player",
"Description": "Can use/place/break blocks in only in permitted areas (priv level -1), create/manage player groups, chat, fly and set his own game mode (= allows fly and change of move speed)",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"build",
"useblock",
"gamemode",
"freemove",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
"Color": "LightGreen",
"LandClaimAllowance": 0,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 3,
"AutoGrant": false
},
{
"Code": "suplayer",
"Name": "Survival Player",
"Description": "Can use/place/break blocks in unprotected areas (priv level 0), create/manage player groups and chat. Can claim an area of up to 8 chunks.",
"PrivilegeLevel": 0,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"areamodify",
"build",
"useblock",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
"Color": "White",
"LandClaimAllowance": 262144,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 3,
"AutoGrant": false
},
{
"Code": "crplayer",
"Name": "Creative Player",
"Description": "Can use/place/break blocks in all areas (priv level 100), create/manage player groups, chat, fly and set his own game mode (= allows fly and change of move speed). Can claim an area of up to 40 chunks.",
"PrivilegeLevel": 100,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"areamodify",
"build",
"useblock",
"gamemode",
"freemove",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
"Color": "LightGreen",
"LandClaimAllowance": 1310720,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 6,
"AutoGrant": false
},
{
"Code": "sumod",
"Name": "Survival Moderator",
"Description": "Can use/place/break blocks everywhere (priv level 200), create/manage player groups, chat, kick/ban players and do serverwide announcements. Can claim an area of up to 4 chunks.",
"PrivilegeLevel": 200,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"areamodify",
"build",
"useblock",
"buildblockseverywhere",
"useblockseverywhere",
"kick",
"ban",
"announce",
"readlists",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
"Color": "Cyan",
"LandClaimAllowance": 1310720,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 60,
"AutoGrant": false
},
{
"Code": "crmod",
"Name": "Creative Moderator",
"Description": "Can use/place/break blocks everywhere (priv level 500), create/manage player groups, chat, kick/ban players, fly and set his own or other players game modes (= allows fly and change of move speed). Can claim an area of up to 40 chunks.",
"PrivilegeLevel": 500,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"controlplayergroups",
"manageplayergroups",
"chat",
"areamodify",
"build",
"useblock",
"buildblockseverywhere",
"useblockseverywhere",
"kick",
"ban",
"gamemode",
"freemove",
"commandplayer",
"announce",
"readlists",
"attackcreatures",
"attackplayers"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
"Color": "Cyan",
"LandClaimAllowance": 1310720,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 60,
"AutoGrant": false
},
{
"Code": "admin",
"Name": "Admin",
"Description": "Has all privileges, including giving other players admin status.",
"PrivilegeLevel": 99999,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
"build",
"useblock",
"buildblockseverywhere",
"useblockseverywhere",
"attackplayers",
"attackcreatures",
"freemove",
"gamemode",
"pickingrange",
"chat",
"kick",
"ban",
"whitelist",
"setwelcome",
"announce",
"readlists",
"give",
"areamodify",
"setspawn",
"controlserver",
"tp",
"time",
"grantrevoke",
"root",
"commandplayer",
"controlplayergroups",
"manageplayergroups"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
"Color": "LightBlue",
"LandClaimAllowance": 2147483647,
"LandClaimMinSize": {
"X": 5,
"Y": 5,
"Z": 5
},
"LandClaimMaxAreas": 99999,
"AutoGrant": true
}
],
"DefaultRoleCode": "suplayer",
"AntiAbuse": 0,
"OnlyWhitelisted": false,
"VerifyPlayerAuth": true,
"DefaultSpawn": null,
"AllowPvP": false,
"AllowFireSpread": true,
"AllowFallingBlocks": true,
"StartupCommands": null,
"RepairMode": false,
"RegenerateCorruptChunks": false,
"ChatRateLimitMs": 1000,
"DieBelowDiskSpaceMb": 200
}

View file

@ -1,36 +1,6 @@
{
"ConfigVersion": "1.0",
"ServerMonitor": true,
"MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",
"ClientConnectionTimeout": 120,
"EntityDebugMode": false,
"MapSizeX": 1000000,
"MapSizeY": 256,
"MapSizeZ": 1000000,
"ServerLanguage": "en",
"SkipEveryChunkRow": 0,
"SkipEveryChunkRowWidth": 0,
"ModPaths": [
"Mods",
"/gamedata/vs/Mods"
],
"WorldConfig": {
"Seed": null,
"SaveFileLocation": "/gamedata/vs/Saves/default.vcdbs",
"WorldName": "VintageDockerExample",
"AllowCreativeMode": true,
"PlayStyle": "surviveandbuild",
"PlayStyleLangCode": "surviveandbuild-bands",
"WorldType": "standard",
"WorldConfiguration": null,
"MapSizeY": null,
"CreatedByPlayerName": null,
"DisabledMods": null,
"RepairMode": false
},
"NextPlayerGroupUid": 10,
"GroupChatHistorySize": 20,
"MaxOwnedGroupChannelsPerUser": 10,
"ConfigVersion": "1.5",
"ServerName": "EN - Vintage Story Server",
"ServerUrl": null,
"ServerDescription": "VintageServer running in Docker container",
@ -41,19 +11,30 @@
"CompressPackets": true,
"AdvertiseServer": true,
"MaxClients": 16,
"PassTimeWhenEmpty": false,
"MasterserverUrl": "http://masterserver.vintagestory.at/api/v1/servers/",
"ModDbUrl": "https://mods.vintagestory.at/",
"ClientConnectionTimeout": 120,
"Password": null,
"MapSizeX": 1000000,
"MapSizeY": 256,
"MapSizeZ": 1000000,
"ServerLanguage": "en",
"MaxChunkRadius": 12,
"TickTime": 33.3333321,
"SpawnCapPlayerScaling": 0.75,
"BlockTickChunkRange": 4,
"MaxMainThreadBlockTicks": 10000,
"RandomBlockTicksPerChunk": 16,
"BlockTickInterval": 300,
"SkipEveryChunkRow": 0,
"SkipEveryChunkRowWidth": 0,
"Roles": [
{
"Code": "suvisitor",
"PrivilegeLevel": -1,
"Name": "Survival Visitor",
"Description": "Can only visit this world and chat but not use/place/break anything",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -73,9 +54,9 @@
},
{
"Code": "crvisitor",
"PrivilegeLevel": -1,
"Name": "Creative Visitor",
"Description": "Can only visit this world, chat and fly but not use/place/break anything",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -95,9 +76,9 @@
},
{
"Code": "limitedsuplayer",
"PrivilegeLevel": -1,
"Name": "Limited Survival Player",
"Description": "Can use/place/break blocks only in permitted areas (priv level -1), create/manage player groups and chat",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -107,7 +88,8 @@
"build",
"useblock",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
@ -123,9 +105,9 @@
},
{
"Code": "limitedcrplayer",
"PrivilegeLevel": -1,
"Name": "Limited Creative Player",
"Description": "Can use/place/break blocks in only in permitted areas (priv level -1), create/manage player groups, chat, fly and set his own game mode (= allows fly and change of move speed)",
"PrivilegeLevel": -1,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -137,7 +119,8 @@
"gamemode",
"freemove",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
@ -153,9 +136,9 @@
},
{
"Code": "suplayer",
"PrivilegeLevel": 0,
"Name": "Survival Player",
"Description": "Can use/place/break blocks in unprotected areas (priv level 0), create/manage player groups and chat. Can claim an area of up to 8 chunks.",
"PrivilegeLevel": 0,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -166,7 +149,8 @@
"build",
"useblock",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
@ -182,9 +166,9 @@
},
{
"Code": "crplayer",
"PrivilegeLevel": 100,
"Name": "Creative Player",
"Description": "Can use/place/break blocks in all areas (priv level 100), create/manage player groups, chat, fly and set his own game mode (= allows fly and change of move speed). Can claim an area of up to 40 chunks.",
"PrivilegeLevel": 100,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -197,7 +181,8 @@
"gamemode",
"freemove",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
@ -213,9 +198,9 @@
},
{
"Code": "sumod",
"PrivilegeLevel": 200,
"Name": "Survival Moderator",
"Description": "Can use/place/break blocks everywhere (priv level 200), create/manage player groups, chat, kick/ban players and do serverwide announcements. Can claim an area of up to 4 chunks.",
"PrivilegeLevel": 200,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -232,7 +217,8 @@
"announce",
"readlists",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
@ -248,9 +234,9 @@
},
{
"Code": "crmod",
"PrivilegeLevel": 500,
"Name": "Creative Moderator",
"Description": "Can use/place/break blocks everywhere (priv level 500), create/manage player groups, chat, kick/ban players, fly and set his own or other players game modes (= allows fly and change of move speed). Can claim an area of up to 40 chunks.",
"PrivilegeLevel": 500,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -270,7 +256,8 @@
"announce",
"readlists",
"attackcreatures",
"attackplayers"
"attackplayers",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 2,
@ -286,9 +273,9 @@
},
{
"Code": "admin",
"PrivilegeLevel": 99999,
"Name": "Admin",
"Description": "Has all privileges, including giving other players admin status.",
"PrivilegeLevel": 99999,
"DefaultSpawn": null,
"ForcedSpawn": null,
"Privileges": [
@ -318,7 +305,8 @@
"root",
"commandplayer",
"controlplayergroups",
"manageplayergroups"
"manageplayergroups",
"selfkill"
],
"RuntimePrivileges": [],
"DefaultGameMode": 1,
@ -334,16 +322,41 @@
}
],
"DefaultRoleCode": "suplayer",
"ModPaths": [
"Mods",
"/gamedata/vs/Mods"
],
"AntiAbuse": 0,
"WorldConfig": {
"Seed": null,
"SaveFileLocation": "/gamedata/Saves/default.vcdbs",
"WorldName": "VintageDockerExample",
"AllowCreativeMode": true,
"PlayStyle": "surviveandbuild",
"PlayStyleLangCode": "surviveandbuild-bands",
"WorldType": "standard",
"WorldConfiguration": null,
"MapSizeY": null,
"CreatedByPlayerName": null,
"DisabledMods": null,
"RepairMode": false
},
"NextPlayerGroupUid": 10,
"GroupChatHistorySize": 20,
"MaxOwnedGroupChannelsPerUser": 10,
"OnlyWhitelisted": false,
"VerifyPlayerAuth": true,
"DefaultSpawn": null,
"AllowPvP": false,
"AllowFireSpread": true,
"AllowFallingBlocks": true,
"HostedMode": false,
"StartupCommands": null,
"RepairMode": false,
"AnalyzeMode": false,
"CorruptionProtection": true,
"RegenerateCorruptChunks": false,
"ChatRateLimitMs": 1000,
"DieBelowDiskSpaceMb": 200
"DieBelowDiskSpaceMb": 400,
"ModIdBlackList": null
}

View file

@ -0,0 +1,25 @@
{
"Comment": "You can use this config to increase/lower the cpu and network load of the server. A Warning though: Changing these numbers might make your server run unstable or slow. Use at your own risk! Until there is an official documentation, feel free to ask in the forums what the numbers do.",
"DefaultEntityTrackingRange": 4,
"RequestChunkColumnsQueueSize": 2000,
"ReadyChunksQueueSize": 200,
"ChunksColumnsToRequestPerTick": 4,
"ChunksToSendPerTick": 192,
"ChunkRequestTickTime": 20,
"ChunkColumnsToGeneratePerThreadTick": 15,
"ServerAutoSave": 300,
"SpawnChunksWidth": 7,
"TrackedEntitiesPerClient": 3000,
"CalendarPacketSecondInterval": 60,
"ChunkUnloadInterval": 4000,
"UncompressedChunkTTL": 15000,
"CompressedChunkTTL": 45000,
"PlayerDesyncTolerance": 0.02,
"PlayerDesyncMaxIntervalls": 20.0,
"ChunkThreadTickTime": 5,
"AntiAbuseMaxWalkBlocksPer200ms": 3,
"AntiAbuseMaxFlySuspicions": 3,
"AntiAbuseMaxTeleSuspicions": 8,
"MaxPhysicsThreads": 4,
"ServerMagicNumVersion": "1.3"
}

47
docker-compose.yml Normal file
View file

@ -0,0 +1,47 @@
version: '3.8'
services:
# docker compose up -d vsserver-local
vsserver-local:
build: .
container_name: vsserver-local
restart: unless-stopped
volumes:
- ./compose-default:/gamedata
ports:
- 42420:42420
environment:
VS_DATA_PATH: /gamedata
# docker compose up -d vsserver-stable
vsserver-stable:
image: devidian/vintagestory:latest
container_name: vsserver-stable
restart: unless-stopped
volumes:
- /appdata/vintagestory:/gamedata
ports:
- 42430:42420
environment:
VS_DATA_PATH: /gamedata
# docker compose up -d vsserver-unstable
vsserver-unstable:
image: devidian/vintagestory:unstable
container_name: vsserver-unstable
restart: unless-stopped
volumes:
- /appdata/vintagestory-unstable:/gamedata
ports:
- 42440:42420
environment:
VS_DATA_PATH: /gamedata
# docker compose up -d vsserver-pre
vsserver-pre:
image: devidian/vintagestory:pre
container_name: vsserver-pre
restart: unless-stopped
volumes:
- /appdata/vintagestory-pre:/gamedata
ports:
- 42435:42420
environment:
VS_DATA_PATH: /gamedata