mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 07:32:32 +01:00
docs: adds documentation files for the major configurable options.
This commit is contained in:
445
docs/server-configuration.md
Normal file
445
docs/server-configuration.md
Normal file
@@ -0,0 +1,445 @@
|
||||
# Server Configuration
|
||||
|
||||
Configuration for Erupe's three-server architecture: Sign, Entrance, and Channel servers.
|
||||
|
||||
## Three-Server Architecture
|
||||
|
||||
Erupe uses a multi-server architecture that mirrors the original Monster Hunter Frontier server design:
|
||||
|
||||
```
|
||||
Client → Sign Server (Auth) → Entrance Server (World List) → Channel Server (Gameplay)
|
||||
```
|
||||
|
||||
1. **Sign Server**: Authentication and account management
|
||||
2. **Entrance Server**: World/server selection and character list
|
||||
3. **Channel Servers**: Actual gameplay sessions, quests, and player interactions
|
||||
|
||||
## Sign Server
|
||||
|
||||
Handles authentication and account management.
|
||||
|
||||
### Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"Sign": {
|
||||
"Enabled": true,
|
||||
"Port": 53312
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Setting | Type | Default | Description |
|
||||
|---------|------|---------|-------------|
|
||||
| `Enabled` | boolean | `true` | Enable the legacy sign server |
|
||||
| `Port` | number | `53312` | Port for sign server (client default: 53312) |
|
||||
|
||||
### Details
|
||||
|
||||
- Located in [server/signserver/](../server/signserver/)
|
||||
- Creates sign sessions with tokens for channel server authentication
|
||||
- Legacy TCP-based protocol
|
||||
- Required unless using SignV2
|
||||
|
||||
## SignV2 Server
|
||||
|
||||
Modern HTTP-based sign server (alternative to legacy sign server).
|
||||
|
||||
### Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"SignV2": {
|
||||
"Enabled": false,
|
||||
"Port": 8080
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Setting | Type | Default | Description |
|
||||
|---------|------|---------|-------------|
|
||||
| `Enabled` | boolean | `false` | Enable the modern HTTP-based sign server |
|
||||
| `Port` | number | `8080` | Port for SignV2 server |
|
||||
|
||||
### Details
|
||||
|
||||
- Located in [server/signv2server/](../server/signv2server/)
|
||||
- HTTP-based authentication (easier to proxy/load balance)
|
||||
- Alternative to legacy sign server
|
||||
- **Only enable one sign server at a time** (Sign OR SignV2, not both)
|
||||
|
||||
## Channel Server
|
||||
|
||||
Handles actual gameplay sessions, quests, and player interactions.
|
||||
|
||||
### Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"Channel": {
|
||||
"Enabled": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Setting | Type | Default | Description |
|
||||
|---------|------|---------|-------------|
|
||||
| `Enabled` | boolean | `true` | Enable channel servers (required for gameplay) |
|
||||
|
||||
### Details
|
||||
|
||||
- Located in [server/channelserver/](../server/channelserver/)
|
||||
- Most complex component - handles all gameplay logic
|
||||
- Multiple instances can run simultaneously
|
||||
- Ports configured in Entrance server entries
|
||||
- Features:
|
||||
- Session management
|
||||
- Packet handling
|
||||
- Stage/room system
|
||||
- Quest system
|
||||
- Guild operations
|
||||
- Special events (Raviente, Diva Defense, etc.)
|
||||
|
||||
See [CLAUDE.md](../CLAUDE.md#channel-server-internal-architecture) for detailed architecture.
|
||||
|
||||
## Entrance Server
|
||||
|
||||
Manages world/server selection and character lists.
|
||||
|
||||
### Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"Entrance": {
|
||||
"Enabled": true,
|
||||
"Port": 53310,
|
||||
"Entries": [
|
||||
{
|
||||
"Name": "Newbie",
|
||||
"Description": "",
|
||||
"IP": "",
|
||||
"Type": 3,
|
||||
"Recommended": 2,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54001, "MaxPlayers": 100 },
|
||||
{ "Port": 54002, "MaxPlayers": 100 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Settings Reference
|
||||
|
||||
| Setting | Type | Description |
|
||||
|---------|------|-------------|
|
||||
| `Enabled` | boolean | Enable entrance server (required for server list) |
|
||||
| `Port` | number | Entrance server port (default: 53310) |
|
||||
| `Entries` | array | List of worlds/servers shown to players |
|
||||
|
||||
### Entrance Entries
|
||||
|
||||
Each entry represents a "world" in the server list.
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `Name` | string | World name displayed to players (e.g., "Newbie", "Normal") |
|
||||
| `Description` | string | World description (optional, usually empty) |
|
||||
| `IP` | string | Override IP address (leave empty to use global `Host` setting) |
|
||||
| `Type` | number | World type (see below) |
|
||||
| `Recommended` | number | Recommendation badge: `0`=None, `2`=Recommended, `6`=Special |
|
||||
| `AllowedClientFlags` | number | Client version flags (0 = all versions allowed) |
|
||||
| `Channels` | array | List of channel servers in this world |
|
||||
|
||||
### World Types
|
||||
|
||||
| Type | Name | Purpose |
|
||||
|------|------|---------|
|
||||
| `1` | Normal | Standard gameplay world |
|
||||
| `2` | Cities | Social/town areas |
|
||||
| `3` | Newbie | For new players (typically recommended) |
|
||||
| `4` | Tavern | Bar/tavern areas |
|
||||
| `5` | Return | For returning players |
|
||||
| `6` | MezFes | MezFes event world |
|
||||
|
||||
### Channel Configuration
|
||||
|
||||
Each world has multiple channels (like "servers" within a "world"):
|
||||
|
||||
```json
|
||||
{
|
||||
"Channels": [
|
||||
{ "Port": 54001, "MaxPlayers": 100 },
|
||||
{ "Port": 54002, "MaxPlayers": 100 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `Port` | number | Channel server port (must be unique across all channels) |
|
||||
| `MaxPlayers` | number | Maximum players allowed in this channel |
|
||||
| `CurrentPlayers` | number | Current player count (auto-updated at runtime) |
|
||||
|
||||
## Complete Server Configurations
|
||||
|
||||
### Minimal Setup (Single World, Single Channel)
|
||||
|
||||
```json
|
||||
{
|
||||
"Sign": {
|
||||
"Enabled": true,
|
||||
"Port": 53312
|
||||
},
|
||||
"SignV2": {
|
||||
"Enabled": false
|
||||
},
|
||||
"Channel": {
|
||||
"Enabled": true
|
||||
},
|
||||
"Entrance": {
|
||||
"Enabled": true,
|
||||
"Port": 53310,
|
||||
"Entries": [
|
||||
{
|
||||
"Name": "Main",
|
||||
"Type": 1,
|
||||
"Recommended": 0,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54001, "MaxPlayers": 100 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Standard Setup (Multiple Worlds)
|
||||
|
||||
```json
|
||||
{
|
||||
"Sign": {
|
||||
"Enabled": true,
|
||||
"Port": 53312
|
||||
},
|
||||
"Channel": {
|
||||
"Enabled": true
|
||||
},
|
||||
"Entrance": {
|
||||
"Enabled": true,
|
||||
"Port": 53310,
|
||||
"Entries": [
|
||||
{
|
||||
"Name": "Newbie",
|
||||
"Description": "",
|
||||
"IP": "",
|
||||
"Type": 3,
|
||||
"Recommended": 2,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54001, "MaxPlayers": 100 },
|
||||
{ "Port": 54002, "MaxPlayers": 100 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "Normal",
|
||||
"Description": "",
|
||||
"IP": "",
|
||||
"Type": 1,
|
||||
"Recommended": 0,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54003, "MaxPlayers": 100 },
|
||||
{ "Port": 54004, "MaxPlayers": 100 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "Cities",
|
||||
"Description": "",
|
||||
"IP": "",
|
||||
"Type": 2,
|
||||
"Recommended": 0,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54005, "MaxPlayers": 100 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Large-Scale Setup
|
||||
|
||||
```json
|
||||
{
|
||||
"Sign": {
|
||||
"Enabled": true,
|
||||
"Port": 53312
|
||||
},
|
||||
"Channel": {
|
||||
"Enabled": true
|
||||
},
|
||||
"Entrance": {
|
||||
"Enabled": true,
|
||||
"Port": 53310,
|
||||
"Entries": [
|
||||
{
|
||||
"Name": "Newbie",
|
||||
"Type": 3,
|
||||
"Recommended": 2,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54001, "MaxPlayers": 150 },
|
||||
{ "Port": 54002, "MaxPlayers": 150 },
|
||||
{ "Port": 54003, "MaxPlayers": 150 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "Normal",
|
||||
"Type": 1,
|
||||
"Recommended": 0,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54004, "MaxPlayers": 200 },
|
||||
{ "Port": 54005, "MaxPlayers": 200 },
|
||||
{ "Port": 54006, "MaxPlayers": 200 },
|
||||
{ "Port": 54007, "MaxPlayers": 200 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "Cities",
|
||||
"Type": 2,
|
||||
"Recommended": 0,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54008, "MaxPlayers": 100 },
|
||||
{ "Port": 54009, "MaxPlayers": 100 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "MezFes",
|
||||
"Type": 6,
|
||||
"Recommended": 6,
|
||||
"AllowedClientFlags": 0,
|
||||
"Channels": [
|
||||
{ "Port": 54010, "MaxPlayers": 100 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Port Allocation
|
||||
|
||||
Default port assignments:
|
||||
|
||||
| Server | Port | Configurable |
|
||||
|--------|------|--------------|
|
||||
| Sign | 53312 | Yes |
|
||||
| SignV2 | 8080 | Yes |
|
||||
| Entrance | 53310 | Yes |
|
||||
| Channels | 54001+ | Yes (per-channel) |
|
||||
|
||||
**Important:**
|
||||
|
||||
- All ports must be unique
|
||||
- Firewall must allow inbound connections on these ports
|
||||
- Client expects Sign on 53312 and Entrance on 53310 by default
|
||||
|
||||
## Firewall Configuration
|
||||
|
||||
### Linux (ufw)
|
||||
|
||||
```bash
|
||||
# Allow sign server
|
||||
sudo ufw allow 53312/tcp
|
||||
|
||||
# Allow entrance server
|
||||
sudo ufw allow 53310/tcp
|
||||
|
||||
# Allow channel servers (range)
|
||||
sudo ufw allow 54001:54010/tcp
|
||||
```
|
||||
|
||||
### Linux (iptables)
|
||||
|
||||
```bash
|
||||
# Sign server
|
||||
sudo iptables -A INPUT -p tcp --dport 53312 -j ACCEPT
|
||||
|
||||
# Entrance server
|
||||
sudo iptables -A INPUT -p tcp --dport 53310 -j ACCEPT
|
||||
|
||||
# Channel servers (range)
|
||||
sudo iptables -A INPUT -p tcp --dport 54001:54010 -j ACCEPT
|
||||
```
|
||||
|
||||
### Windows Firewall
|
||||
|
||||
```powershell
|
||||
# Allow specific ports
|
||||
New-NetFirewallRule -DisplayName "Erupe Sign" -Direction Inbound -Protocol TCP -LocalPort 53312 -Action Allow
|
||||
New-NetFirewallRule -DisplayName "Erupe Entrance" -Direction Inbound -Protocol TCP -LocalPort 53310 -Action Allow
|
||||
New-NetFirewallRule -DisplayName "Erupe Channels" -Direction Inbound -Protocol TCP -LocalPort 54001-54010 -Action Allow
|
||||
```
|
||||
|
||||
## Load Balancing
|
||||
|
||||
For high-traffic servers, consider:
|
||||
|
||||
1. **Multiple Entrance Servers**: Run multiple entrance server instances behind a load balancer
|
||||
2. **Distributed Channels**: Spread channel servers across multiple physical servers
|
||||
3. **Database Connection Pooling**: Use PgBouncer for database connections
|
||||
4. **SignV2 with Reverse Proxy**: Use nginx/HAProxy with SignV2 for better scaling
|
||||
|
||||
## Monitoring
|
||||
|
||||
Monitor server health:
|
||||
|
||||
```bash
|
||||
# Check if servers are listening
|
||||
netstat -tlnp | grep erupe
|
||||
|
||||
# Check open ports
|
||||
ss -tlnp | grep -E '(53312|53310|54001)'
|
||||
|
||||
# Monitor connections per channel
|
||||
watch -n 1 'netstat -an | grep ESTABLISHED | grep 54001 | wc -l'
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Can't Connect to Sign Server
|
||||
|
||||
- Verify Sign server is enabled
|
||||
- Check port 53312 is open
|
||||
- Verify client is configured for correct IP/port
|
||||
|
||||
### World List Empty
|
||||
|
||||
- Verify Entrance server is enabled
|
||||
- Check Entrance server port (53310)
|
||||
- Ensure at least one Entry is configured
|
||||
|
||||
### Can't Enter World
|
||||
|
||||
- Verify Channel server is enabled
|
||||
- Check channel ports are open
|
||||
- Verify channel ports in Entrance entries match actual running servers
|
||||
|
||||
### Server Crashes on Startup
|
||||
|
||||
- Check all ports are unique
|
||||
- Verify database connection (password not empty)
|
||||
- Check logs for specific errors
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Database](database.md) - Database configuration
|
||||
- [Basic Settings](basic-settings.md) - Host and network settings
|
||||
- [CLAUDE.md](../CLAUDE.md#architecture) - Detailed architecture overview
|
||||
Reference in New Issue
Block a user