# 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` | 4–20 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` | 2–16 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.