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.
Explore the documentation
Start with a setup guide, browse the complete configuration reference, or jump straight to a proven fix.
Troubleshooting
Solutions for WebPanel errors, authentication kicks, webhook failures, and port conflicts.
Configuration & Reference
Complete documentation for all .ini configuration files and gameplay settings.
Guides & Installation
Step-by-step tutorials for hosting dedicated servers and RCON WebPanels on Linux VPS.
Troubleshooting: WebPanel
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
"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.
SCPReEnterServer.exe tasks (End Task). Then, restart your server.
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.
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.
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
activePorts=[]), or Steam Login Redirecting to 127.0.0.1
Common Causes & Solutions
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.
-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
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.
https://<your-ip> in your browser, or configure an Nginx reverse proxy to handle HTTP to HTTPS redirection (Mode 2 - Custom HTTPS).
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.
Host and X-Forwarded-Proto headers.
Troubleshooting: WebPanel "Access Denied" / Missing Admin Rights
5 Common Causes & Solutions
- SteamID64 Not Added to Permissions: Your 17-digit SteamID64 (starting with
765611...) is not present inServerConfig/Global/GlobalPermissions.iniorServerConfig/<Port>/Permissions.iniunderOwners=,Admins=, orModerators=. 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
ServerConfigdirectory 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 forScanning 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 (plainhttp://), browsers will reject session cookies. Test using Incognito mode or check SSL settings.
Troubleshooting: Discord Webhook Reports Not Working
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:.
ServerConfig.ini:
DiscordWebhookURL="https://discord.com/api/webhooks/12345/abcdef"
Troubleshooting: Player Kicked "Golden Ticket / Verification Failed"
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.inistate, it fails open or kicks unverified players.
Troubleshooting: Player Ranks or Chat Colors Not Displaying
Causes & Solutions
- File Placement:
Ranks.iniMUST be placed inServerConfig/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
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
tokengenerated in theServerSecret_<port>.inifile. - The active
portthe server is bound to. - Real-time telemetry such as
current_players,max_players,server_build, andnetwork_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.
SCPReEnterServer.exe -port=7778 -webport=7778
Troubleshooting: Server Downgraded to "Community" 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.
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)
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.
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:
- Navigate to the configuration folder:
SCP/Saved/Config/WindowsServer/Engine.ini(orLinuxServer/Engine.inion Linux). - Add or modify the following block in the
Engine.inifile:
[/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.
.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 Name | Type | Default | Description |
|---|---|---|---|
| ServerName | String | "SCP: ReEnter Server" | The name of the server displayed in the server browser. Supports inline color formatting via <color hex="#ffffff">name</> tags. |
| ServerDescription | String | "" | A short description or MOTD shown to players when they inspect the server. |
| MaxPlayers | Integer | 20 | Maximum 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</>"
- Syntax: Wrap the desired text with
<color hex="#HEXCODE">...</>. - Quotes: Always enclose the
ServerNamevalue in double quotation marks"..."in your.inifile. - 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 Name | Type | Default | Description |
|---|---|---|---|
| bFriendlyFire | Boolean | True | Enable or completely disable friendly fire damage between teammates. |
| HumanNormalWalkSpeed | Float | 300.0 | Base walking speed for human characters. |
| HumanSneakSpeed | Float | 150.0 | Sneaking speed for human characters (holding crouch/walk key). |
| HumanSprintSpeed | Float | 450.0 | Maximum running speed for human characters. |
| HumanStaminaDrainRate | Float | 20.0 | Stamina units drained per second while sprinting. |
| HumanStaminaRegenRate | Float | 15.0 | Stamina units regenerated per second while resting. |
| HumanStaminaExhaustionThreshold | Float | 15.0 | Minimum stamina required to recover from a fully exhausted state (allows sprinting again). |
| HumanStaminaJumpCost | Float | 7.0 | Instant stamina cost per jump action. |
| RespawnWaveMinTime | Float | 160.0 | Minimum time (in seconds) between MTF/Chaos respawn waves. Minimum allowed is 30.0. |
| RespawnWaveMaxTime | Float | 200.0 | Maximum time (in seconds) between MTF/Chaos respawn waves. |
| LobbyRoundStartTime | Float | 15.0 | Countdown timer (in seconds) in the pre-game lobby before the round officially starts. |
Radiation
| Variable Name | Type | Default | Description |
|---|---|---|---|
| bEnableRadiation | Boolean | True | Enable or disable the entire facility radiation leak hazard system. |
| LowPhaseTime | Float | 15.0 | Time from match start to trigger the Low radiation phase. |
| MediumPhaseTime | Float | 600.0 | Time from match start to trigger the Medium radiation phase. |
| HighPhaseTime | Float | 810.0 | Time from match start to trigger the High radiation phase. |
| FailedPhaseTime | Float | 900.0 | Time from match start to trigger the Failed (Evacuation) phase. |
| CriticalPhaseTime | Float | 1500.0 | Time to trigger the Critical (Insta-kill) radiation phase. |
| RoomFillDuration | Float | 30.0 | Time (in seconds) it takes for a single room to become fully irradiated once gas reaches it. |
| HCZMaxDamage | Float | 10.0 | Maximum radiation damage per second dealt to players in the Heavy Containment Zone. |
| HCZMinDamage | Float | 1.5 | Initial radiation damage per second at the very start of the gas spread in HCZ. |
| HCZEnrageRampUpTime | Float | 60.0 | Duration (in seconds) it takes to smoothly scale damage from Min to Max when the enraged timer hits. |
Map Generation
| Variable Name | Type | Default | Description |
|---|---|---|---|
| LCZ_Size | Integer | 15 | Total number of generated rooms in the Light Containment Zone. |
| LCZ_MaxRadius | Integer | 5 | Maximum branch length (distance from start point) for LCZ rooms. |
| HCZ_Size | Integer | 15 | Total number of generated rooms in the Heavy Containment Zone. |
| HCZ_MaxRadius | Integer | 4 | Maximum branch length for HCZ rooms. |
| EZ_Size | Integer | 15 | Total number of generated rooms in the Entrance Zone. |
| EZ_MaxRadius | Integer | 4 | Maximum branch length for EZ rooms. |
Report Settings
| Variable Name | Type | Default | Description |
|---|---|---|---|
| DiscordWebhookURL | String | "" | Direct Discord Webhook URL for forwarding in-game player reports as formatted embeds. Leave empty to disable. |
| CustomJSONWebhookURL | String | "" | 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 Name | Type | Default | Description |
|---|---|---|---|
| MaxIntercomSpeechTime | Float | 20.0 | Maximum time in seconds a player can talk continuously on the intercom. Minimum allowed is 1.0. |
| IntercomCooldown | Float | 120.0 | Cooldown / 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.
[/Script/SCPReenter.AdminSettings]
| Variable Name | Format | Description |
|---|---|---|
| Owners | SteamID64 List | Comma-separated list of IDs granting full access to all server commands, RCON, and backend panels. |
| Admins | SteamID64 List | Comma-separated list of IDs granting access to standard administration commands (Kick, Ban, Restart). |
| Moderators | SteamID64 List | Comma-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 Name | Format | Description |
|---|---|---|
| Color | HEX Color | The HEX color code (e.g., #FFD700) applied to the player's name and rank tag in the UI and chat. |
| Members | SteamID64 List | Comma-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 Name | Format | Description |
|---|---|---|
| [SteamID64] | Key-Value String | The 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]
| Format | Description |
|---|---|
| InputItem_Mode = OutputItem | Defines 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 Name | Format | Description |
|---|---|---|
| ApiKey | GUID String | A 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.
| Format | Description |
|---|---|
| Raw String | The 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.
| Format | Description |
|---|---|
| Raw String | The 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.
SCPReEnterEgg
Source-controlled egg, setup notes, supported variables, and the latest import file are available in the official GitHub repository.
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
- Open the official SCPReEnterEgg repository and download
egg-scp-re-enter.json. - In the Pterodactyl admin panel, open Nests and create or select a suitable nest.
- Choose Import Egg and upload
egg-scp-re-enter.json. - Create a server from the imported egg, assign the required network allocations, and configure its variables.
- Start the server. The egg installs SCP: ReEnter Dedicated Server automatically using SteamCMD.
Important Defaults
| Setting | Default / Purpose |
|---|---|
| Steam App ID | 4211100 |
| Docker image | ghcr.io/ptero-eggs/steamcmd:ubuntu_24.04 |
| GAME_AUTO_UPDATE | Checks for game updates before startup when set to 1. |
| ENABLE_WEB_PANEL | Enables the optional SCP WebPanel when set to 1. |
| WEB_PANEL_PORT | WebPanel port; the default is 8080. |
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
Mode 1: Auto HTTPS (Generates self-signed SSL cert automatically).Mode 2: Custom HTTPS (Requires placingcert.pemandkey.pemin 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(orhttps://yourdomain.com:8080). - Mode 3 (HTTP):
http://YOUR_SERVER_IP:8080(or via your Nginx / Cloudflare reverse proxy domain).
Troubleshooting
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
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
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).
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.
- Open Steam and go to your Library.
- At the top left corner, click the filter dropdown (usually says "Games") and ensure the Tools checkbox is ticked.
- Search for SCP: ReEnter Dedicated Server in your library search bar.
- Click Install and follow the prompts.
- Once installed, you can launch the server directly from Steam or by running the
SCPReEnterServer.exeexecutable 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.
- Download SteamCMD for Windows from the official Valve Wiki.
- Extract the downloaded
steamcmd.zipto a dedicated folder (e.g.,C:\steamcmd\). - Create a new text document in the SteamCMD folder, paste the following command, and save it as
update_scp_server.bat:
(You can changesteamcmd.exe +force_install_dir "C:\SCP_Server" +login anonymous +app_update 4211100 validate +quitC:\SCP_Serverto any directory where you want to install the server.) - Double-click
update_scp_server.batto run it. SteamCMD will update itself, connect anonymously, and download the SCP: ReEnter server files. - Once finished, navigate to your server directory (e.g.,
C:\SCP_Server) and runSCPReEnterServer.exeto 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.
- Download and install Radmin VPN (recommended) or Hamachi on your computer, and ask your friends to do the same.
- Open Radmin VPN, click Create Network, set a network name and password, and share these details with your friends.
- Your friends should open Radmin VPN, click Join Network, and enter your network details.
- 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). - Launch your SCP: ReEnter Dedicated Server.
- Your friends can now launch the game, open direct connect tab and paste your ip to join your server!