SS14-Docker-Linux-Server 🚀

Containerized deployment of the Space Station 14 server on Linux.

[![Create and publish a Docker image](https://github.com/LiamAEdwards/SS14-Docker-Linux-Server/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/LiamAEdwards/SS14-Docker-Linux-Server/actions/workflows/main.yml)
### Overview This project is for those who prefer containerized solutions. It's based on the [official documentation](https://docs.spacestation14.com/en/general-development/setup/server-hosting-tutorial.html) but wraps the [wylab-station-14](https://git.wylab.me/wylab/wylab-station-14) fork in a Docker image that is built from source during the Docker build. ### Building the Image 1. **Clone this repository** ```bash git clone https://git.wylab.me/wylab/WS14-Docker-Linux-Server.git cd WS14-Docker-Linux-Server ``` 2. **Configure your server defaults** Edit `appsettings.yml` and `server_config.toml` with the values you want baked into the image. These files will be copied into `/ss14-default/publish` on first run. 3. **Build the Docker image** ```bash docker build \ --build-arg SOURCE_REPO=https://git.wylab.me/wylab/wylab-station-14.git \ --build-arg SOURCE_REF=master \ --build-arg TARGET_PLATFORM=linux-x64 \ -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 to `master`). - `TARGET_PLATFORM` – Runtime identifier passed to the packaging tool (defaults to `linux-x64`). The build container clones the selected ref, runs `RUN_THIS.py --quiet` to fetch submodules, and executes `dotnet run --project Content.Packaging server` to generate a release zip that is baked into the final layer. ### Running the Server ```bash 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: ```yaml 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: 1. **`wylab-station-14/.github/workflows/publish.yml`** - Triggered on pushes to `master`, manual dispatch, or nightly cron. - Checks `https://cdn.wylab.me/fork/wylab/manifest` first; if the current commit already exists on the CDN it exits early. - Uses `actions/cache` to persist `~/.nuget/packages` and `RobustToolbox/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 via `Tools/publish_multi_request.py`, and fires a `repository_dispatch` event (`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, add `DOCKER_TRIGGER_TOKEN` (a PAT with repo access). 2. **`WS14-Docker-Linux-Server/.github/workflows/main.yml`** - Triggered on pushes here, manual dispatch, or the `ss14-package-ready` event. - Resolves the target wylab commit (uses the payload commit if provided). - Logs into `git.wylab.me` and runs `docker manifest inspect` before building; if an image tagged with that commit already exists it skips the build. - Otherwise builds the Docker image with `SOURCE_REF=` and pushes: - `git.wylab.me/wylab/ws14-docker-linux-server:latest` - `git.wylab.me/wylab/ws14-docker-linux-server:` - `git.wylab.me/wylab/ws14-docker-linux-server:` Required secrets here: `REGISTRY_USERNAME` / `REGISTRY_PASSWORD` (credentials for `git.wylab.me`). 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. ---