mirror of
https://github.com/AlexMacocian/Docker-Minecraft-Paper.git
synced 2026-07-15 15:19:32 +00:00
Add project files.
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
backup/
|
||||||
|
logs/
|
||||||
|
plugins/
|
||||||
|
.vs/
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
$containerName = "minecraft-server"
|
||||||
|
$backupDir = "$(pwd)/backup"
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $backupDir)) {
|
||||||
|
Write-Host "Creating backup directory: $backupDir"
|
||||||
|
New-Item -ItemType Directory -Path $backupDir
|
||||||
|
}
|
||||||
|
|
||||||
|
$container = docker ps -a --filter "name=$containerName" --format "{{.ID}}"
|
||||||
|
if (-not $container) {
|
||||||
|
Write-Host "The container $containerName does not exist. Cannot proceed with backup."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
$itemsToBackup = @(
|
||||||
|
"/minecraft/banned-ips.json",
|
||||||
|
"/minecraft/banned-players.json",
|
||||||
|
"/minecraft/bukkit.yml",
|
||||||
|
"/minecraft/help.yml",
|
||||||
|
"/minecraft/commands.yml",
|
||||||
|
"/minecraft/ops.json",
|
||||||
|
"/minecraft/permissions.yml",
|
||||||
|
"/minecraft/server.properties",
|
||||||
|
"/minecraft/spigot.yml",
|
||||||
|
"/minecraft/usercache.json",
|
||||||
|
"/minecraft/whitelist.json",
|
||||||
|
"/minecraft/world",
|
||||||
|
"/minecraft/world_nether",
|
||||||
|
"/minecraft/world_the_end"
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($item in $itemsToBackup) {
|
||||||
|
$itemName = [System.IO.Path]::GetFileName($item)
|
||||||
|
$destination = "$backupDir/$itemName"
|
||||||
|
Write-Host "Backing up $item to $destination"
|
||||||
|
if ($item -like "*/world*" -or $item -eq "/minecraft/world" -or $item -eq "/minecraft/world_nether" -or $item -eq "/minecraft/world_the_end") {
|
||||||
|
Write-Host "Backing up directory $item"
|
||||||
|
docker cp "$($containerName):$($item)" "$($backupDir)/"
|
||||||
|
} else {
|
||||||
|
Write-Host "Backing up file $item"
|
||||||
|
docker cp "$($containerName):$($item)" "$($destination)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Backup completed successfully."
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
$containerName = "minecraft-server"
|
||||||
|
$imageName = "minecraft-spigot:latest"
|
||||||
|
|
||||||
|
$container = docker ps -a --filter "name=$containerName" --format "{{.ID}}"
|
||||||
|
if ($container) {
|
||||||
|
Write-Host "Stopping existing container: $containerName"
|
||||||
|
docker stop $containerName
|
||||||
|
Write-Host "Removing existing container: $containerName"
|
||||||
|
docker rm $containerName
|
||||||
|
} else {
|
||||||
|
Write-Host "No existing container found with name: $containerName"
|
||||||
|
}
|
||||||
|
|
||||||
|
$image = docker images --filter "reference=$imageName" --format "{{.ID}}"
|
||||||
|
if ($image) {
|
||||||
|
Write-Host "Removing existing image: $imageName"
|
||||||
|
docker rmi $imageName
|
||||||
|
} else {
|
||||||
|
Write-Host "No existing image found with name: $imageName"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Building new image: $imageName"
|
||||||
|
docker build -t $imageName .
|
||||||
|
|
||||||
|
Write-Host "Build completed successfully!"
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
FROM ubuntu:latest AS builder
|
||||||
|
|
||||||
|
# Install Spigot dependencies
|
||||||
|
# This installs normal dependencies, sets up zulu apt repository and installs zulu21-jdk
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
bash \
|
||||||
|
gnupg \
|
||||||
|
ca-certificates \
|
||||||
|
&& curl -s https://repos.azul.com/azul-repo.key | gpg --dearmor -o /usr/share/keyrings/azul.gpg \
|
||||||
|
&& echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | tee /etc/apt/sources.list.d/zulu.list \
|
||||||
|
&& apt-get update && apt-get install -y zulu21-jdk
|
||||||
|
|
||||||
|
WORKDIR /minecraft
|
||||||
|
|
||||||
|
# Setup spigot.jar
|
||||||
|
# This downloads BuildTools.jar and uses that to build a new spigot.jar
|
||||||
|
RUN mkdir buildtools \
|
||||||
|
&& cd buildtools \
|
||||||
|
&& wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar \
|
||||||
|
&& java -jar BuildTools.jar --rev latest \
|
||||||
|
&& mv spigot-*.jar /minecraft/spigot.jar \
|
||||||
|
&& rm -rf /minecraft/buildtools
|
||||||
|
|
||||||
|
# Accept EULA
|
||||||
|
RUN echo "eula=true" > /minecraft/eula.txt
|
||||||
|
|
||||||
|
FROM alpine:latest AS runner
|
||||||
|
|
||||||
|
COPY --from=builder /minecraft /minecraft
|
||||||
|
|
||||||
|
RUN apk add --no-cache openjdk21-jre eudev
|
||||||
|
|
||||||
|
WORKDIR /minecraft
|
||||||
|
|
||||||
|
# Move spigot to server directory
|
||||||
|
EXPOSE 25565
|
||||||
|
|
||||||
|
CMD /bin/sh -c "java -Xmx2G -Xms512M -jar /minecraft/spigot.jar nogui > /minecraft/logs/output.log 2> /minecraft/logs/error.log"
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# Docker image for minecraft servers
|
||||||
|
|
||||||
|
**Requires docker and powershell**
|
||||||
|
|
||||||
|
## First run
|
||||||
|
|
||||||
|
- Run `Build.ps1` to build the image
|
||||||
|
- Run `mkdir plugins`
|
||||||
|
- Copy your plugins into `plugins` folder
|
||||||
|
- Run `Start.ps1`
|
||||||
|
- Run `Backup.ps1`
|
||||||
|
- Run `Stop.ps1`
|
||||||
|
- Edit your server files in the `backup` directory. *Edit stuff such as password, commands, etc.* **The container needs to exist for this to work**
|
||||||
|
- Run `Restore.ps1` to restore your modified files into the container. **The container needs to run for this to work**
|
||||||
|
- Run `Start.ps1`
|
||||||
|
- Check `logs` folder for logs. `output.log` and `error.log` contain the *stdout* and *stderr* of the java process
|
||||||
|
|
||||||
|
## Script glossary
|
||||||
|
|
||||||
|
### `Build.ps1` to build the docker image
|
||||||
|
If the server is currently running, it will be stopped and rebuilt. **Any changes in the docker container will be lost. Backup your files before building**
|
||||||
|
### `Start.ps1` to start the server
|
||||||
|
### `Stop.ps1` to stop the server
|
||||||
|
### `Backup.ps1` to create a backup of the minecraft files
|
||||||
|
- If the container does not exist, backup will fail
|
||||||
|
- If the container exists, your files will be placed in `/backup/` folder
|
||||||
|
### `Restore.ps1` to restore your minecraft files onto the server
|
||||||
|
- If the container does not exist, restore will fail
|
||||||
|
- If the container exists, your files will be restored from `/backup/` folder to the server container
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
$containerName = "minecraft-server"
|
||||||
|
$backupDir = "$(pwd)/backup"
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $backupDir)) {
|
||||||
|
Write-Host "Backup directory does not exist: $backupDir"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
$container = docker ps -a --filter "name=$containerName" --format "{{.ID}}"
|
||||||
|
if (-not $container) {
|
||||||
|
Write-Host "The container $containerName does not exist. Cannot proceed with restore."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
$container = docker ps --filter "name=$containerName" --filter "status=running" --format "{{.ID}}"
|
||||||
|
if ($container) {
|
||||||
|
Write-Host "Stopping the running container: $containerName"
|
||||||
|
docker stop $containerName
|
||||||
|
} else {
|
||||||
|
Write-Host "The container $containerName is not running."
|
||||||
|
}
|
||||||
|
|
||||||
|
$itemsToRestore = @(
|
||||||
|
"banned-ips.json",
|
||||||
|
"banned-players.json",
|
||||||
|
"bukkit.yml",
|
||||||
|
"help.yml",
|
||||||
|
"commands.yml",
|
||||||
|
"ops.json",
|
||||||
|
"permissions.yml",
|
||||||
|
"server.properties",
|
||||||
|
"spigot.yml",
|
||||||
|
"usercache.json",
|
||||||
|
"whitelist.json",
|
||||||
|
"world",
|
||||||
|
"world_nether",
|
||||||
|
"world_the_end"
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($item in $itemsToRestore) {
|
||||||
|
$source = "$backupDir/$item"
|
||||||
|
$destination = "/minecraft/$item"
|
||||||
|
Write-Host "Restoring $item from $source to $destination"
|
||||||
|
if (Test-Path $source) {
|
||||||
|
if ((Get-Item $source).PSIsContainer) {
|
||||||
|
Write-Host "Restoring directory $item"
|
||||||
|
docker cp "$source" "$($containerName):/minecraft"
|
||||||
|
} else {
|
||||||
|
Write-Host "Restoring file $item"
|
||||||
|
docker cp "$source" "$($containerName):$destination"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "File or directory $item does not exist in the backup."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Starting the container: $containerName"
|
||||||
|
docker start $containerName
|
||||||
|
|
||||||
|
Write-Host "Restore and restart completed successfully."
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
$containerName = "minecraft-server"
|
||||||
|
$imageName = "minecraft-spigot:latest"
|
||||||
|
|
||||||
|
$container = docker ps -a --filter "name=$containerName" --format "{{.ID}}"
|
||||||
|
if ($container) {
|
||||||
|
$isRunning = docker ps --filter "name=$containerName" --filter "status=running" --format "{{.ID}}"
|
||||||
|
if ($isRunning) {
|
||||||
|
Write-Host "The container '$containerName' is already running."
|
||||||
|
} else {
|
||||||
|
Write-Host "The container '$containerName' exists but is not running. Starting it..."
|
||||||
|
docker start $containerName
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "The container '$containerName' does not exist. Creating it..."
|
||||||
|
docker create --name $containerName `
|
||||||
|
-p 25565:25565 `
|
||||||
|
-v "$(pwd)/plugins:/minecraft/plugins" `
|
||||||
|
-v "$(pwd)/logs:/minecraft/logs" `
|
||||||
|
--restart unless-stopped `
|
||||||
|
minecraft-spigot
|
||||||
|
|
||||||
|
Write-Host "Starting the container '$containerName'..."
|
||||||
|
docker start $containerName
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Server running at 25565..."
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
$containerName = "minecraft-server"
|
||||||
|
$container = docker ps -a --filter "name=$containerName" --format "{{.ID}}"
|
||||||
|
if ($container) {
|
||||||
|
$isRunning = docker ps --filter "name=$containerName" --filter "status=running" --format "{{.ID}}"
|
||||||
|
if ($isRunning) {
|
||||||
|
Write-Host "The container '$containerName' is running. Stopping it..."
|
||||||
|
docker stop $containerName
|
||||||
|
} else {
|
||||||
|
Write-Host "The container '$containerName' exists but is not running."
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "No container found with name: $containerName"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Stopped"
|
||||||
Reference in New Issue
Block a user