forked from LiamAEdwards/SS14-Docker-Linux-Server
123 lines
5.0 KiB
Markdown
123 lines
5.0 KiB
Markdown
<h1 align="center">SS14-Docker-Linux-Server 🚀</h1>
|
||
|
||
<p align="center">
|
||
Containerized deployment of the <a href="https://spacestation14.io/">Space Station 14</a> server on Linux.
|
||
</p>
|
||
|
||
<div align="center">
|
||
|
||
[](https://github.com/LiamAEdwards/SS14-Docker-Linux-Server/actions/workflows/main.yml)
|
||
|
||
</div>
|
||
|
||
|
||
### 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=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 to `master`).
|
||
- `TARGET_PLATFORM` – Runtime identifier passed to the packaging tool. Use `auto` (default) to match the Docker target platform automatically, or override with `linux-x64`, `linux-arm64`, or `linux-arm` to 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`:
|
||
|
||
```bash
|
||
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 --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=<commit>` and pushes:
|
||
- `git.wylab.me/wylab/ws14-docker-linux-server:latest`
|
||
- `git.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 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.
|
||
|
||
---
|