minectl uses YAML manifest files to describe Minecraft servers and proxies. You can create these manually or use the interactive wizard.
Use the wizard to create configuration files interactively:
minectl wizardYou need a MinecraftServer manifest file to describe the underlying compute instance and the Minecraft Server:
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true|false
server:
cloud: "civo|scaleway|do|hetzner|akamai|ovh|gce|vultr|azure|oci|aws|vexxhost|fuga|multipass|exoscale"
region: "region see cloud provider for details eg. fra1"
size: "see cloud provider docs for details eg. g3.large"
volumeSize: 100
ssh:
port: 22 # or your custom port
publickeyfile: "<path to ssh public key>.pub"
fail2ban:
bantime: "<ban time in seconds>"
maxretry: "<max retry>"
port: "25565|19132 are the defaults for tcp/udp"
spot: true|false
arm: true|false
minecraft:
java:
openjdk: "8|16 use jdk 8 for <1.17 java server version"
xmx: 2G
xms: 2G
options:
- "-XX:+UseG1GC"
- "-XX:+ParallelRefProcEnabled"
- "-XX:MaxGCPauseMillis=200"
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: "java|bedrock|nukkit|powernukkit|craftbukkit|fabric|forge|papermc|spigot|purpur"
version: "<version>"
eula: true
properties: |
level-seed=minectlrocks
broadcast-rcon-to-ops=true
...Attention: Please lookup the correct service size if you are setting the
armattribute totrue.
Example configs are available in the config folder for all supported cloud providers and Minecraft editions.
If you want to start a server with a Minecraft Proxy, you need to define a MinecraftProxy manifest:
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftProxy
metadata:
name: minecraft-proxy
spec:
server:
cloud: civo|scaleway|do|hetzner|akamai|ovh|gce|vultr|azure|oci|aws|vexxhost|fuga|multipass|exoscale
region: <cloud provider region>
size: <cloud provider plan>
ssh:
port: 22 # or your custom port
publickeyfile: "<path to ssh public key>.pub"
fail2ban:
bantime: "<ban time in seconds>"
maxretry: "<max retry>"
port: <server port>
spot: true|false
arm: true|false
proxy:
java:
openjdk: <jdk version>
xmx: <xmx memory for the vm>
xms: <xms memory for the vm>
options:
- "-XX:+UseG1GC"
- "-XX:+ParallelRefProcEnabled"
- "-XX:MaxGCPauseMillis=200"
rcon:
password: <RCON server password>
port: <RCON server port>
enabled: true|false
broadcast: true|false
type: "bungeecord|waterfall|velocity"
version: <version>When you want to run a Minecraft server on a spot instance, use:
spec:
server:
spot: trueThis is currently supported by AWS, Azure, and GCP.
You need to explicitly set the EULA property in the MinecraftServer manifest to indicate your agreement with the Minecraft End User License:
spec:
minecraft:
eula: truespec:
server:
ssh:
port: 22 # Custom SSH port (default: 22)
publickeyfile: "~/.ssh/id_rsa.pub" # Path to SSH public key
fail2ban:
bantime: "600" # Ban time in seconds
maxretry: "5" # Max failed attempts before banYou can also inline the public key content:
spec:
server:
ssh:
publickey: "ssh-rsa AAAAB3 ... xxx"Configure JVM settings for optimal performance:
spec:
minecraft:
java:
openjdk: "17"
xmx: 4G
xms: 4G
options:
- "-XX:+UseG1GC"
- "-XX:+ParallelRefProcEnabled"
- "-XX:MaxGCPauseMillis=200"
- "-XX:+UnlockExperimentalVMOptions"
- "-XX:+DisableExplicitGC"
- "-XX:+AlwaysPreTouch"
- "-XX:G1NewSizePercent=30"
- "-XX:G1MaxNewSizePercent=40"
- "-XX:G1HeapRegionSize=8M"
- "-XX:G1ReservePercent=20"
- "-XX:G1HeapWastePercent=5"
- "-XX:G1MixedGCCountTarget=4"
- "-XX:InitiatingHeapOccupancyPercent=15"
- "-XX:G1MixedGCLiveThresholdPercent=90"
- "-XX:G1RSetUpdatingPauseTimePercent=5"
- "-XX:SurvivorRatio=32"
- "-XX:+PerfDisableSharedMem"
- "-XX:MaxTenuringThreshold=1"Configure Minecraft server properties directly in the manifest:
spec:
minecraft:
properties: |
level-seed=minectlrocks
broadcast-rcon-to-ops=true
view-distance=10
max-players=20
difficulty=normal
gamemode=survival
pvp=true
spawn-monsters=true
spawn-animals=true