# --- Core --- # Postgres connection string. Matches docker-compose.yml defaults. DATABASE_URL=postgresql://reforger:reforger@127.0.0.1:5433/reforger_panel # Random string, at least 32 characters. Used to sign OAuth state. SESSION_SECRET=change-me-to-a-long-random-string-1234 # API listen port and the origin the web app is served from (CORS + OAuth redirects). PORT=3001 WEB_ORIGIN=http://localhost:5173 NODE_ENV=development # --- Discord OAuth --- # Create an application at https://discord.com/developers/applications, # add the redirect URI below under OAuth2 -> Redirects. DISCORD_CLIENT_ID= DISCORD_CLIENT_SECRET= DISCORD_REDIRECT_URI=http://localhost:3001/api/auth/discord/callback # Your Discord user ID. This account is auto-assigned the "owner" role at login. OWNER_DISCORD_ID= # Local development only: set to true to enable POST /api/auth/dev-login, # which signs you in as a fake owner without Discord credentials. # Hard-disabled when NODE_ENV=production. DEV_AUTH_BYPASS=false # --- Reforger Workshop API (backend-only, never called from the browser) --- # The panel uses the v2 API. Responses are cached in-process with # stale-while-revalidate, so the Mods page does not wait on the network. REFORGER_WORKSHOP_API_BASE_URL=https://api.reforgermods.net # Optional. The free public tier needs no credentials; set a key only if you # have a paid reforgermods.net plan and want its higher rate limits. REFORGER_WORKSHOP_API_KEY= # --- Pterodactyl (Client API, not Application API) --- # Leave USE_MOCK_PTERODACTYL=true to run everything locally with mock data. PTERODACTYL_BASE_URL= # Create under Account Settings -> API Credentials in Pterodactyl. PTERODACTYL_CLIENT_API_KEY= # The short server identifier from the Pterodactyl server URL, e.g. "1a2b3c4d". PTERODACTYL_SERVER_ID= USE_MOCK_PTERODACTYL=true # Proxy Pterodactyl's Wings websocket for the live console and real-time # resource metrics. This is what makes install, update and mod-download output # visible in the panel; without it you only see the game's own log file, which # does not exist until the game has already started. Set to false to fall back # to REST polling. PTERODACTYL_WEBSOCKET_ENABLED=true # --- Reforger config --- # Path of the server's config.json in the Pterodactyl file manager. Read live # on every request and written in place by the Configuration and Mods pages # (the previous file is always kept as config.json.bak). REFORGER_CONFIG_PATH=/config.json # --- Reforger log ingestion --- # Powers player sessions and the killfeed, which are parsed out of the game's # own log file. The live console does not depend on this. # Recommended: set REFORGER_LOG_DIRECTORY (e.g. /profile/logs) and the panel # follows the newest logs_* dated subfolder automatically on every sync. # REFORGER_ADMIN_LOG_PATH pins one exact file and overrides discovery. REFORGER_ADMIN_LOG_PATH= REFORGER_LOG_DIRECTORY= REFORGER_LOG_FILE_PATTERN=console.log REFORGER_LOG_POLL_INTERVAL_SECONDS=20 REFORGER_LOG_MAX_DOWNLOAD_BYTES=2097152 REFORGER_LOG_STALE_AFTER_SECONDS=90