Add Eden Smash Ultimate VPS room deployment scripts.

Provides install/update systemd workflow for git-based deploys to Ubuntu VPS.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
2026-06-20 22:47:19 -05:00
co-authored by Cursor
commit e89943224d
8 changed files with 435 additions and 0 deletions
+131
View File
@@ -0,0 +1,131 @@
# eden-room
Deploy a dedicated [Eden](https://eden-emu.dev/) multiplayer lobby on an Ubuntu VPS. Designed for git-based deploys (`git clone` / `git pull`).
Default game: **Super Smash Bros. Ultimate** (`01006A800016E000`).
## Requirements
- Ubuntu VPS with a public IP
- Port **24872** open (TCP + UDP) in cloud firewall and UFW
- Eden token from your PC (`~/.config/eden/qt-config.ini``eden_token`)
- Optional: DNS A record (grey cloud / DNS-only in Cloudflare) pointing at the VPS
> Cloudflare **proxied** (orange cloud) records do **not** work for game traffic. Use DNS-only.
## Quick start (VPS)
```bash
sudo apt update && sudo apt install -y git curl
sudo git clone https://your-gitea.example.com/you/eden-room.git /opt/eden-room
cd /opt/eden-room
cp env.example .env
chmod 600 .env
nano .env # set EDEN_TOKEN, ROOM_NAME, etc.
sudo ./scripts/install.sh
sudo systemctl start eden-room
sudo journalctl -u eden-room -f
```
## Deploy updates
On the VPS after pushing changes to Gitea:
```bash
cd /opt/eden-room
sudo ./scripts/update.sh
```
Re-download the `eden-room` binary when Eden releases a new version:
```bash
# bump EDEN_RELEASE_VERSION in .env first, then:
sudo UPDATE_BINARY=1 ./scripts/update.sh
```
## Configuration (`.env`)
| Variable | Description |
|----------|-------------|
| `EDEN_TOKEN` | From Eden config on your PC (required for public listing) |
| `ROOM_NAME` | 420 characters, shown in public lobby browser |
| `ROOM_DESCRIPTION` | Optional lobby description |
| `PREFERRED_GAME` | Display name for the lobby |
| `PREFERRED_GAME_ID` | Hex title ID (`01006A800016E000` for Smash Ultimate) |
| `PORT` | Room port (default `24872`) |
| `MAX_MEMBERS` | 216 players |
| `PASSWORD` | Optional room password |
| `WEB_API_URL` | Metaserver URL (default `https://api.ynet-fun.xyz`) |
| `EDEN_RELEASE_VERSION` | Eden release tag for binary download |
| `EDEN_ROOM_ARCH` | `x86_64-unknown-linux-musl` or `aarch64-unknown-linux-musl` |
## How players connect
**Public lobby:** Eden → Multiplayer → Browse Public Game Lobby
**Direct connect:** Eden → Multiplayer → Direct Connect
- Server: your domain or VPS IP
- Port: `24872` (or whatever you set in `.env`)
In-game, use **local wireless / LDN** — not Nintendo Online.
## Verify public listing
```bash
curl -s https://api.ynet-fun.xyz/lobby | jq '.rooms[] | select(.name == "YOUR_ROOM_NAME")'
```
## Troubleshooting
**Service won't start**
```bash
sudo journalctl -u eden-room -n 50 --no-pager
cat /opt/eden-room/logs/eden-room.log
```
**Public listing fails but room works**
Some VPS hosts hit JWT registration errors. Players can still Direct Connect. If the lobby browser doesn't load, add to `/etc/hosts`:
```
28.165.181.135 api.ynet-fun.xyz
```
**Check port is listening**
```bash
sudo ss -tulnp | grep 24872
```
## Repository layout
```
eden-room/
├── env.example # copy to .env (gitignored)
├── banlist.txt # room ban list (persisted)
├── scripts/
│ ├── install.sh # first-time VPS setup
│ ├── update.sh # git pull + restart
│ └── start-room.sh # invoked by systemd
├── systemd/
│ └── eden-room.service # reference unit file
└── bin/
└── eden-room # downloaded by install.sh (gitignored)
```
## Push to Gitea
On your dev machine:
```bash
cd eden-room
git remote add origin https://your-gitea.example.com/you/eden-room.git
git push -u origin main
```
Never commit `.env` — it contains your Eden token.