[{"data":1,"prerenderedAt":624},["ShallowReactive",2],{"\u002Fguides\u002Fvelocity-proxy-docker-compose-itzg-mc-proxy\u002F":3,"guides:en":455,"published-guide-paths":597},{"id":4,"title":5,"author":6,"body":7,"category":409,"date":410,"description":411,"excerpt":412,"extension":413,"faq":414,"featured":424,"featuredOrder":412,"indexOrder":425,"localeGroup":426,"meta":427,"navigation":428,"path":429,"primaryTool":430,"published":428,"related":431,"seo":435,"slug":436,"sources":437,"stem":453,"updated":410,"__hash__":454},"guides\u002Fguides\u002F23.velocity-proxy-docker-compose-itzg-mc-proxy.md","Set Up a Velocity Proxy with Docker Compose and itzg\u002Fmc-proxy","setupmc.com Team",{"type":8,"value":9,"toc":398},"minimark",[10,15,19,46,55,59,75,78,88,103,111,115,118,126,133,139,142,146,152,160,170,182,186,189,195,198,229,240,244,255,261,264,268,365,369],[11,12,14],"h2",{"id":13},"what-this-network-does","What this network does",[16,17,18],"p",{},"Velocity becomes the only public Minecraft entry point. It authenticates Java players and sends them to one or more backend servers. In this first setup, the network contains:",[20,21,22,31,37,40,43],"ul",{},[23,24,25,26,30],"li",{},"one ",[27,28,29],"code",{},"itzg\u002Fmc-proxy"," container running Velocity",[23,32,25,33,36],{},[27,34,35],{},"itzg\u002Fminecraft-server"," container running Paper",[23,38,39],{},"one shared Docker network",[23,41,42],{},"only TCP port 25565 published by the proxy",[23,44,45],{},"persistent folders for proxy and server state",[16,47,48,49,54],{},"If you only need one server and no proxy plugins, stay with the simpler ",[50,51,53],"a",{"href":52},"\u002Fjava-server\u002F","Java server configurator",". A proxy adds another security boundary that must be configured deliberately.",[11,56,58],{"id":57},"step-1-generate-the-proxy-compose-baseline","Step 1: Generate the proxy Compose baseline",[16,60,61,62,66,67,70,71,74],{},"Open the ",[50,63,65],{"href":64},"\u002Fproxy-server\u002F","Minecraft Proxy Configurator",", select ",[27,68,69],{},"VELOCITY",", and keep the public mapping at ",[27,72,73],{},"25565:25577",". Download the generated Compose file.",[16,76,77],{},"For the complete network, extend it with a Paper backend:",[79,80,86],"pre",{"className":81,"code":83,"language":84,"meta":85},[82],"language-yaml","services:\n  proxy:\n    image: itzg\u002Fmc-proxy:latest\n    restart: unless-stopped\n    ports:\n      - \"25565:25577\"\n    environment:\n      TYPE: VELOCITY\n      MEMORY: 512m\n    volumes:\n      - .\u002Fproxy:\u002Fserver\n    networks:\n      - minecraft\n    stdin_open: true\n    tty: true\n\n  lobby:\n    image: itzg\u002Fminecraft-server:java25\n    restart: unless-stopped\n    environment:\n      EULA: \"TRUE\"\n      TYPE: PAPER\n      VERSION: \"26.1.2\"\n      ONLINE_MODE: \"FALSE\"\n    volumes:\n      - .\u002Flobby:\u002Fdata\n    networks:\n      - minecraft\n\nnetworks:\n  minecraft: {}\n","yaml","",[27,87,83],{"__ignoreMap":85},[16,89,90,91,94,95,98,99,102],{},"The backend has no ",[27,92,93],{},"ports"," entry. Docker Compose makes it reachable as ",[27,96,97],{},"lobby:25565"," from the proxy because both services share the ",[27,100,101],{},"minecraft"," network.",[16,104,105,106,110],{},"Pin a Minecraft release you have tested instead of copying the example version indefinitely. Check the ",[50,107,109],{"href":108},"\u002Fguides\u002Fdetermining-correct-java-version-for-operating-minecraft-server\u002F","Java version guide"," when the selected Paper release changes its runtime requirement.",[11,112,114],{"id":113},"step-2-start-once-to-create-configuration-files","Step 2: Start once to create configuration files",[16,116,117],{},"Create the persistent folders, validate the resolved Compose model, and start both services:",[79,119,124],{"className":120,"code":122,"language":123,"meta":85},[121],"language-bash","mkdir -p proxy lobby\ndocker compose config\ndocker compose up -d\ndocker compose logs -f proxy lobby\n","bash",[27,125,122],{"__ignoreMap":85},[16,127,128,129,132],{},"Wait until Paper reports that it is ready and Velocity has created ",[27,130,131],{},"proxy\u002Fvelocity.toml",". Then stop the stack before changing forwarding:",[79,134,137],{"className":135,"code":136,"language":123,"meta":85},[121],"docker compose down\n",[27,138,136],{"__ignoreMap":85},[16,140,141],{},"Do not leave the backend in offline mode while its port is public. The next step completes identity forwarding before the network is opened to players.",[11,143,145],{"id":144},"step-3-register-the-backend-in-velocity","Step 3: Register the backend in Velocity",[16,147,148,149,151],{},"Edit ",[27,150,131],{},". Keep the proxy listener aligned with the container port and point the backend at the Compose service name:",[79,153,158],{"className":154,"code":156,"language":157,"meta":85},[155],"language-toml","bind = \"0.0.0.0:25577\"\nonline-mode = true\nplayer-info-forwarding-mode = \"modern\"\nforwarding-secret-file = \"forwarding.secret\"\n\n[servers]\nlobby = \"lobby:25565\"\ntry = [\"lobby\"]\n","toml",[27,159,156],{"__ignoreMap":85},[16,161,162,165,166,169],{},[27,163,164],{},"localhost"," would mean the proxy container itself, not the Paper container. Docker service discovery keeps ",[27,167,168],{},"lobby"," stable even when the backend container receives a new IP address.",[16,171,172,173,176,177,181],{},"Velocity creates ",[27,174,175],{},"proxy\u002Fforwarding.secret",". The same value must be configured on Paper. Follow the dedicated ",[50,178,180],{"href":179},"\u002Fguides\u002Fvelocity-modern-forwarding-paper-docker\u002F","Velocity modern forwarding guide"," before starting the public network.",[11,183,185],{"id":184},"step-4-start-and-validate-every-layer","Step 4: Start and validate every layer",[16,187,188],{},"Bring the stack back up:",[79,190,193],{"className":191,"code":192,"language":123,"meta":85},[121],"docker compose up -d\ndocker compose ps\ndocker compose logs --tail=100 proxy lobby\n",[27,194,192],{"__ignoreMap":85},[16,196,197],{},"Confirm these conditions:",[199,200,201,208,211,217,223],"ol",{},[23,202,203,204,207],{},"Both services remain ",[27,205,206],{},"Up"," and the proxy becomes healthy.",[23,209,210],{},"Velocity logs no forwarding or backend connection error.",[23,212,213,216],{},[27,214,215],{},"docker compose port proxy 25577"," shows the public mapping.",[23,218,219,222],{},[27,220,221],{},"docker compose port lobby 25565"," returns no published host port.",[23,224,225,226,228],{},"A Java client can join the host on port 25565 and reaches ",[27,227,168],{},".",[16,230,231,232,235,236,239],{},"Finally, run ",[27,233,234],{},"server lobby"," in the Velocity console or use the in-game ",[27,237,238],{},"\u002Fserver lobby"," command with appropriate permissions. The backend console should show the forwarded player identity, not an unauthenticated direct login.",[11,241,243],{"id":242},"add-a-second-backend-later","Add a second backend later",[16,245,246,247,250,251,254],{},"Add another service, for example ",[27,248,249],{},"survival",", to the same network and register it in ",[27,252,253],{},"velocity.toml",":",[79,256,259],{"className":257,"code":258,"language":157,"meta":85},[155],"[servers]\nlobby = \"lobby:25565\"\nsurvival = \"survival:25565\"\ntry = [\"lobby\"]\n",[27,260,258],{"__ignoreMap":85},[16,262,263],{},"Do not reuse a world directory across backend services. Give every server its own persistent data path and repeat the same forwarding and isolation controls.",[11,265,267],{"id":266},"troubleshooting","Troubleshooting",[269,270,271,287],"table",{},[272,273,274],"thead",{},[275,276,277,281,284],"tr",{},[278,279,280],"th",{},"Symptom",[278,282,283],{},"Likely cause",[278,285,286],{},"Next check",[288,289,290,309,320,331,350],"tbody",{},[275,291,292,299,302],{},[293,294,295,296,298],"td",{},"Velocity starts, but ",[27,297,168],{}," is unavailable",[293,300,301],{},"Wrong service name, port, or Docker network",[293,303,304,305],{},"Follow the ",[50,306,308],{"href":307},"\u002Fguides\u002Fvelocity-proxy-cannot-connect-backend-docker\u002F","backend connection runbook",[275,310,311,314,317],{},[293,312,313],{},"Paper says to connect through Velocity",[293,315,316],{},"Modern forwarding differs between proxy and backend",[293,318,319],{},"Compare mode, enabled flag, and secret",[275,321,322,325,328],{},[293,323,324],{},"Players can bypass the proxy",[293,326,327],{},"Backend port was published or allowed by a firewall",[293,329,330],{},"Remove the backend port mapping and close the rule",[275,332,333,336,339],{},[293,334,335],{},"Proxy is unhealthy but accepts connections",[293,337,338],{},"Healthcheck port differs from the Velocity listener",[293,340,341,342,345,346,349],{},"Align ",[27,343,344],{},"SERVER_PORT",", ",[27,347,348],{},"bind",", and the container port",[275,351,352,355,362],{},[293,353,354],{},"Existing world is missing",[293,356,357,358,361],{},"A different ",[27,359,360],{},"\u002Fdata"," path was mounted",[293,363,364],{},"Stop and verify the bind mount before copying data",[11,366,368],{"id":367},"next-steps","Next steps",[20,370,371,378,384,391],{},[23,372,373,374,377],{},"Complete ",[50,375,376],{"href":179},"Velocity modern forwarding for Paper"," before inviting players.",[23,379,380,381,228],{},"If the proxy cannot see a backend, diagnose the ",[50,382,383],{"href":307},"Docker connection path",[23,385,386,387,228],{},"Add Bedrock access with ",[50,388,390],{"href":389},"\u002Fguides\u002Fgeyser-floodgate-velocity-proxy-docker\u002F","Geyser and Floodgate on Velocity",[23,392,393,394,228],{},"Protect each server independently with ",[50,395,397],{"href":396},"\u002Fguides\u002Fset-up-automatic-minecraft-backups-docker-mc-backup\u002F","automatic backups",{"title":85,"searchDepth":399,"depth":399,"links":400},2,[401,402,403,404,405,406,407,408],{"id":13,"depth":399,"text":14},{"id":57,"depth":399,"text":58},{"id":113,"depth":399,"text":114},{"id":144,"depth":399,"text":145},{"id":184,"depth":399,"text":185},{"id":242,"depth":399,"text":243},{"id":266,"depth":399,"text":267},{"id":367,"depth":399,"text":368},"getting-started","2026-08-01","Run Velocity and Paper together with Docker Compose, route players through the proxy, keep backend ports private, and validate the complete connection path.",null,"md",[415,418,421],{"question":416,"answer":417},"Do I need a proxy for a single Minecraft server?","Usually not. A proxy becomes useful when one public address should route players to multiple backend servers, when proxy plugins are required, or when Geyser should run at the network edge.",{"question":419,"answer":420},"Should the Paper backend publish port 25565?","No. When proxy and backend share a Docker network, Velocity connects to the Paper service name and container port directly. Publishing the backend would create an avoidable bypass around the proxy.",{"question":422,"answer":423},"Why does the setup use offline mode on Paper?","Velocity authenticates the player at the public edge and forwards the identity to Paper. Offline mode on the backend is safe only when direct access is blocked and forwarding is configured correctly.",false,"4","velocity-proxy-docker-compose",{},true,"\u002Fguides\u002Fvelocity-proxy-docker-compose-itzg-mc-proxy","proxy-configurator",[432,433,434],"velocity-modern-forwarding-paper","velocity-backend-unreachable-docker","minecraft-docker-security-hardening",{"title":5,"description":411},"velocity-proxy-docker-compose-itzg-mc-proxy",[438,441,444,447,450],{"title":439,"url":440},"itzg\u002Fmc-proxy image documentation","https:\u002F\u002Fgithub.com\u002Fitzg\u002Fdocker-mc-proxy",{"title":442,"url":443},"Velocity getting started","https:\u002F\u002Fdocs.papermc.io\u002Fvelocity\u002Fgetting-started\u002F",{"title":445,"url":446},"Velocity configuration reference","https:\u002F\u002Fdocs.papermc.io\u002Fvelocity\u002Fconfiguration\u002F",{"title":448,"url":449},"Velocity server security","https:\u002F\u002Fdocs.papermc.io\u002Fvelocity\u002Fsecurity\u002F",{"title":451,"url":452},"Docker Compose networking","https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Fhow-tos\u002Fnetworking\u002F","guides\u002F23.velocity-proxy-docker-compose-itzg-mc-proxy","MImcYmbcAan-EsZz7G0sfS94jY8gxhIRzXt6WidSucc",[456,457,462,467,472,479,485,490,495,500,505,511,515,521,526,531,537,543,549,555,561,567,573,579,585,591],{"path":429,"title":5,"description":411,"excerpt":412,"author":6,"date":410,"category":409,"localeGroup":426},{"path":458,"title":459,"description":460,"excerpt":412,"author":6,"date":410,"category":461,"localeGroup":432},"\u002Fguides\u002Fvelocity-modern-forwarding-paper-docker","Configure Velocity Modern Forwarding with Paper in Docker","Match Velocity and Paper forwarding settings, protect the forwarding secret, block direct backend access, and verify that player identity reaches Paper safely.","security",{"path":463,"title":464,"description":465,"excerpt":412,"author":6,"date":410,"category":466,"localeGroup":433},"\u002Fguides\u002Fvelocity-proxy-cannot-connect-backend-docker","Velocity Proxy Cannot Connect to a Backend in Docker: A Runbook","Fix Velocity backend connection failures by checking container state, Docker networks, service-name DNS, the container port, Paper readiness, and forwarding separately.","networking",{"path":468,"title":469,"description":470,"excerpt":412,"author":6,"date":410,"category":466,"localeGroup":471},"\u002Fguides\u002Fgeyser-floodgate-velocity-proxy-docker","Run Geyser and Floodgate on a Velocity Proxy with Docker","Add Bedrock crossplay at the Velocity edge, publish UDP 19132 correctly, configure Floodgate authentication, and keep Geyser off the individual backends.","geyser-floodgate-velocity-proxy",{"path":473,"title":474,"description":475,"excerpt":412,"author":6,"date":476,"category":477,"localeGroup":478},"\u002Fguides\u002Fupdate-minecraft-server-docker-compose-rollback","Update a Minecraft Server with Docker Compose and Roll Back Safely","Update an itzg\u002Fminecraft-server deployment without gambling with your world. This runbook covers version pinning, a cold backup, validation, and a real rollback path.","2026-07-18","docker-operations","docker-minecraft-update-rollback",{"path":480,"title":481,"description":482,"excerpt":412,"author":6,"date":476,"category":483,"localeGroup":484},"\u002Fguides\u002Finstall-paper-plugins-docker-compose","Install and Update Paper Plugins with Docker Compose","Install Paper plugins reproducibly with itzg\u002Fminecraft-server. Compare a read-only \u002Fplugins source mount with managed Modrinth downloads, then validate every plugin after restart.","mods-plugins","paper-plugins-docker-compose",{"path":486,"title":487,"description":488,"excerpt":412,"author":6,"date":476,"category":483,"localeGroup":489},"\u002Fguides\u002Fmodrinth-modpack-itzg-minecraft-server-docker","Run a Modrinth Modpack with itzg\u002Fminecraft-server and Docker Compose","Deploy a server-compatible Modrinth modpack with Docker Compose, pin the pack version, match Java and client requirements, and validate the first start safely.","modrinth-modpack-docker",{"path":491,"title":492,"description":493,"excerpt":412,"author":6,"date":476,"category":477,"localeGroup":494},"\u002Fguides\u002Fmigrate-existing-minecraft-server-to-docker","Migrate an Existing Minecraft Server or World to Docker","Move an existing Minecraft server into itzg\u002Fminecraft-server without mixing migration and upgrades. This runbook covers world-only imports, full data moves, permissions, and rollback.","migrate-minecraft-server-to-docker",{"path":496,"title":497,"description":498,"excerpt":412,"author":6,"date":476,"category":477,"localeGroup":499},"\u002Fguides\u002Fminecraft-container-keeps-restarting-docker-compose","Minecraft Container Keeps Restarting: Diagnose the Docker Compose Loop","Find out why an itzg\u002Fminecraft-server container repeatedly restarts. This runbook preserves the first error, separates exited from unhealthy containers, and fixes the actual cause.","docker-minecraft-restart-loop",{"path":501,"title":502,"description":503,"excerpt":412,"author":6,"date":476,"category":483,"localeGroup":504},"\u002Fguides\u002Fcurseforge-modpack-itzg-minecraft-server-docker","Run a CurseForge Modpack with itzg\u002Fminecraft-server and Docker Compose","Deploy a CurseForge modpack with AUTO_CURSEFORGE, pin its file ID, protect the API key, handle manual downloads, and validate loader and client compatibility.","curseforge-modpack-docker",{"path":506,"title":507,"description":508,"excerpt":412,"author":6,"date":476,"category":509,"localeGroup":510},"\u002Fguides\u002Fminecraft-docker-exit-code-137-oomkilled","Minecraft Docker Exit Code 137: Diagnose OOMKilled Correctly","Exit code 137 means SIGKILL, not automatically an out-of-memory event. Confirm Docker OOMKilled state, compare JVM heap with container limits, and leave non-heap headroom.","performance","minecraft-docker-exit-137-oom",{"path":512,"title":513,"description":514,"excerpt":412,"author":6,"date":476,"category":461,"localeGroup":434},"\u002Fguides\u002Fsecure-minecraft-server-docker-compose","Secure a Minecraft Server with Docker Compose: Practical Hardening","Harden an itzg\u002Fminecraft-server deployment with online mode, a whitelist, file-based RCON secrets, a non-root container, reduced capabilities, limited ports, and trusted plugins.",{"path":516,"title":517,"description":518,"excerpt":412,"author":6,"date":476,"category":519,"localeGroup":520},"\u002Fguides\u002Fset-up-automatic-minecraft-backups-docker-mc-backup","Set Up Automatic Minecraft Backups with docker-mc-backup","Back up your Minecraft world automatically with itzg\u002Fmc-backup. This guide shows a safe sidecar setup, retention defaults, and how to validate that backups really work.","backups","docker-mc-backup-setup",{"path":522,"title":523,"description":524,"excerpt":412,"author":6,"date":476,"category":519,"localeGroup":525},"\u002Fguides\u002Frestore-minecraft-world-backup-docker","Restore a Minecraft World from Backup in Docker: A Safe Runbook","A backup is only useful if you can restore it safely. This guide shows how to restore a Minecraft world in Docker, avoid overwriting live data accidentally, and validate the result before reopening the server.","docker-minecraft-restore-runbook",{"path":527,"title":528,"description":529,"excerpt":412,"author":6,"date":476,"category":519,"localeGroup":530},"\u002Fguides\u002Fhetzner-snapshots-minecraft-world-volumes","Why Hetzner Snapshots Do Not Fully Protect Your Minecraft World","Hetzner Cloud Backups and Snapshots are useful, but they do not include attached Volumes. This guide explains the risk, the operational consequences, and the safer backup pattern for Minecraft.","hetzner-snapshots-volumes",{"path":532,"title":533,"description":534,"excerpt":412,"author":6,"date":535,"category":466,"localeGroup":536},"\u002Fguides\u002Fminecraft-crossplay-geyser-floodgate","Set Up Java and Bedrock Crossplay with Geyser and Floodgate","Want Bedrock players on phones or consoles to join your Java server? This guide shows a direct Paper-based Geyser and Floodgate setup without introducing a separate proxy layer.","2026-04-04","geyser-floodgate-crossplay",{"path":538,"title":539,"description":540,"excerpt":412,"author":6,"date":541,"category":409,"localeGroup":542},"\u002Fguides\u002Fpaper-vs-vanilla-vs-fabric-vs-forge","Paper vs Vanilla vs Fabric vs Forge: Which Minecraft Server Software Should You Choose?","Choosing the wrong server software creates avoidable pain later. This guide compares Vanilla, Paper, Fabric, Quilt, Forge, and NeoForge based on plugins, mods, performance, and operational complexity.","2026-04-03","minecraft-server-software-choice",{"path":544,"title":545,"description":546,"excerpt":412,"author":6,"date":547,"category":509,"localeGroup":548},"\u002Fguides\u002Fpaper-view-distance-vs-simulation-distance","View Distance vs Simulation Distance: Safe Starting Values for Paper","Paper exposes view-distance and simulation-distance separately, which makes them one of the safest first levers for performance tuning. This guide explains what each setting changes and which starting values are sensible.","2026-04-02","paper-view-distance-simulation-distance",{"path":550,"title":551,"description":552,"excerpt":412,"author":6,"date":553,"category":509,"localeGroup":554},"\u002Fguides\u002Fspark-profiler-paper-docker","Use Spark Profiler to Find Minecraft Lag in Paper and Docker","Paper bundles Spark starting with 1.21, which makes it the preferred profiler for diagnosing lag. This guide shows how to capture a useful report and how to read the first findings without guesswork.","2026-04-01","spark-profiler-paper-docker",{"path":556,"title":557,"description":558,"excerpt":412,"author":6,"date":559,"category":509,"localeGroup":560},"\u002Fguides\u002Fminecraft-server-lag-tps-mspt-cant-keep-up","Minecraft Server Lag Explained: TPS, MSPT, and 'Can’t Keep Up'","This guide explains what TPS and MSPT actually mean, why “Can’t keep up” appears in the console, and which checks help you separate CPU, chunk, entity, and plugin problems quickly.","2026-03-31","minecraft-lag-tps-mspt",{"path":562,"title":563,"description":564,"excerpt":412,"author":6,"date":565,"category":477,"localeGroup":566},"\u002Fguides\u002Ffix-permission-denied-itzg-docker-minecraft-server","Fix Permission Denied in itzg\u002Fminecraft-server with UID\u002FGID and Bind Mounts","Seeing permission errors in \u002Fdata or files that Docker cannot write? This guide explains why itzg\u002Fminecraft-server defaults to UID 1000:GID 1000 and how to fix ownership safely.","2026-03-09","itzg-permission-denied",{"path":568,"title":569,"description":570,"excerpt":412,"author":6,"date":571,"category":477,"localeGroup":572},"\u002Fguides\u002Fadminister-docker-minecraft-server-rcon-console","Administer a Docker Minecraft Server Safely with RCON and Console Access","Need to op a player, manage the whitelist, or stop the server cleanly? This guide shows how to use RCON and interactive console access with itzg\u002Fminecraft-server without exposing extra risk.","2026-03-08","docker-minecraft-rcon-console",{"path":574,"title":575,"description":576,"excerpt":412,"author":6,"date":577,"category":466,"localeGroup":578},"\u002Fguides\u002Fminecraft-domain-without-port-srv-record","Minecraft Domain Without a Port: How to Set Up an SRV Record","Want players to join via example.com instead of an IP and port? This guide shows how SRV records work for Minecraft Java Edition and how to configure them correctly.","2026-03-07","minecraft-srv-record-domain",{"path":580,"title":581,"description":582,"excerpt":412,"author":6,"date":583,"category":466,"localeGroup":584},"\u002Fguides\u002Fopen-port-25565-minecraft-server-hetzner-linux","How to Open Port 25565 for a Minecraft Server on Hetzner and Linux","Players cannot join even though the container is running? This guide checks Docker port publishing, the Linux firewall path, and the Hetzner Cloud Firewall without relying on misleading UFW assumptions.","2026-03-05","open-port-25565-hetzner-linux",{"path":586,"title":587,"description":588,"excerpt":412,"author":6,"date":589,"category":409,"localeGroup":590},"\u002Fguides\u002Fdetermining-correct-java-version-for-operating-minecraft-server","Determining the Correct Java Version for Operating a Minecraft Server","If you want to set up a Minecraft server, you may encounter an error message related to the Java version when starting the server. In this article, you will learn how to determine the correct Java version for your Minecraft server.","2025-01-31","java-version-minecraft-server",{"path":592,"title":593,"description":594,"excerpt":412,"author":6,"date":595,"category":409,"localeGroup":596},"\u002Fguides\u002Fminecraft-server-with-docker-on-hetzner-cloud","Setting up a Minecraft Server on a Hetzner Cloud Server with Docker Compose","In this article, we will show you how to set up a server for Minecraft: Java Edition on a Hetzner Cloud server. We will go through the steps of creating the cloud server, installing Debian, setting up an SSH key, and configuring Docker Compose for easy server management.","2025-01-28","hetzner-docker-setup",[598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,592,556,550,544,538,532,473,480,486,491,496,586,501,506,512,429,458,463,468,580,574,568,562,516,522,527],"\u002Fde\u002Fguides\u002Fminecraft-server-with-docker-on-hetzner-cloud","\u002Fde\u002Fguides\u002Fminecraft-server-lag-tps-mspt-cant-keep-up","\u002Fde\u002Fguides\u002Fspark-profiler-paper-docker","\u002Fde\u002Fguides\u002Fpaper-view-distance-vs-simulation-distance","\u002Fde\u002Fguides\u002Fpaper-vs-vanilla-vs-fabric-vs-forge","\u002Fde\u002Fguides\u002Fminecraft-crossplay-geyser-floodgate","\u002Fde\u002Fguides\u002Fupdate-minecraft-server-docker-compose-rollback","\u002Fde\u002Fguides\u002Finstall-paper-plugins-docker-compose","\u002Fde\u002Fguides\u002Fmodrinth-modpack-itzg-minecraft-server-docker","\u002Fde\u002Fguides\u002Fmigrate-existing-minecraft-server-to-docker","\u002Fde\u002Fguides\u002Fminecraft-container-keeps-restarting-docker-compose","\u002Fde\u002Fguides\u002Fdetermining-correct-java-version-for-operating-minecraft-server","\u002Fde\u002Fguides\u002Fcurseforge-modpack-itzg-minecraft-server-docker","\u002Fde\u002Fguides\u002Fminecraft-docker-exit-code-137-oomkilled","\u002Fde\u002Fguides\u002Fsecure-minecraft-server-docker-compose","\u002Fde\u002Fguides\u002Fvelocity-proxy-docker-compose-itzg-mc-proxy","\u002Fde\u002Fguides\u002Fvelocity-modern-forwarding-paper-docker","\u002Fde\u002Fguides\u002Fvelocity-proxy-cannot-connect-backend-docker","\u002Fde\u002Fguides\u002Fgeyser-floodgate-velocity-proxy-docker","\u002Fde\u002Fguides\u002Fopen-port-25565-minecraft-server-hetzner-linux","\u002Fde\u002Fguides\u002Fminecraft-domain-without-port-srv-record","\u002Fde\u002Fguides\u002Fadminister-docker-minecraft-server-rcon-console","\u002Fde\u002Fguides\u002Ffix-permission-denied-itzg-docker-minecraft-server","\u002Fde\u002Fguides\u002Fset-up-automatic-minecraft-backups-docker-mc-backup","\u002Fde\u002Fguides\u002Frestore-minecraft-world-backup-docker","\u002Fde\u002Fguides\u002Fhetzner-snapshots-minecraft-world-volumes",1786636763802]