# Palworld Dedicated Server

Palworld dedicated server running on the Seattle VM via Docker, using [thijsvanloef/palworld-server-docker](https://github.com/thijsvanloef/palworld-server-docker).

## Connection Info

| Service | Address                        | Protocol |
|---------|--------------------------------|----------|
| Game    | `100.82.197.124:8211`          | UDP      |
| Query   | `100.82.197.124:27016`         | UDP      |
| RCON    | `100.82.197.124:25575`         | TCP      |

Connect in-game using the Tailscale IP: `100.82.197.124:8211`

RCON is accessible only over Tailscale (port 25575/tcp).

Query port is set to 27016 instead of the default 27015 to avoid conflict with the Gmod server.

## Server Management

```bash
# Start the server
cd /opt/palworld && docker compose up -d

# Stop the server
docker compose down

# View logs
docker compose logs -f palworld-server

# Restart the server
docker compose restart palworld-server

# Force update the server
docker compose down && docker compose pull && docker compose up -d
```

### RCON Commands

Connect with any RCON client to `100.82.197.124:25575` using the admin password.

Useful commands:

| Command                          | Description              |
|----------------------------------|--------------------------|
| `/Info`                          | Server info              |
| `/ShowPlayers`                   | List connected players   |
| `/KickPlayer <steamid>`         | Kick a player            |
| `/BanPlayer <steamid>`          | Ban a player             |
| `/Save`                          | Force world save         |
| `/Shutdown <seconds> <message>` | Graceful shutdown        |

## Configuration

Environment variables are set in `docker-compose.yml`. Key settings:

| Variable           | Default         | Description                          |
|--------------------|-----------------|--------------------------------------|
| `SERVER_NAME`      | Vish Palworld   | Server name shown in server browser  |
| `SERVER_PASSWORD`  | *(empty)*       | Set via `SERVER_PASSWORD` env var    |
| `ADMIN_PASSWORD`   | changeme        | RCON password, set via env var       |
| `PLAYERS`          | 16              | Max concurrent players               |
| `MULTITHREADING`   | true            | Multi-threaded CPU usage             |
| `COMMUNITY`        | false           | Community server listing visibility  |
| `UPDATE_ON_BOOT`   | true            | Auto-update server on container start|
| `TZ`               | America/Los_Angeles | Server timezone                  |

To set passwords without committing them, export env vars before starting:

```bash
export SERVER_PASSWORD="REDACTED_PASSWORD"
export ADMIN_PASSWORD="REDACTED_PASSWORD"
docker compose up -d
```

## Resource Limits

- CPU limit: 8 cores, reservation: 2 cores
- Memory limit: 16 GB, reservation: 4 GB

## Data & Backups

Server data persists in the `palworld-data` Docker volume.

```bash
# Find volume location
docker volume inspect palworld_palworld-data

# Backup the volume
docker run --rm -v palworld_palworld-data:/data -v $(pwd):/backup alpine tar czf /backup/palworld-backup.tar.gz -C /data .
```

## Firewall Rules

The following ports must be open on the Seattle VM:

- `8211/udp` -- Game traffic (open to Tailscale or LAN)
- `27016/udp` -- Steam query (open to Tailscale or LAN)
- `25575/tcp` -- RCON (restrict to Tailscale only)

## Reference

- Image docs: https://github.com/thijsvanloef/palworld-server-docker
- Palworld server wiki: https://tech.palworldgame.com/dedicated-server-guide
