The update_build_metadata.py script's regex matches commented lines first, causing duplicates. Keep only the actual values.
SS14-Docker-Linux-Server 🚀
Containerized deployment of the Space Station 14 server on Linux.
Overview
This project is for those who prefer containerized solutions. It's based on the official documentation but wraps the wylab-station-14 fork in a Docker image that is built from source during the Docker build.
Building the Image
-
Clone this repository
git clone https://git.wylab.me/wylab/WS14-Docker-Linux-Server.git cd WS14-Docker-Linux-Server -
Configure your server defaults
Edit
appsettings.ymlandserver_config.tomlwith the values you want baked into the image. These files will be copied into/ss14-default/publishon first run. -
Build the Docker image
docker build \ --build-arg SOURCE_REPO=https://git.wylab.me/wylab/wylab-station-14.git \ --build-arg SOURCE_REF=master \ --build-arg TARGET_PLATFORM=auto \ -t git.wylab.me/wylab/WS14-Docker-Linux-Server:local .SOURCE_REPO– Git URL of the content repo to compile (defaults to the wylab fork).SOURCE_REF– Branch, tag, or commit to check out (defaults tomaster).TARGET_PLATFORM– Runtime identifier passed to the packaging tool. Useauto(default) to match the Docker target platform automatically, or override withlinux-x64,linux-arm64, orlinux-armto force an architecture.
If you are building on one architecture and running on another (for example, building on x86 and deploying to an ARM board), build with an explicit platform to avoid
exec format error:docker buildx build \ --platform linux/arm64 \ --build-arg TARGET_PLATFORM=linux-arm64 \ -t git.wylab.me/wylab/WS14-Docker-Linux-Server:arm64 .The build container clones the selected ref, runs
RUN_THIS.py --quietto fetch submodules, and executesdotnet run --project Content.Packaging serverto generate a release zip that is baked into the final layer.
Running the Server
docker run -d \
-p 1212:1212/tcp \
-p 1212:1212/udp \
-p 5000:5000/tcp \
-p 5000:5000/udp \
-v /path/on/host:/ss14 \
--name wylab-ss14 \
git.wylab.me/wylab/WS14-Docker-Linux-Server:latest
On first start the container copies /ss14-default into your mounted volume (if empty) so you can edit configs or upload new builds persistently.
You can still wrap the container in Docker Compose if desired:
version: '3.9'
services:
ss14-server:
image: git.wylab.me/wylab/WS14-Docker-Linux-Server:latest
ports:
- "1212:1212/tcp"
- "1212:1212/udp"
- "5000:5000/tcp"
- "5000:5000/udp"
volumes:
- /path/on/host:/ss14
restart: unless-stopped
CI/CD
Two workflows keep this image up to date:
-
wylab-station-14/.github/workflows/publish.yml- Triggered on pushes to
master, manual dispatch, or nightly cron. - Checks
https://cdn.wylab.me/fork/wylab/manifestfirst; if the current commit already exists on the CDN it exits early. - Uses
actions/cacheto persist~/.nuget/packagesandRobustToolbox/bin, so repeated builds reuse restored packages/engine binaries when the inputs haven’t changed. - Otherwise builds the server/client packages via
Content.Packaging, uploads them viaTools/publish_multi_request.py, and fires arepository_dispatchevent (event_type: ss14-package-ready) to this repo.
Required secrets in the wylab-station-14 repo:
PUBLISH_TOKEN,DOCKER_TRIGGER_TOKEN, and (if used)SECRETS_PRIVATE_KEY.
To send the dispatch, addDOCKER_TRIGGER_TOKEN(a PAT with repo access). - Triggered on pushes to
-
WS14-Docker-Linux-Server/.github/workflows/main.yml- Triggered on pushes here, manual dispatch, or the
ss14-package-readyevent. - Resolves the target wylab commit (uses the payload commit if provided).
- Logs into
git.wylab.meand runsdocker manifest inspectbefore building; if an image tagged with that commit already exists it skips the build. - Otherwise builds the Docker image with
SOURCE_REF=<commit>and pushes:git.wylab.me/wylab/ws14-docker-linux-server:latestgit.wylab.me/wylab/ws14-docker-linux-server:<docker repo commit>git.wylab.me/wylab/ws14-docker-linux-server:<wylab commit>
Required secrets here:
REGISTRY_USERNAME/REGISTRY_PASSWORD(credentials forgit.wylab.me). - Triggered on pushes here, manual dispatch, or the
After the build finishes, Unraid (or any host) can pull:
git.wylab.me/wylab/ws14-docker-linux-server:latest
Use that string in Unraid’s “Repository” field and map /ss14 to persistent storage.