SCP: ReEnter / Documentation

Run your facility with confidence.

The complete technical reference for SCP: ReEnter community servers and WebPanel. Set up a dedicated server, configure gameplay, manage permissions, and resolve common deployment issues.

Windows & LinuxDedicated serverWebPanel & RCON

Explore the documentation

Start with a setup guide, browse the complete configuration reference, or jump straight to a proven fix.

Category

Troubleshooting

Solutions for WebPanel errors, authentication kicks, webhook failures, and port conflicts.

Category

Configuration & Reference

Complete documentation for all .ini configuration files and gameplay settings.

Category

Guides & Installation

Step-by-step tutorials for hosting dedicated servers and RCON WebPanels on Linux VPS.

Troubleshooting: WebPanel

Error: "Server port 7777 skipped: HTTP status 403. Mismatch or forbidden."
During the active port scan, the WebPanel console prints this error. It means the panel found the API key on the disk, but it was rejected by the server during authorization.

What does this mean?

The game server engine has loaded a different API key into its RAM than the one present in the LocalAPIKey.ini file on your hard drive. When the WebPanel attempts to connect using the disk key, the authorization fails.

3 Most Common Causes & Solutions

1

"Zombie" Process (Server hanging in background) - Most Common!

If you restarted the server but the old console window didn't close properly, a hanging process might remain in the background holding port 7777. The new server instance generated a new key and overwrote the config file, but failed to bind to the occupied port. The WebPanel reads the new key and sends it to the old "zombie" server, which expects the old key.

Solution: Completely close all server console windows. Open the Task Manager, navigate to the Details tab, and end any SCPReEnterServer.exe tasks (End Task). Then, restart your server.
2

Manual file edit while server is running

Unreal Engine configuration files are loaded into memory only during startup. If you manually edited the LocalAPIKey.ini file while the server was already running, the server remains unaware of this change.

Solution: Simply restart the server. Upon boot, it will read the new key from the file.
3

File formatting or encoding error

If you opened the file in Notepad and saved it as UTF-16, or accidentally removed the [/Script/SCPReenter.Rcon] header, the UE parser will throw an error. As a fallback, the server generates a new key in RAM, but the corrupted file on the disk remains unreadable for the WebPanel.

Solution: Shut down the server, go to the configuration folder, completely delete LocalAPIKey.ini, and start the server again. A fresh file with standard formatting will be created automatically.

Troubleshooting: WebPanel "Connection Refused" / Server Offline / Steam Auth Issues

Issues: "Connection Refused", 0 Active Servers (activePorts=[]), or Steam Login Redirecting to 127.0.0.1
Common networking, socket fallback, and SSL/Auth configuration issues when deploying or accessing the WebPanel.

Common Causes & Solutions

1

WebPanel reports server offline: connect: connection refused on port 7777

Upon rapid server restarts, Linux TCP port 7777 may temporarily remain in the OS TIME_WAIT state. When SCPReEnterServer boots, Unreal Engine's HTTPServer module fails to bind TCP port 7777 and silently falls back to an ephemeral OS port (e.g., 42479). However, HTTP routes remain registered for router 7777, causing the WebPanel scan to fail.

Solution: Explicitly specify a dedicated API port using -webport=<port> in your startup command/service (or add a 2-second delay ExecStartPre=/bin/sleep 2 in your systemd service before restart):
ExecStart=/home/steam/scp_server/SCPReEnterServer.sh -log -Unattended -port=7777 -webport=7777
2

Browser shows ERR_CONNECTION_REFUSED on HTTP (Port 80)

When running in Mode 1 (Auto HTTPS), WebPanel listens exclusively on HTTPS port 443. Accessing http://your-ip (port 80) without a web proxy or explicit HTTPS protocol prefix fails immediately.

Solution: Always access the panel via https://<your-ip> in your browser, or configure an Nginx reverse proxy to handle HTTP to HTTPS redirection (Mode 2 - Custom HTTPS).
3

