Det här sätter du upp
En Minecraft-server för Java Edition, för dig och dina vänner, utan spelpanel. Den körs från avbilden itzg/minecraft-server, som hämtar servern, håller den uppdaterad och stänger den på ett säkert sätt, i Podman under en egen användare som heter minecraft, som i Podman-guiden. Spelarna ansluter direkt till port 25565, så Caddy behövs inte.
Servertypen är Paper, som spelas som det spel Mojang levererar men har många prestandaförbättringar, så att en server med två kärnor klarar fler spelare, och som kan ladda insticksprogram. Paper rättar några buggar i vanilla som tekniska spelare bygger på, till exempel TNT-duplicering. Vill du hellre köra Mojangs egen server sätter du TYPE=VANILLA i steg 2.
Varje steg nedan har körts på en nyinstallerad Melonslab VC-P Alloy (2 vCPU, 8 GB) med Debian 13:
- Servern startade Minecraft 26.3 med Paper på omkring 30 sekunder och svarade utifrån på en ping från serverlistan över IPv4, med version och antal spelare. Över IPv6 svarade den på en ping från själva servern.
- En spelare lades till i vitlistan och gjordes till operatör från konsolen, och konsolens port gick inte att nå från internet.
- En säkerhetskopia av världen togs medan servern var igång. Ett block som togs bort efter säkerhetskopian fanns tillbaka efter återställningen.
- En uppdatering från Minecraft 26.2 till 26.3 behöll världen, och allt startade igen av sig självt efter en omstart av servern.
- En SRV-post för serverns namn gav rätt svar.
En riktig inloggning i spelet testades inte: för att ansluta behövs ett Minecraft-konto, köpt med ett Microsoft-konto. Bara pingen från serverlistan, det som spelets Multiplayer-skärm visar, testades.
Utan spelare använde servern omkring 2 GB minne och en tiondel av en kärna.
Innan du börjar
Du behöver:
- en server med Debian 13, säkrad som i steg 1 till 4 i säkerhetsguiden, med ufw påslagen;
- Podman, installerad som i steg 1 i Podman-guiden;
- för ett namn i stället för en adress, en A-post och en AAAA-post för
mc.example.comsom pekar på din server.
Exemplen använder mc.example.com, 203.0.113.10 och 2001:db8::10 för servern och Anna för en spelare. Byt ut dem genomgående.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash minecraft
loginctl enable-linger minecraft
machinectl shell minecraft@
Steg 2 och 4 till 9 körs som minecraft.
2. Definiera servern
mkdir -p ~/.config/containers/systemd ~/minecraft
Skapa ~/.config/containers/systemd/minecraft.container:
[Unit]
Description=Minecraft server
[Container]
ContainerName=minecraft
Image=docker.io/itzg/minecraft-server:stable
# The files in ~/minecraft belong to the minecraft user, not to a user ID of the container.
UserNS=keep-id:uid=1000,gid=1000
Volume=%h/minecraft:/data
PublishPort=25565:25565
Environment=EULA=TRUE
Environment=TYPE=PAPER
Environment=VERSION=26.3
Environment=MEMORY=4G
Environment=ENABLE_WHITELIST=TRUE
Environment=SKIP_DOWNLOAD_DEFAULTS=TRUE
Environment=TZ=Europe/Stockholm
# Give the server time to save the world when it stops.
StopTimeout=90
AutoUpdate=registry
[Service]
Restart=always
TimeoutStopSec=120
[Install]
WantedBy=default.target
Det här gör raderna:
EULA=TRUEbetyder att du godkänner Minecrafts licensavtal för slutanvändare, som avbilden kräver innan den startar en server. Avtalet säger bland annat att du inte får sälja fördelar i spelet till spelarna. Avbilden skrivereula=truei~/minecraft/eula.txt.UserNS=keep-idkör servern som användare 1000 inne i containern, vilket motsvararminecraftutanför, så att du kan läsa, kopiera och säkerhetskopiera filerna i~/minecraftutan extra steg.VERSIONlåser Minecraft-versionen, så att en ny version inte kommer förrän du väljer den (steg 9). Inom den versionen hämtar avbilden det senaste bygget av Paper varje gång servern startar.ENABLE_WHITELISTsläpper bara in spelarna du lägger till i steg 6. Andra som hittar din adress kan inte ansluta.SKIP_DOWNLOAD_DEFAULTShindrar avbilden från att hämta Papers standardinställningar från en utomståendes GitHub-repo vid varje start. Paper skriver samma standardinställningar själv.StopTimeout=90ger servern tid att spara innan Podman stoppar den. Avbilden skickarstopvia konsolen, och världen sparas.
MEMORY är minnet Java får använda för spelet. Java behöver ungefär en fjärdedel till utöver det, och systemet behöver resten. För våra servrar:
| Serverns minne | MEMORY |
|---|---|
| 8 GB | 4G |
| 16 GB | 10G |
| 24 GB | 16G |
| 32 GB | 22G |
4 GB räcker gott för ett gäng vänner. Mer minne hjälper vid många spelare, långt synavstånd och moddar, inte för en liten grupp. Bara inställningen för 8 GB testades.
Starta den:
systemctl --user daemon-reload
systemctl --user start minecraft
systemctl --user enable --now podman-auto-update.timer
Första starten hämtar avbilden, Paper och Minecraft och skapar världen, vilket tog knappt två minuter. Följ den med journalctl --user -u minecraft -f och vänta på den här raden:
[07:59:22 INFO]: Done (29.257s)! For help, type "help"
3. Öppna spelporten
Gå tillbaka till root med exit och kör:
ufw allow 25565/tcp
ufw gäller för Podman utan root precis som för andra program, så porten är stängd tills du öppnar den. Bara port 25565 är öppen: serverns konsol, RCON på port 25575, stannar inne i containern och går inte att nå från internet, och inte heller från själva servern.
4. Kontrollera att den svarar
Avbilden har ett verktyg, mc-monitor, som frågar en server om dess status på samma sätt som spelets serverlista. Byt tillbaka med machinectl shell minecraft@ och fråga över IPv4 och IPv6, med din servers adresser:
podman run --rm --network host --entrypoint mc-monitor docker.io/itzg/minecraft-server:stable status --host 203.0.113.10
podman run --rm --network host --entrypoint mc-monitor docker.io/itzg/minecraft-server:stable status --host 2001:db8::10
203.0.113.10:25565 : version=Paper 26.3 online=0 max=20 motd='A Minecraft Server'
2001:db8::10:25565 : version=Paper 26.3 online=0 max=20 motd='A Minecraft Server'
Välj sedan Multiplayer, Add Server i Minecraft på din egen dator och ange mc.example.com eller 203.0.113.10 som Server Address. Serverlistan visar servern med version och antal spelare. Det här steget testades inte i själva spelet, bara med mc-monitor.
5. Använd ett namn utan port
Spelarna kan skriva mc.example.com som det är: spelet använder port 25565 när ingen port anges. För ett kortare namn, till exempel example.com, vars A-post redan pekar på din webbplats, lägger du till en SRV-post hos din DNS-leverantör:
| Namn | Typ | Prioritet | Vikt | Port | Mål |
|---|---|---|---|---|---|
_minecraft._tcp.example.com | SRV | 0 | 5 | 25565 | mc.example.com |
Spelet slår upp den här posten först och ansluter till målet och porten den anger. Samma post gör att du kan köra servern på en annan port utan att spelarna behöver skriva den. Kontrollera den från valfri dator:
dig +short SRV _minecraft._tcp.example.com
0 5 25565 mc.example.com.
6. Lägg till spelare och operatörer
rcon-cli i containern skickar kommandon till serverns konsol. Som minecraft:
podman exec minecraft rcon-cli whitelist add Anna
podman exec minecraft rcon-cli op Anna
Added Anna to the whitelist
Made Anna a server operator
Namnen slås upp i Mojangs spelarlista, så de måste stavas som spelarens namn i Minecraft. En operatör kan köra alla kommandon i spelet, till exempel /whitelist add för sina vänner, så ge det bara till personer du litar på. Andra kommandon du kommer att använda:
podman exec minecraft rcon-cli whitelist list
podman exec minecraft rcon-cli whitelist remove Anna
podman exec minecraft rcon-cli list
För en konsol att skriva i kör du podman exec -it minecraft rcon-cli och lämnar den med Ctrl+D. Konsolens lösenord står i ~/minecraft/server.properties, som bara minecraft kan läsa.
Paper skickar anonym statistik till bStats, en statistiktjänst för dem som skriver insticksprogram: ett slumpat server-id, antalet spelare och versionerna av Minecraft, Java och operativsystemet. För att stänga av det sätter du enabled: false i ~/minecraft/plugins/bStats/config.yml och startar om med systemctl --user restart minecraft.
7. Säkerhetskopiera världen
En kopia av världen medan servern skriver till den kan bli trasig. Servern kan i stället pausa sparandet, så att du inte behöver stoppa den för en säkerhetskopia. Skapa ~/bin/backup-world:
#!/bin/sh
# Back up the Minecraft world without stopping the server.
set -e
cd ~/minecraft
mkdir -p ~/backup
podman exec minecraft rcon-cli save-off
trap 'podman exec minecraft rcon-cli save-on' EXIT
podman exec minecraft rcon-cli save-all flush
tar -czf ~/backup/world-$(date +%Y-%m-%d-%H%M).tar.gz world whitelist.json ops.json banned-players.json banned-ips.json
# Keep two weeks of backups.
find ~/backup -name 'world-*.tar.gz' -mtime +14 -delete
save-off pausar sparandet, save-all flush skriver allt i minnet till disken och save-on slår på sparandet igen, även om kopieringen misslyckas. Spelarna kan spela vidare under tiden. Gör skriptet körbart och prova det:
mkdir -p ~/bin
chmod +x ~/bin/backup-world
~/bin/backup-world
ls ~/backup
För att köra det varje natt skapar du ~/.config/systemd/user/backup-world.service:
[Unit]
Description=Back up the Minecraft world
[Service]
Type=oneshot
ExecStart=%h/bin/backup-world
Och ~/.config/systemd/user/backup-world.timer:
[Unit]
Description=Back up the Minecraft world every night
[Timer]
OnCalendar=*-*-* 04:30
Persistent=true
[Install]
WantedBy=timers.target
systemctl --user daemon-reload
systemctl --user enable --now backup-world.timer
En ny, liten värld tog omkring 0,5 MB, och säkerhetskopian tog en sekund. Säkerhetskopiorna ligger på samma disk som världen, så kopiera ~/backup till en annan maskin då och då.
8. Återställ en säkerhetskopia
Stoppa servern, flytta undan den nuvarande världen, packa upp säkerhetskopian och starta igen. Med namnet på din säkerhetskopia:
systemctl --user stop minecraft
mv ~/minecraft/world ~/minecraft/world.old
tar -xzf ~/backup/world-2026-09-27-0802.tar.gz -C ~/minecraft
systemctl --user start minecraft
Vitlistan och operatörerna återställs också från säkerhetskopian. När den återställda världen ser rätt ut tar du bort den gamla med rm -rf ~/minecraft/world.old.
9. Uppdatera
Det finns två sorters uppdateringar:
- Avbilden och Paper.
podman-auto-update.timerletar efter en ny avbild varje natt och startar om servern när det finns en. Varje start hämtar också det senaste bygget av Paper för din Minecraft-version.podman auto-update --dry-runvisar om en ny avbild väntar. - En ny Minecraft-version. Den väljer du själv, eftersom spelarna behöver samma version i sitt spel, och en värld som har öppnats i en ny version inte kan gå tillbaka till en äldre. Paper brukar ha ett bygge några dagar efter Mojangs släpp: se papermc.io/downloads.
För att byta till en ny version tar du en säkerhetskopia, ändrar raden VERSION i ~/.config/containers/systemd/minecraft.container, till exempel från 26.2 till 26.3, och startar om:
~/bin/backup-world
systemctl --user daemon-reload
systemctl --user restart minecraft
Loggen visar den nya versionen när servern startar:
[08:05:26 INFO]: [bootstrap] Loading Paper 26.3-49-main@0fdc088 (2026-09-26T20:39:03Z) for Minecraft 26.3
Felsökning
whitelist add svarar "That player does not exist". Namnet är inget spelarnamn i Minecraft. Kontrollera stavningen med spelaren.
Servern syns inte i spelets serverlista. Kontrollera att ufw status har regeln från steg 3 och att ss -tlnp | grep 25565 visar att pasta lyssnar. Om mc-monitor från steg 4 svarar men spelet inte gör det, ligger problemet mellan dig och servern, eller i namnet: prova adressen i stället.
podman exec svarar att RCON-anslutningen nekades. Servern håller fortfarande på att starta. Vänta på raden Done i journalctl --user -u minecraft.
Loggen visar varningar om sun.misc.Unsafe. De kommer från ett bibliotek i själva Minecraft på den senaste Java-versionen och gör ingen skada.
systemctl --user visar "Failed to connect to user scope bus". Du bytte användare med su eller sudo. Använd machinectl shell minecraft@ från steg 1.