<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fikret Sanal</title>
    <description>The latest articles on DEV Community by Fikret Sanal (@captanel).</description>
    <link>https://dev.to/captanel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4222912%2F45a80730-f584-4873-9210-d069f8294e0d.png</url>
      <title>DEV Community: Fikret Sanal</title>
      <link>https://dev.to/captanel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/captanel"/>
    <language>en</language>
    <item>
      <title>What I learned automating game servers on a VPS over SSH</title>
      <dc:creator>Fikret Sanal</dc:creator>
      <pubDate>Mon, 02 Nov 2026 19:34:41 +0000</pubDate>
      <link>https://dev.to/captanel/what-i-learned-automating-game-servers-on-a-vps-over-ssh-5hn3</link>
      <guid>https://dev.to/captanel/what-i-learned-automating-game-servers-on-a-vps-over-ssh-5hn3</guid>
      <description>&lt;p&gt;Full disclosure: I'm part of the team behind Captanel, the app this post is about.&lt;/p&gt;

&lt;p&gt;We wanted game servers for friends (Minecraft, Valheim, CS2...) on a cheap Linux VPS without anyone touching a terminal. The app runs on Windows and does everything over SSH, with no agent or web panel on the server. Three problems were more interesting than expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory limits that don't kill the game
&lt;/h2&gt;

&lt;p&gt;Limits are applied with &lt;code&gt;docker update&lt;/code&gt; right away and a &lt;code&gt;docker-compose.override.yml&lt;/code&gt; so they survive reinstalls. The catch: the game's own heap setting (e.g. Minecraft's &lt;code&gt;MEMORY=&lt;/code&gt;) must stay at least 512 MB below the container limit, or the server dies on boot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Banning in a game that has no ban command
&lt;/h2&gt;

&lt;p&gt;CS2 has no built-in ban. We read players from RCON &lt;code&gt;status&lt;/code&gt; and drop a banned IP's traffic in the &lt;code&gt;DOCKER-USER&lt;/code&gt; chain, only on the game port, so SSH and websites are untouched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restarts that warn players first
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Scheduled restarts live in &lt;code&gt;/etc/cron.d&lt;/code&gt;. With a 05:00 restart and a 5-minute warning, players get a message at 04:55, the world is saved, then the server restarts.
&lt;/h2&gt;

&lt;p&gt;Supported: Minecraft, CS2, FiveM, Rust, Valheim, Palworld, Project Zomboid, Satisfactory, Garry's Mod, Terraria, MTA:SA, open.mp. Windows only; the installer isn't code-signed yet, so SmartScreen will warn.&lt;/p&gt;

&lt;p&gt;If you run game servers: what's the most annoying part for you?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://captanel.com" rel="noopener noreferrer"&gt;https://captanel.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>docker</category>
      <category>gamedev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