Steam OpenID redirecting to 127.0.0.1/auth

When logging in via Steam, Steam sends the authorization callback to openid.return_to. If the WebPanel is accessed via loopback or behind an unconfigured proxy, it defaults the callback host to 127.0.0.1.

Solution: Access the panel using the server's public IP address or domain name in the address bar, and ensure your reverse proxy passes the Host and X-Forwarded-Proto headers.

Troubleshooting: WebPanel "Access Denied" / Missing Admin Rights

Issue: Admin logs in via Steam but gets "Access Denied: You are not listed in any Permissions.ini".
When an admin attempts to log into WebPanel using Steam OpenID, they are rejected or cannot see any managed server instances.

5 Common Causes & Solutions

  • SteamID64 Not Added to Permissions: Your 17-digit SteamID64 (starting with 765611...) is not present in ServerConfig/Global/GlobalPermissions.ini or ServerConfig/<Port>/Permissions.ini under Owners=, Admins=, or Moderators=. Get your SteamID64 from steamid.io and add it.
  • Active Session Cache: If the host added your SteamID64 while you were already viewing the WebPanel, your browser session has cached the "unauthorized" status. Click Logout in the top-right corner and log in again via Steam.
  • Config Base Folder Mismatch (Host Issue): The WebPanel process is scanning a different ServerConfig directory on the host machine than the one modified by the server owner (e.g., SteamCMD downloads vs. project dev folder). Check the WebPanel startup console log for Scanning active servers in 'PATH'.
  • Logged into Wrong Steam Account: Your browser authenticated using a different Steam account than the one provided to the server owner. Log out of Steam in your browser or use Incognito mode to select the correct account.
  • Browser Cookie / HTTPS Issues: If the WebPanel is configured with secure cookies (Mode 1/2) but accessed over non-HTTPS (plain http://), browsers will reject session cookies. Test using Incognito mode or check SSL settings.

Troubleshooting: Discord Webhook Reports Not Working

Issue: In-game player reports are not being delivered to Discord.
When players report a user in-game, no message appears on the configured Discord channel.

Cause: URL Truncation due to missing quotes

In Unreal Engine .ini files, double slashes // are parsed as inline comment delimiters. If you enter a URL like DiscordWebhookURL=https://discord.com/... without quotes, the engine strips everything after https:.

Solution: Always wrap URLs in double quotation marks in ServerConfig.ini:
DiscordWebhookURL="https://discord.com/api/webhooks/12345/abcdef"

Troubleshooting: Player Kicked "Golden Ticket / Verification Failed"

Issue: Players are immediately kicked upon connecting to an Official Server.
The player is kicked with an authentication error regarding their Golden Ticket or ES256 JWT.

Causes & Solutions

  • Token Replay Attack: The player's JWT ID (JTI) has already been used to join another server. Have the player restart their game client to receive a fresh ticket.
  • Expired Token: The player's authentication ticket timed out. Rejoining through the main menu will generate a new session token.
  • Backend Network Outage: If the official verification API is down and the server has no local VerificationCache.ini state, it fails open or kicks unverified players.

Troubleshooting: Player Ranks or Chat Colors Not Displaying

Issue: Added VIP/Donator members do not get rank tags or custom chat colors in-game.

Causes & Solutions

  • File Placement: Ranks.ini MUST be placed in ServerConfig/Global/Ranks.ini. If placed inside a port folder (e.g., ServerConfig/7777/Ranks.ini), it will be ignored because ranks are global.
  • HEX Color Formatting: Ensure HEX colors include the leading # character (e.g., Color=#FFD700). Omitting # causes the parser to fail rendering text colors.
  • SteamID64 Formatting: Verify there are no trailing spaces or newlines around SteamID64s in the Members= comma-separated list.

Troubleshooting: Multi-Server Instance Port Conflicts

Issue: Second dedicated server instance fails to start or RCON API fails to bind.

How Multiple Servers on One Installation Work

The game server supports running multiple instances on a single installation by assigning a unique Game Port and Web/RCON Port. If not specified, the instance will attempt to bind to the default port 7777. When starting a server with a custom port using the -port argument, the engine will automatically generate a port-specific server secret (e.g., ServerConfig/Global/ServerSecret_7778.ini). This ensures each server instance maintains its own unique identity and authorization token.

Backend Registration & Heartbeat

Each active server instance continuously communicates with the Master Backend via a Heartbeat API (POST /server/heartbeat). This payload includes:

  • The unique token generated in the ServerSecret_<port>.ini file.
  • The active port the server is bound to.
  • Real-time telemetry such as current_players, max_players, server_build, and network_version.

Upon receiving the heartbeat, the backend updates the database record corresponding to that token. This is how the Server Browser accurately lists multiple instances hosted on the same IP address with different ports.

Cause & Solution

When running multiple dedicated server instances on the same host, each instance must have a unique Game Port and Web/RCON Port. If not specified, both instances attempt to bind to default port 7777.

Solution: Pass explicit command-line arguments to each server launch shortcut:
SCPReEnterServer.exe -port=7778 -webport=7778

Troubleshooting: Server Downgraded to "Community" Mode

Issue: An Official server suddenly drops to Community (Fail-Open) mode.

Cause & Solution

If ServerSecret_<ServerPort>.ini is deleted or modified while the server is running, the anti-cheat validator invalidates VerificationCache.ini. Upon restarting or re-validating, the server will fail the HWID challenge if the token cannot be authenticated with the master backend.

Solution: Never manually modify ServerSecret_<ServerPort>.ini. If corrupted, ensure your server machine has outbound internet connectivity so it can re-authenticate its token with the master API on restart.

Troubleshooting: SteamCMD "Missing configuration" on Linux (Hetzner)

Issue: SteamCMD fails to download server files and throws a "Missing configuration" error.

Cause & Solution

This issue often occurs on VPS/Dedicated hosts like Hetzner when the primary installation folder was created using the root account. The SteamCMD tool (which typically runs under the scpuser account) lacks write permissions to this root-owned directory, preventing it from saving downloaded files.

Solution: Fix the folder permissions so that the scpuser account owns it. Run the following command via SSH (adjust the path to match your actual installation directory):
sudo chown -R scpuser:scpuser /path/to/server/folder

Configuration System Overview

The configuration system in SCP: ReEnter uses standard .ini files divided into two scopes:

  • Global: Settings shared across all server instances hosted on the same machine. Located in ServerConfig/Global/.
  • Port-specific (Local): Settings specific to a single server instance. Located in directories named after the server port (e.g., ServerConfig/7777/). Local settings can override global settings.

Adjusting Server Tick Rate

By default, the SCP: ReEnter server runs at 64 Tick Rate. If you are experiencing performance issues or high CPU usage on a VPS, you can lower the tick rate to 30.

To change this on an already packaged and running server:

  1. Navigate to the configuration folder: SCP/Saved/Config/WindowsServer/Engine.ini (or LinuxServer/Engine.ini on Linux).
  2. Add or modify the following block in the Engine.ini file:
[/Script/OnlineSubsystemUtils.IpNetDriver]
NetServerMaxTickRate=30

[/Script/Engine.IpNetDriver]
NetServerMaxTickRate=30

[/Script/Engine.Engine]
bUseFixedFrameRate=False
SmoothedFrameRateRange=(LowerBound=(Type="ERangeBoundTypes::Inclusive",Value=10.000000),UpperBound=(Type="ERangeBoundTypes::Inclusive",Value=30.000000))

ServerConfig.ini / GlobalServerConfig.ini

Contains the core gameplay and server setup settings. Global configurations are stored in GlobalServerConfig.ini, while port-specific overrides reside in ServerConfig.ini.

Note: In Unreal Engine .ini files, any URL containing // (like HTTP links) MUST be enclosed in double quotes (e.g., "https://..."). Otherwise, the engine treats // as a comment and truncates the string!
[/Script/SCPReEnter.ServerSettings]

Server Setup

Variable NameTypeDefaultDescription
ServerNameString"SCP: ReEnter Server"The name of the server displayed in the server browser. Supports inline color formatting via <color hex="#ffffff">name</> tags.
ServerDescriptionString""A short description or MOTD shown to players when they inspect the server.
MaxPlayersInteger20Maximum number of players allowed to join the server. Minimum is 1.

Colored Server Name Formatting

SCP: ReEnter supports rich text color formatting in server names. You can highlight region tags, community names, or customize individual words in the Server Browser using <color hex="#RRGGBB">text</> tags.

[/Script/SCPReEnter.ServerSettings]
; Single color server name
ServerName="<color hex=\"#ff2a2a\">My Awesome SCP Server</>"

; Multi-color server name with region and tags
ServerName="<color hex=\"#ff2a2a\">[EU]</> <color hex=\"#38bdf8\">Site-02</> <color hex=\"#a3e635\">[24/7]</> <color hex=\"#ffffff\">Vanilla ReEnter</>"

; Highlighted event or community server
ServerName="<color hex=\"#ffd700\">★ OFFICIAL COMMUNITY ★</> <color hex=\"#e2e8f0\">Hardcore Roleplay</>"
Formatting Rules:
  • Syntax: Wrap the desired text with <color hex="#HEXCODE">...</>.
  • Quotes: Always enclose the ServerName value in double quotation marks "..." in your .ini file.
  • HEX Format: The HEX color code must always include the leading # character (e.g., #ffffff, #ff2a2a, #38bdf8, #ffd700).
  • Closing Tag: Each opened tag should be closed with </>.

Gameplay

Variable NameTypeDefaultDescription
bFriendlyFireBooleanTrueEnable or completely disable friendly fire damage between teammates.
HumanNormalWalkSpeedFloat300.0Base walking speed for human characters.
HumanSneakSpeedFloat150.0Sneaking speed for human characters (holding crouch/walk key).
HumanSprintSpeedFloat450.0Maximum running speed for human characters.
HumanStaminaDrainRateFloat20.0Stamina units drained per second while sprinting.
HumanStaminaRegenRateFloat15.0Stamina units regenerated per second while resting.
HumanStaminaExhaustionThresholdFloat15.0Minimum stamina required to recover from a fully exhausted state (allows sprinting again).
HumanStaminaJumpCostFloat7.0Instant stamina cost per jump action.
RespawnWaveMinTimeFloat160.0Minimum time (in seconds) between MTF/Chaos respawn waves. Minimum allowed is 30.0.
RespawnWaveMaxTimeFloat200.0Maximum time (in seconds) between MTF/Chaos respawn waves.
LobbyRoundStartTimeFloat15.0Countdown timer (in seconds) in the pre-game lobby before the round officially starts.

Radiation

Variable NameTypeDefaultDescription
bEnableRadiationBooleanTrueEnable or disable the entire facility radiation leak hazard system.
LowPhaseTimeFloat15.0Time from match start to trigger the Low radiation phase.
MediumPhaseTimeFloat600.0Time from match start to trigger the Medium radiation phase.
HighPhaseTimeFloat810.0Time from match start to trigger the High radiation phase.
FailedPhaseTimeFloat900.0Time from match start to trigger the Failed (Evacuation) phase.
CriticalPhaseTimeFloat1500.0Time to trigger the Critical (Insta-kill) radiation phase.
RoomFillDurationFloat30.0Time (in seconds) it takes for a single room to become fully irradiated once gas reaches it.
HCZMaxDamageFloat10.0Maximum radiation damage per second dealt to players in the Heavy Containment Zone.
HCZMinDamageFloat1.5Initial radiation damage per second at the very start of the gas spread in HCZ.
HCZEnrageRampUpTimeFloat60.0Duration (in seconds) it takes to smoothly scale damage from Min to Max when the enraged timer hits.

Map Generation

Variable NameTypeDefaultDescription
LCZ_SizeInteger15Total number of generated rooms in the Light Containment Zone.
LCZ_MaxRadiusInteger5Maximum branch length (distance from start point) for LCZ rooms.
HCZ_SizeInteger15Total number of generated rooms in the Heavy Containment Zone.
HCZ_MaxRadiusInteger4Maximum branch length for HCZ rooms.
EZ_SizeInteger15Total number of generated rooms in the Entrance Zone.
EZ_MaxRadiusInteger4Maximum branch length for EZ rooms.

Report Settings

Variable NameTypeDefaultDescription
DiscordWebhookURLString""Direct Discord Webhook URL for forwarding in-game player reports as formatted embeds. Leave empty to disable.
CustomJSONWebhookURLString""Custom HTTP POST endpoint URL for forwarding reports as raw JSON payloads (reporter_steam_id, target_steam_id, reason, description). Leave empty to disable.

Intercom Settings

Variable NameTypeDefaultDescription
MaxIntercomSpeechTimeFloat20.0Maximum time in seconds a player can talk continuously on the intercom. Minimum allowed is 1.0.
IntercomCooldownFloat120.0Cooldown / delay time in seconds required before the intercom can be used again.

Permissions.ini & GlobalPermissions.ini

These files control the in-game administrative privileges mapped to SteamID64s. GlobalPermissions.ini applies to all servers, while Permissions.ini applies only to a specific port instance.

Temporary Behavior
Temporarily, all roles (Owners, Admins, Moderators) share the exact same administrative permissions in-game. The hierarchical structure described below represents the intended final behavior which will be enforced in a future update.
[/Script/SCPReenter.AdminSettings]
Variable NameFormatDescription
OwnersSteamID64 ListComma-separated list of IDs granting full access to all server commands, RCON, and backend panels.
AdminsSteamID64 ListComma-separated list of IDs granting access to standard administration commands (Kick, Ban, Restart).
ModeratorsSteamID64 ListComma-separated list of IDs granting basic moderation tools (Mute, Kick, Teleport).

Example: Owners=76561198000000000,76561198111111111

Ranks.ini

Controls custom cosmetic player ranks (e.g., VIP, Donator) displayed in the game. You can define any custom section name representing the rank title.

Variable NameFormatDescription
ColorHEX ColorThe HEX color code (e.g., #FFD700) applied to the player's name and rank tag in the UI and chat.
MembersSteamID64 ListComma-separated list of SteamID64s that hold this rank.

Example Content:

[VIP]
Color=#FFD700
Members=76561198000000000,76561198333333333

[Donator]
Color=#00FF00
Members=76561198444444444

BannedPlayers.ini

Global storage for active player bans. The engine uses this file to reject connections at the pre-login stage.

[/Script/SCPReenter.Bans]
Variable NameFormatDescription
[SteamID64]Key-Value StringThe variable key is the SteamID64. The value follows this strict format: Reason: Text|Duration: Seconds|BannedAt: UnixTimestamp

Example: 76561198...=Reason: Cheating|Duration: 86400|BannedAt: 1721865600

914Settings.ini

Port-specific configuration for SCP-914 refinement recipes. Allows server owners to customize item upgrade/downgrade paths.

[SCP914.Recipes]
FormatDescription
InputItem_Mode = OutputItemDefines a recipe. InputItem is the item class name dropped in the intake. Mode is one of: Rough, Coarse, 1:1, Fine, VeryFine. OutputItem is the resulting item class spawned.

Example: KeycardJanitor_Fine=KeycardScientist

LocalAPIKey.ini

Port-specific file automatically generated by the WebAdmin subsystem. It contains the local RCON authorization token.

[/Script/SCPReenter.Rcon]
Variable NameFormatDescription
ApiKeyGUID StringA 32-character GUID (without hyphens). The WebPanel sends this key in the x-api-key HTTP header to authorize commands.

ServerSecret_<ServerPort>.ini

A global backend authentication file generated automatically by the Anti-Cheat server validator. Do not share this file.

FormatDescription
Raw StringThe file contains no sections or keys, only a raw 64-character token string used in the X-DS-Token header for backend API validation. Regenerating it invalidates the Verification Cache.

VerificationCache.ini

A global cache file storing the last known state of the dedicated server authorization status to protect against downgrade attacks.

FormatDescription
Raw StringThe file contains either Official or Community. The server falls back to this state during backend outages.

Official Pterodactyl Egg

Deploy and manage an SCP: ReEnter Dedicated Server through Pterodactyl using our official PTDL_v2 egg. It installs the server through SteamCMD and provides a maintainable panel-based workflow for updates, configuration, and the optional WebPanel.

Official deployment resource

SCPReEnterEgg

Source-controlled egg, setup notes, supported variables, and the latest import file are available in the official GitHub repository.

View on GitHub

Included Features

  • SteamCMD installation
  • Automatic updates on startup
  • Optional file validation
  • Server name and description
  • Player limit and friendly fire settings
  • Optional SCP WebPanel support
  • Custom Steam branch support
  • Additional startup arguments

Installation

  1. Open the official SCPReEnterEgg repository and download egg-scp-re-enter.json.
  2. In the Pterodactyl admin panel, open Nests and create or select a suitable nest.
  3. Choose Import Egg and upload egg-scp-re-enter.json.
  4. Create a server from the imported egg, assign the required network allocations, and configure its variables.
  5. Start the server. The egg installs SCP: ReEnter Dedicated Server automatically using SteamCMD.

Important Defaults

SettingDefault / Purpose
Steam App ID4211100
Docker imageghcr.io/ptero-eggs/steamcmd:ubuntu_24.04
GAME_AUTO_UPDATEChecks for game updates before startup when set to 1.
ENABLE_WEB_PANELEnables the optional SCP WebPanel when set to 1.
WEB_PANEL_PORTWebPanel port; the default is 8080.
WebPanel network allocation: Before enabling the WebPanel, assign an additional TCP allocation to the Pterodactyl server and use the same port in WEB_PANEL_PORT.

Guide: Dedicated Server Setup on Linux VPS

Complete step-by-step tutorial for setting up a dedicated SCP: ReEnter server (AppID 4211100) on a clean Ubuntu 22.04 / 24.04 or Debian VPS.

Step 1: System Update & Dependencies

Connect to your VPS via SSH as root and run:

# Enable 32-bit architecture (Required by SteamCMD)
dpkg --add-architecture i386
apt-get update

# Install required system, audio libraries and SteamCMD dependencies
apt-get install -y lib32gcc-s1 lib32stdc++6 libatomic1 libasound2t64 libpulse0 curl tar ca-certificates 2>/dev/null || \
apt-get install -y lib32gcc-s1 lib32stdc++6 libatomic1 libasound2 libpulse0 curl tar ca-certificates

Step 2: Create Unprivileged `steam` User & Install SteamCMD

# 1. Create system user 'steam' for security
id steam &>/dev/null || useradd -m -s /bin/bash steam

# 2. Download & extract SteamCMD into home directory
su - steam -c 'mkdir -p ~/steamcmd ~/scp_server && cd ~/steamcmd && curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -'

Step 3: Download Dedicated Server Files (AppID 4211100)

# Download latest SCP: ReEnter Dedicated Server files
su - steam -c '~/steamcmd/steamcmd.sh +force_install_dir ~/scp_server +login anonymous +app_update 4211100 validate +quit'

# Create symlink for Steam SDK 64-bit library (prevents steamclient.so load errors)
su - steam -c 'mkdir -p ~/.steam/sdk64 && ln -sf ~/scp_server/linux64/steamclient.so ~/.steam/sdk64/steamclient.so'

Step 4: Create Systemd Service for Auto-Restart

Run the following block as root to create a system service:

cat << 'EOF' > /etc/systemd/system/scp-server.service
[Unit]
Description=SCP: ReEnter Dedicated Server
After=network.target

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/scp_server
ExecStart=/home/steam/scp_server/SCPReEnterServer.sh -log -Unattended -port=7777
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

Enable and start the service:

systemctl daemon-reload
systemctl enable scp-server.service
systemctl start scp-server.service

Step 5: Firewall Setup (UFW)

Open required game ports (UDP 7777, 7778), WebPanel RCON port (TCP 8080 or 7777), and SSH:

ufw allow 22/tcp
ufw allow 7777/udp
ufw allow 7778/udp
ufw allow 8080/tcp
ufw --force enable

Step 6: Verification & Useful Commands

# Check server service status
systemctl status scp-server.service

# View live server logs
journalctl -u scp-server.service -f

# Check listening ports
ss -tulpn | grep 7777

Optional Guide: WebPanel Setup on Linux

The Master WebPanel provides an RCON web dashboard for managing player lists, bans, and server commands remotely. By default, it listens on port 8080.

Option A: Interactive Wizard (First Run)

Run the WebPanel executable directly under the steam user to launch the interactive setup wizard:

su - steam -c 'cd ~/scp_server && ./SCPWebPanel -dir ~/scp_server/SCPReEnter/ServerConfig'

Option B: Automated Setup via Configuration File

Alternatively, create a webpanel_mode.json config file to select operating mode and port (default 8080):

cat << 'EOF' > /home/steam/scp_server/webpanel_mode.json
{
    "mode": 3,
    "port": 8080
}
EOF
chown steam:steam /home/steam/scp_server/webpanel_mode.json
Operating Modes:
  • Mode 1: Auto HTTPS (Generates self-signed SSL cert automatically).
  • Mode 2: Custom HTTPS (Requires placing cert.pem and key.pem in directory).
  • Mode 3: Plain HTTP (Recommended if behind Nginx / Cloudflare reverse proxy).

Creating a Systemd Service for WebPanel

To run WebPanel as a background service alongside your game server, create /etc/systemd/system/scp-webpanel.service as root:

cat << 'EOF' > /etc/systemd/system/scp-webpanel.service
[Unit]
Description=SCP: ReEnter WebPanel Service
After=network.target scp-server.service

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/scp_server
ExecStart=/home/steam/scp_server/SCPWebPanel -dir /home/steam/scp_server/SCPReEnter/ServerConfig
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

Activate and start the WebPanel service:

systemctl daemon-reload
systemctl enable scp-webpanel.service
systemctl start scp-webpanel.service

Accessing Your Web Panel

Open your browser and navigate to the dashboard depending on your chosen Mode:

  • Mode 1 (Auto HTTPS) & Mode 2 (Custom HTTPS): https://YOUR_SERVER_IP:8080 (or https://yourdomain.com:8080).
  • Mode 3 (HTTP): http://YOUR_SERVER_IP:8080 (or via your Nginx / Cloudflare reverse proxy domain).

Troubleshooting

HTTPS Connection Reset / Permission Denied

If you encounter open key.pem: permission denied in the logs, or your browser drops the connection during the TLS handshake, your automatically generated certificates might have incorrect permissions (e.g., they were generated by the root user).

To fix this and force the panel to generate fresh, correct certificates under the steam user, run the following commands as root:

systemctl stop scp-webpanel.service
rm -f /home/steam/scp_server/cert.pem /home/steam/scp_server/key.pem
systemctl start scp-webpanel.service
Address already in use

If you see Error starting HTTPS server: listen tcp :8080: bind: address already in use, it means another instance of the WebPanel is already running in the background and occupying port 8080.

This usually happens if you try to start the panel manually (e.g., as root) while the systemd service is already running. You can stop the background service or kill the process to free the port:

systemctl stop scp-webpanel.service
# Or, if running outside of systemd:
killall SCPWebPanel
HTTPS Connection Timeout on Port 8080

If your WebPanel is running in HTTPS mode but your browser times out or resets the connection, your VPS provider's firewall (e.g., OVH Game Anti-DDoS) might be dropping TLS handshakes on non-standard ports like 8080.

To fix this, move the WebPanel to the standard HTTPS port (443). Since port 443 requires elevated privileges, you must grant the WebPanel binary network capabilities and open the local firewall:

# 1. Change port to 443 in config
sed -i 's/"port": 8080/"port": 443/g' /home/steam/scp_server/webpanel_mode.json

# 2. Grant WebPanel permission to bind to privileged ports (< 1024)
setcap 'cap_net_bind_service=+ep' /home/steam/scp_server/SCPWebPanel

# 3. Open port 443 in the local firewall
ufw allow 443/tcp

# 4. Restart the panel
systemctl restart scp-webpanel.service

Guide: Windows Dedicated Server Setup

Setting up a dedicated server for SCP: ReEnter on Windows is very straightforward. You can choose to install it via the standard Steam client (easiest) or using SteamCMD (recommended for automated setups).

Note: Ensure that your server machine has the appropriate ports forwarded if you are hosting from a home network (default Game Port: 7777 UDP).

Method 1: Using the Steam Client (Easiest)

If you have the Steam Client installed and logged into an account that owns SCP: ReEnter, you can download the server directly from your library.

  1. Open Steam and go to your Library.
  2. At the top left corner, click the filter dropdown (usually says "Games") and ensure the Tools checkbox is ticked.
  3. Search for SCP: ReEnter Dedicated Server in your library search bar.
  4. Click Install and follow the prompts.
  5. Once installed, you can launch the server directly from Steam or by running the SCPReEnterServer.exe executable in the installation folder.

Method 2: Using SteamCMD (Recommended for VPS/Dedicated Servers)

SteamCMD is a command-line version of the Steam client. It's the standard way to deploy game servers without the overhead of the full Steam UI.

  1. Download SteamCMD for Windows from the official Valve Wiki.
  2. Extract the downloaded steamcmd.zip to a dedicated folder (e.g., C:\steamcmd\).
  3. Create a new text document in the SteamCMD folder, paste the following command, and save it as update_scp_server.bat:
    steamcmd.exe +force_install_dir "C:\SCP_Server" +login anonymous +app_update 4211100 validate +quit
    (You can change C:\SCP_Server to any directory where you want to install the server.)
  4. Double-click update_scp_server.bat to run it. SteamCMD will update itself, connect anonymously, and download the SCP: ReEnter server files.
  5. Once finished, navigate to your server directory (e.g., C:\SCP_Server) and run SCPReEnterServer.exe to start the server!

How to Play with Friends (Without Port Forwarding)

If you cannot forward ports on your router (or don't know how), you can use a Virtual LAN (VLAN) program like Radmin VPN or Hamachi to play with your friends easily.

  1. Download and install Radmin VPN (recommended) or Hamachi on your computer, and ask your friends to do the same.
  2. Open Radmin VPN, click Create Network, set a network name and password, and share these details with your friends.
  3. Your friends should open Radmin VPN, click Join Network, and enter your network details.
  4. Once everyone is connected, look at the IP address next to your PC's name in Radmin VPN (it usually starts with 26.x.x.x).
  5. Launch your SCP: ReEnter Dedicated Server.
  6. Your friends can now launch the game, open direct connect tab and paste your ip to join your server!