<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" 
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
    <title>Éole — Photography, Improv &amp; Outdoor Adventures</title>
    <link>https://eole.me/blog/</link>
    <description>Welcome! A modest collection of thoughts, essays, and notes on software engineering, photography, improv, and running.</description>
    <language>en</language>
    <lastBuildDate>Fri, 21 Aug 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://eole.me/blog/feed.eole.xml" rel="self" type="application/rss+xml" />
    
        <item>
            <title>Build your own Minecraft server: The ultimate guide (from player to sysadmin)</title>
            <link>https://eole.me/blog/mc-dedicated/en/</link>
            <guid isPermaLink="true">https://eole.me/blog/mc-dedicated/en/</guid>
            <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
            <description>Build your own Minecraft server: The ultimate guide (from player to sysadmin)</description>
            <content:encoded><![CDATA[<blockquote>
<p>[!NOTE]
I wrote this article for a friend who has just finished high school and is about to start computer science school. It is therefore for anyone who does not yet know the inner workings of the Internet in detail, but has a real desire to learn by doing.</p>
</blockquote>
<p>Welcome to the world of computing! You are about to start computer science school, and building this project is probably one of the best first steps you can take. You will not only give your friends a polished server, but also get a huge head start on your classes.</p>
<h2 id="1-why-create-your-own-server-instead-of-letting-a-friend-host-it">1. Why create your own server instead of letting a friend host it?</h2>
<p>We have all been there: <em>“Wait, Thomas needs to turn on his PC before we can play”</em>, or the game crashing mid-Ender Dragon fight because Thomas’s mom unplugged the router.</p>
<p>Having your own dedicated server on a remote machine (or a dedicated server at home) means:</p>
<ul>
<li><strong>A world available 24/7 and <em><strong><strong>persistent</strong></strong></em>:</strong> You can farm wood at 3 a.m. without asking anyone for permission.</li>
<li><strong>No lag for players:</strong> Your personal PC does not need to run the game AND the server at the same time.</li>
<li><strong>Total control:</strong> You are the administrator. You choose the rules, backups, plugins, and security.</li>
</ul>
<h2 id="2-the-networking-glossary-the-basics-of-your-future-job">2. The networking glossary: the basics of your future job</h2>
<p>Before running commands, let’s lay down the basic building blocks of computer networking.</p>
<ul>
<li><strong>Client / Server:</strong> The <strong>server</strong> is the host machine that runs the game logic: the map, entities, and physics. The <strong>client</strong> is the Minecraft application installed on your PC, which connects to the server to send your movements and display the image.</li>
<li><strong>VPS (Virtual Private Server):</strong> Instead of buying a huge physical server to store in your living room, you rent a “slice” of a powerful server in a data center, from providers such as Hetzner, Hostinger, or OVH.</li>
<li><strong>IP address:</strong> This is your server’s license plate on the Internet, for example <code>135.181.12.42</code>.</li>
<li><strong>DNS (Domain Name System):</strong> Remembering numbers is annoying. DNS links a readable domain name, such as <code>minecraft.your-name.com</code>, to your IP address.</li>
<li><strong>Ports:</strong> Think of the IP address as the building address, and ports as apartment numbers. Minecraft’s default port is <strong><code>25565</code></strong>. The web HTTPS port is <strong><code>443</code></strong>.</li>
</ul>
<h2 id="3-why-automation-and-security-matter">3. Why automation and security matter</h2>
<p>In IT, the golden rule is: <strong>what is done manually will eventually be forgotten or done wrong</strong>.</p>
<ul>
<li><strong>Advanced secret management with Doppler:</strong> You should <strong>NEVER</strong> put passwords, SSH keys, or access tokens in plain text in your code. With a secret manager like <strong>Doppler</strong>, your credentials are encrypted and injected only at runtime.</li>
<li><strong>Automatic deployment with GitHub Actions CI/CD:</strong> When you want to add a plugin or change a rule, you will only need to run a <code>git push</code> to your repository. The server will update itself automatically, like magic, without manual intervention.</li>
<li><strong>Automated backups:</strong> A disk crash or a wrong command can destroy hundreds of hours of gameplay. We automate a daily external backup system so you can go back in time with one click.</li>
</ul>
<h2 id="4-the-stack-and-selected-components">4. The stack and selected components</h2>
<p>To make the experience memorable for your six friends, here is the software stack we will install:</p>
<pre><code class="language-mermaid">flowchart TD
    subgraph VPS[&quot;🖥️ &lt;b&gt;YOUR SERVER — VPS&lt;/b&gt;&lt;br/&gt;Remote machine available 24/7&quot;]
        Paper[&quot;⚙️ &lt;b&gt;PaperMC Engine&lt;/b&gt;&lt;br/&gt;Ultra-optimized Java server&quot;]
    end

    DiscordSRV[&quot;💬 &lt;b&gt;DiscordSRV&lt;/b&gt;&lt;br/&gt;Chat bot&quot;]
    Map[&quot;🗺️ &lt;b&gt;BlueMap / Dynmap&lt;/b&gt;&lt;br/&gt;Interactive web map&quot;]
    Plan[&quot;📊 &lt;b&gt;Plan&lt;/b&gt;&lt;br/&gt;Server analytics&quot;]

    Discord[&quot;&lt;b&gt;Discord&lt;/b&gt;&lt;br/&gt;Synchronized chat channel&quot;]
    Browser[&quot;&lt;b&gt;Web browser&lt;/b&gt;&lt;br/&gt;3D map &amp; live stats&quot;]

    Paper --&gt; DiscordSRV
    Paper --&gt; Map
    Paper --&gt; Plan

    DiscordSRV --&gt; Discord
    Map --&gt; Browser
    Plan --&gt; Browser

    classDef server fill:#46A171,color:#fff,stroke:#2F7D55,stroke-width:2px
    classDef engine fill:#2783DE,color:#fff,stroke:#1F6FBF,stroke-width:2px
    classDef service fill:#F9F8F7,color:#2C2C2B,stroke:#E6E5E3,stroke-width:2px
    classDef output fill:#2C2C2B,color:#fff,stroke:#111827,stroke-width:2px
    classDef discord fill:#5865F2,color:#fff,stroke:#4752C4,stroke-width:2px

    class VPS server
    class Paper engine
    class DiscordSRV,Map,Plan service
    class Discord discord
    class Browser output
</code></pre>
<ul>
<li><strong>PaperMC:</strong> The reference Minecraft server engine. It rewrites chunk and entity management to keep the server smooth at 20 TPS (Ticks Per Second).</li>
<li><strong>DiscordSRV, the Discord interface:</strong> It creates a bridge between your game server and your Discord server. In-game chat is synchronized with a Discord channel, the bot shows the number of connected players in real time, and you can manage administration logs.</li>
<li><strong>BlueMap or Dynmap, the online map:</strong> An interactive map accessible from any web browser. You can see builds, terrain, and player movement in real time, like Google Maps for your world.</li>
<li><strong>Plan, Player Analytics:</strong> A complete dashboard with graphs: who plays the most, peak hours, total playtime, retention, and server performance.</li>
</ul>
<p>You can use <a href="https://mcutils.com/">MC Utils</a> to fine-tune your server configuration and estimate the RAM you need based on players and mods.</p>
<h2 id="5-what-this-project-will-teach-you">5. What this project will teach you</h2>
<h3 id="a-huge-learning-opportunity">A huge learning opportunity</h3>
<p>With this project alone, you will touch:</p>
<ul>
<li>Linux and the command line (Bash).</li>
<li>Containerization with <strong>Docker</strong> and <strong>Docker Compose</strong>.</li>
<li>Code versioning with <strong>Git</strong> and <strong>GitHub</strong>.</li>
<li>Continuous deployment pipelines (<strong>CI/CD</strong>).</li>
<li>Networking: DNS, ports, reverse proxy, and HTTPS.
When you start computer science school, while others are discovering what a terminal is, you will already have managed production infrastructure.</li>
</ul>
<h3 id="reusability">Reusability</h3>
<p>Once your Docker infrastructure and deployment pipeline are installed, the machine is not locked to Minecraft. Later, you can switch or add other services in minutes:</p>
<ul>
<li>A game server for <em>Valheim</em>, <em>Terraria</em>, or <em>Palworld</em>.</li>
<li>Your own private storage server with Nextcloud.</li>
<li>Your self-hosted password manager with Vaultwarden.</li>
</ul>
<h2 id="6-budget-roi-and-exit-plan">6. Budget, ROI, and exit plan</h2>
<h3 id="financial-summary">Financial summary</h3>
<table>
<thead>
<tr>
<th><strong>Item</strong></th>
<th><strong>Monthly cost</strong></th>
<th><strong>Real-life equivalent</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>Hetzner / Hostinger / OVH</strong></td>
<td><strong>~€8 to €10 / month</strong></td>
<td><strong>One pint of beer</strong> on a Paris terrace</td>
</tr>
<tr>
<td><strong>Domain name (****<code>.fr</code>**</strong> / <strong><strong><code>.com</code></strong></strong>)**</td>
<td><strong>~€1 / month</strong> (€10–12/year)</td>
<td><strong>One coffee</strong> per month</td>
</tr>
<tr>
<td><strong>TOTAL</strong></td>
<td><strong>~€9 to €11 / month</strong></td>
<td><strong>Cheaper than a movie ticket without popcorn</strong></td>
</tr>
</tbody></table>
<p>If two or three friends share the cost, the server costs each of you around <strong>€3 per month</strong>. That is a tiny cost compared with the number of hours of fun it can generate.</p>
<h3 id="the-exit-plan-zero-fear-of-commitment">The exit plan: zero fear of commitment</h3>
<ul>
<li><strong>No commitment:</strong> By choosing providers like Hetzner or monthly no-commitment plans from OVH, you can shut down and delete your server at any time.</li>
<li><strong>Nothing is lost:</strong> Since all your code, configuration, and backups are automated and stored on GitHub / cloud storage, you can pause your subscription during exams and restart the exact same server six months later with a single command.</li>
</ul>
]]></content:encoded>
            <category>Art</category>
            <author>hi@eole.me (Éole)</author>
        </item>
        <item>
            <title>Bresse chicken is something else!</title>
            <link>https://eole.me/blog/bikepacking-chicken/en/</link>
            <guid isPermaLink="true">https://eole.me/blog/bikepacking-chicken/en/</guid>
            <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
            <description>Bresse chicken is something else!</description>
            <content:encoded><![CDATA[<p><em>An adventure pedaled by Éole</em></p>
<h2 id="september-2023-summer-is-drawing-to-a-close">September 2023, summer is drawing to a close.</h2>
<p>Before setting off on my self-supported bike trip from Paris to Geneva, I watched the weather with the anxious attention of a landless farmer. Halfway through the journey, after breaking camp near a reservoir on the Burgundy Canal and riding for ages to the first bakery, I settled at a terrace in Pouilly-en-Auxois to pour some coffee into the tank.</p>
<p>It had been oppressively hot for three days. The forecast, meanwhile, did not budge: very violent summer storms were announced for that late afternoon in mid-September, precisely on what was supposed to be the longest day of the trip. Sleeping under the stars in such a deluge had nothing heroic about it. It was mostly an excellent way to jeopardize the journey.</p>
<p>After raiding the bakery, comfortably seated on the terrace, I started looking for shelter near my planned stopping point while sipping my second double espresso. That was when the particularly attractive rate at the Ibis hotel on the Poulet motorway service area caught my eye.</p>
<p>I was wary of booking online, because I could already picture myself crying on the hard shoulder trying to reach the hotel. A good old-fashioned phone call settled the matter. The receptionist immediately put me at ease by confirming that I could get there without using the motorway, and could even bring my bike safely up to the room.</p>
<p>With this new waypoint ahead, I could resume the adventure alongside Graveleux, my faithful bicycle, heavily loaded and regularly forced to stop so I could tighten the screws shaken loose by the vibrations of the journey.</p>
<p>My legs pulled me all the way to the final climb of the late morning. I reached Beaune at lunchtime. In the last village before the town, I crossed paths with a young man carrying a tent, wearing flip-flops, and riding a bright red road bike. Another bikepacker.</p>
<p>We chatted on the narrow roads between the vineyards and the A6, then I suggested we have lunch together. It was a lovely encounter.</p>
<p>Vincent, a young man in his thirties with the square shoulders of a rugby player, sported an improbable mullet and a cheerful moustache. He was genuinely jovial. It was his first major trip: from Dijon to Aix-en-Provence. He was less heavily equipped than my weighty mount and me, because he planned to ride faster and sleep in less isolated places.</p>
<p>He radiated the excitement and discovery that this first long solo journey was giving him. Lunch on the terrace, in the wine capital of Burgundy, was delightful thanks to his humour and the humility with which he spoke about his fear of stepping outside his comfort zone. The call of speed and the intoxicating adrenaline of cycling gave him wings.</p>
<p>After our lunch, refreshed by a pint of friendship, we each returned to the road. Every evening, we sent each other text messages to make sure we had both arrived safely. Modest encouragements to help us weather the storms.</p>
<p>I reached the Saône in front of a picturesque old metal bridge that cars had to cross one at a time. At its foot, a commemorative sign explained to passers-by that we had reached the former demarcation line of the Second World War. Once across the wide river, the landscape became flatter, and that flat country tasted of freedom.</p>
<p>The kilometres disappeared beneath the pedals. The paths between the vineyards gave way to sunflowers browned by the end of the season, then to a long, chaotic grassy track cutting a forest in two. I then took an interminable greenway, a former railway line converted for the great pleasure of melancholic cycle tourists.</p>
<p>It carried me to the long-awaited break in the town of Louhans, where I discovered that cobblestones could be even more unpleasant than the worst potholes on some gravel tracks. After chatting with friendly locals, who struggled to believe I had come from the capital, the small splash of Pulco the café owner kindly poured into my water bottle helped me set off again toward the end of the day.</p>
<p>The sky was already very dark. I was being chased by the massive cumulonimbus that had been promised. Each day of this journey toward the southeast, the sun set five minutes earlier than the day before. I had lost thirty minutes over the whole week. That mattered: I needed a lot of time every day to pitch and break camp.</p>
<p>Fortunately, I did not need to pitch it that evening.</p>
<p>In the encroaching dusk, I could hear thunder rumbling at the far end of the plain. After brushing along vibrating gravel beside a regional railway line, avoiding the main roads, I saw the sky light up with flashes of lightning ten kilometres from the finish.</p>
<p>I finally arrived at the Poulet motorway service area. By the time I checked in and carried my bike up to the room on the first floor, with no lift, I could stand at the window and admire the buckets of water pouring from the sky. I was dry. I was jubilant.</p>
<p>I took a shower that evening, and it was wonderfully hot. Watching those torrents of rain, I delighted in having nothing to prove. I found rest in that simple truth: sometimes, adventure means knowing when to take shelter.</p>
<p>Once clean and warm, in the fast-food restaurant at the motorway service area, a tasty and well-earned farm chicken was waiting for me. 🤤</p>
<p><img src="/blog/images/c88ff265-6ff0-40a0-a43b-887ea3bed4f7_3e81f4f8-dfc4-49a6-8738-40afdd19c713.webp" alt="Image"></p>
<p>Éole</p>
]]></content:encoded>
            <category>Art</category>
            <author>hi@eole.me (Éole)</author>
        </item>
</channel>
</rss>