Initial import of Hugo site to Forgejo
This commit is contained in:
commit
cb1ba0317f
1259 changed files with 236349 additions and 0 deletions
11
public-clearnet/categories/homelab/index.html
Normal file
11
public-clearnet/categories/homelab/index.html
Normal file
File diff suppressed because one or more lines are too long
166
public-clearnet/categories/homelab/index.xml
Normal file
166
public-clearnet/categories/homelab/index.xml
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Homelab on AlipourIm journeys</title><link>https://blog.alipour.eu/categories/homelab/</link><description>Recent content in Homelab on AlipourIm journeys</description><generator>Hugo -- 0.146.0</generator><language>en</language><lastBuildDate>Mon, 29 Sep 2025 09:06:29 +0000</lastBuildDate><atom:link href="https://blog.alipour.eu/categories/homelab/index.xml" rel="self" type="application/rss+xml"/><item><title>Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases</title><link>https://blog.alipour.eu/posts/minecraft_server/</link><pubDate>Mon, 29 Sep 2025 09:06:29 +0000</pubDate><guid>https://blog.alipour.eu/posts/minecraft_server/</guid><description>How I containerized a Java Minecraft server with Geyser, hit a /var space wall, and locked the server to the latest stable release.</description><content:encoded><![CDATA[<h2 id="why">Why</h2>
|
||||
<p>I’ve been running a Java Minecraft world (with Bedrock players via <strong>Geyser</strong>) in <code>tmux</code>. I moved it to Docker for easier updates, backups, and restarts. Along the way I hit:</p>
|
||||
<ul>
|
||||
<li><code>failed to register layer: ... no space left on device</code></li>
|
||||
<li>Client saying: <strong>“Outdated client, please use 1.21.9 Pre-Release 2”</strong></li>
|
||||
<li>Wanting config in a neat <code>.env</code> and <strong>no whitelist</strong></li>
|
||||
</ul>
|
||||
<p>Here’s exactly what I did.</p>
|
||||
<hr>
|
||||
<h2 id="folder-layout">Folder layout</h2>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>~/minecraft/
|
||||
</span></span><span style="display:flex;"><span>├─ docker-compose.yml
|
||||
</span></span><span style="display:flex;"><span>├─ .env
|
||||
</span></span><span style="display:flex;"><span>└─ plugins/
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="env-secrets--knobs"><code>.env</code> (secrets & knobs)</h2>
|
||||
<p>Use the <strong>latest stable</strong> (not snapshots/pre-releases) by setting <code>VERSION=LATEST</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-env" data-lang="env"><span style="display:flex;"><span><span style="color:#75715e"># Minecraft server configuration</span>
|
||||
</span></span><span style="display:flex;"><span>EULA<span style="color:#f92672">=</span>TRUE
|
||||
</span></span><span style="display:flex;"><span>TYPE<span style="color:#f92672">=</span>PAPER
|
||||
</span></span><span style="display:flex;"><span>VERSION<span style="color:#f92672">=</span>LATEST
|
||||
</span></span><span style="display:flex;"><span>MEMORY<span style="color:#f92672">=</span>4G
|
||||
</span></span><span style="display:flex;"><span>USE_AIKAR_FLAGS<span style="color:#f92672">=</span>true
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#75715e"># RCON (remote console)</span>
|
||||
</span></span><span style="display:flex;"><span>ENABLE_RCON<span style="color:#f92672">=</span>true
|
||||
</span></span><span style="display:flex;"><span>RCON_PASSWORD<span style="color:#f92672">=</span>superSecretPassword123
|
||||
</span></span></code></pre></div><blockquote>
|
||||
<p>I don’t use a whitelist, so no <code>WHITELIST</code>/<code>ENFORCE_WHITELIST</code> variables.</p></blockquote>
|
||||
<hr>
|
||||
<h2 id="docker-composeyml"><code>docker-compose.yml</code></h2>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">services</span>:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">mc</span>:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">image</span>: <span style="color:#ae81ff">itzg/minecraft-server:latest</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">container_name</span>: <span style="color:#ae81ff">mc</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">restart</span>: <span style="color:#ae81ff">unless-stopped</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ports</span>:
|
||||
</span></span><span style="display:flex;"><span> - <span style="color:#e6db74">"25565:25565"</span> <span style="color:#75715e"># Java</span>
|
||||
</span></span><span style="display:flex;"><span> - <span style="color:#e6db74">"19132:19132/udp"</span> <span style="color:#75715e"># Bedrock via Geyser plugin</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">env_file</span>:
|
||||
</span></span><span style="display:flex;"><span> - <span style="color:#ae81ff">.env</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">volumes</span>:
|
||||
</span></span><span style="display:flex;"><span> - <span style="color:#ae81ff">mc-data:/data</span>
|
||||
</span></span><span style="display:flex;"><span> - <span style="color:#ae81ff">./plugins:/plugins:ro</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#f92672">volumes</span>:
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">mc-data</span>: {}
|
||||
</span></span></code></pre></div><blockquote>
|
||||
<p>The <code>version:</code> key in Compose is obsolete now, so I dropped it.</p></blockquote>
|
||||
<hr>
|
||||
<h2 id="add-geyser-and-optional-floodgate-as-plugins">Add Geyser (and optional Floodgate) as plugins</h2>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir -p ~/minecraft/plugins
|
||||
</span></span><span style="display:flex;"><span>cd ~/minecraft/plugins
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Geyser (Spigot/Paper)</span>
|
||||
</span></span><span style="display:flex;"><span>wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot -O Geyser-Spigot.jar
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Floodgate (optional: Bedrock accounts without Java linking)</span>
|
||||
</span></span><span style="display:flex;"><span>wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O Floodgate-Spigot.jar
|
||||
</span></span></code></pre></div><p>Start it up:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker compose up -d
|
||||
</span></span></code></pre></div><p>On first run, Geyser writes its config to <code>/data/plugins/Geyser-Spigot/</code>. Open UDP <strong>19132</strong> on your firewall.</p>
|
||||
<hr>
|
||||
<h2 id="hit-a-wall-var-ran-out-of-space">Hit a wall: <code>/var</code> ran out of space</h2>
|
||||
<p>Docker stores layers at <code>/var/lib/docker</code> by default. My <code>/var</code> LV was tiny:</p>
|
||||
<pre tabindex="0"><code>/dev/mapper/ubuntu--vg-var 3.9G 3.4G 333M 92% /var
|
||||
</code></pre><h3 id="quick-cleanup">Quick cleanup</h3>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker system df
|
||||
</span></span><span style="display:flex;"><span>docker system prune -f
|
||||
</span></span><span style="display:flex;"><span>docker builder prune -af
|
||||
</span></span><span style="display:flex;"><span>sudo apt-get clean
|
||||
</span></span><span style="display:flex;"><span>sudo journalctl --vacuum-size<span style="color:#f92672">=</span>100M
|
||||
</span></span></code></pre></div><p>If that’s not enough, you have two good options:</p>
|
||||
<h3 id="option-a--move-dockers-data-off-var">Option A — Move Docker’s data off <code>/var</code></h3>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl stop docker
|
||||
</span></span><span style="display:flex;"><span>sudo mkdir -p /home/docker
|
||||
</span></span><span style="display:flex;"><span>sudo rsync -aHAX --info<span style="color:#f92672">=</span>progress2 /var/lib/docker/ /home/docker/
|
||||
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">'{ "data-root": "/home/docker" }'</span> | sudo tee /etc/docker/daemon.json
|
||||
</span></span><span style="display:flex;"><span>sudo systemctl start docker
|
||||
</span></span><span style="display:flex;"><span>docker info | grep <span style="color:#e6db74">"Docker Root Dir"</span>
|
||||
</span></span></code></pre></div><p>If all looks good, free the old space:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo rm -rf /var/lib/docker/*
|
||||
</span></span></code></pre></div><h3 id="option-b--grow-var-lvm">Option B — Grow <code>/var</code> (LVM)</h3>
|
||||
<p>Check free space in the VG:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vgdisplay <span style="color:#75715e"># look for "Free PE / Size"</span>
|
||||
</span></span></code></pre></div><p>If available, extend <code>/var</code> by +5G:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo lvextend -L +5G /dev/mapper/ubuntu--vg-var
|
||||
</span></span><span style="display:flex;"><span>sudo resize2fs /dev/mapper/ubuntu--vg-var
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="the-version-mismatch-pre-release-vs-stable">The version mismatch: pre-release vs stable</h2>
|
||||
<p>My logs showed:</p>
|
||||
<pre tabindex="0"><code>Starting minecraft server version 1.21.9 Pre-Release 2
|
||||
</code></pre><p>That happens if the server pulls a pre-release build (or if <code>VERSION=LATEST</code>). Fix:</p>
|
||||
<ol>
|
||||
<li>Ensure <code>.env</code> has:
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-env" data-lang="env"><span style="display:flex;"><span>VERSION<span style="color:#f92672">=</span>LATEST_RELEASE
|
||||
</span></span></code></pre></div></li>
|
||||
<li>Recreate:
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker compose down
|
||||
</span></span><span style="display:flex;"><span>docker compose pull
|
||||
</span></span><span style="display:flex;"><span>docker compose up -d
|
||||
</span></span></code></pre></div></li>
|
||||
<li>Verify:
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker logs mc | grep <span style="color:#e6db74">"Starting minecraft server version"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -> Starting minecraft server version 1.21.1 (example)</span>
|
||||
</span></span></code></pre></div></li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<p>Tip: If you <strong>want to pin</strong> and avoid auto-updates entirely, set <code>VERSION=1.21.1</code> (or whatever stable you’ve validated).</p></blockquote>
|
||||
<hr>
|
||||
<h2 id="no-whitelist">No whitelist</h2>
|
||||
<p>Because I don’t set <code>WHITELIST</code>/<code>ENFORCE_WHITELIST</code>, anyone can join (subject to online-mode, bans, and Geyser/Floodgate auth settings). Manage ops/permissions via:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker exec -it mc rcon-cli <span style="color:#e6db74">"op YourJavaIGN"</span>
|
||||
</span></span></code></pre></div><p>(or edit <code>/data/ops.json</code>).</p>
|
||||
<hr>
|
||||
<h2 id="backup--updates">Backup & updates</h2>
|
||||
<ul>
|
||||
<li>World/data live under the <code>mc-data</code> volume → back up <code>/data</code> regularly.</li>
|
||||
<li>Update cleanly:
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker compose pull <span style="color:#f92672">&&</span> docker compose up -d
|
||||
</span></span></code></pre></div></li>
|
||||
<li>Watch space:
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n5 <span style="color:#e6db74">'df -h /var; docker system df'</span>
|
||||
</span></span></code></pre></div></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2 id="tldr">TL;DR</h2>
|
||||
<ul>
|
||||
<li>Put <strong>Geyser/Floodgate</strong> jars in <code>./plugins</code> and expose <strong>19132/udp</strong>.</li>
|
||||
<li>Keep configs in <code>.env</code>.</li>
|
||||
<li>Fix <code>/var</code> space by pruning, <strong>moving Docker’s data-root</strong>, or <strong>extending <code>/var</code></strong> via LVM.</li>
|
||||
<li>Verify version in logs after each change.</li>
|
||||
</ul>
|
||||
<p>Happy block-breaking! 🧱🚀</p>
|
||||
<hr>
|
||||
<div class="signature-block" style="margin-top:1rem">
|
||||
<p><strong>Downloads:</strong>
|
||||
<a href="/sources/posts/minecraft_server.md">Markdown</a> ·
|
||||
<a href="/sources/posts/minecraft_server.md.asc">Signature (.asc)</a>
|
||||
</p><details class="signature">
|
||||
<summary>View OpenPGP signature</summary>
|
||||
<pre style="font-size:0.85em; overflow-x:auto; padding:0.75rem;">-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEVaKl3oR5K6zGyu4/tYgoUOBMjSoFAmpkbuAACgkQtYgoUOBM
|
||||
jSrrmBAAuVoSvB3tRIzD+N0F5OwfYvG3V3z6ok58df7p4js91/a9lcki2ywxw/Dy
|
||||
Q3aeieiGITkd/zMNjTydy4XjkScoRFFlL5GVZ2WNjO8CvjpEv3nK7EX6jRt5leMV
|
||||
0D0DESMnOQzgo4a1CuNHrYPHKPaMVpJ/1aKOUZwyPC9j8/70irAJpoA2jdBgSsxw
|
||||
7p/hYijX0vGJ8+WSFj6707dh6hNRk5ZaNc0cElpkE4kXA31H0h/fRwPPteT4wjGA
|
||||
JWQAyEUu3Vx/U0BnN6R9Lne+5cqxO0Kh8VrcBpyH2VpqH3fDk1fIHk1RdhDxwKD7
|
||||
OzvAT5XXRS5Q6Udc7Nsa9T/OYG+elcgMAMFXosItqTRJNG72OyWloLVc/OrJ5Qsc
|
||||
s81FbfcHp1dgjJ2gtO2Eyb/wb1WkyvrQegNnjuJzMt3awBN1BWex5Nn4Bz+UbLDz
|
||||
g6dGQxcpfDJ6F9Tjz/ru7RZ9Yic/bo8vVvKaa6FhSAwF4SluKWS3cf3meE4GQD5r
|
||||
NrClzg0Vujk/3zP/6yhCL7I0SwQ+NeW2HoUHeoawApBmFt/q5du4ftIx2iMMeWoH
|
||||
F91H35CchRtKArxjpwFNt/J1QAPvKx9UvzA2uAl+LNOWXf/gomXH6Tqm9vnWr/aX
|
||||
sczdH6N2E0+7KDO7NwjBJWa/QwdXKUlOq5fFgAop22v3vWOml1M=
|
||||
=NmxL
|
||||
-----END PGP SIGNATURE-----
|
||||
</pre>
|
||||
</details><p><em>Verify locally:</em></p>
|
||||
<pre style="font-size:0.85em; overflow-x:auto; padding:0.75rem;">curl -fSLO https://blog.alipour.eu/sources/posts/minecraft_server.md
|
||||
curl -fSLO https://blog.alipour.eu/sources/posts/minecraft_server.md.asc
|
||||
gpg --verify minecraft_server.md.asc minecraft_server.md
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
]]></content:encoded></item></channel></rss>
|
||||
2
public-clearnet/categories/homelab/page/1/index.html
Normal file
2
public-clearnet/categories/homelab/page/1/index.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<!doctype html><html lang=en><head><title>https://blog.alipour.eu/categories/homelab/</title>
|
||||
<link rel=canonical href=https://blog.alipour.eu/categories/homelab/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://blog.alipour.eu/categories/homelab/"></head></html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue