first commit
This commit is contained in:
commit
c03877d469
26
docker-compose.yml
Normal file
26
docker-compose.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mc-server-1:
|
||||||
|
image: mc:cluster
|
||||||
|
container_name: mc-server-1
|
||||||
|
environment:
|
||||||
|
- CONNECTION_STRING=8d4637169e8c7a86fd6cbfe5447af3c36746acf8f30e6c0717e7c04df8d4e1a3cf5e36dac34304f278aaed127169fa291075758aca7ddd001cbed444cd2b0f697a
|
||||||
|
|
||||||
|
mc-server-2:
|
||||||
|
image: mc:cluster
|
||||||
|
container_name: mc-server-2
|
||||||
|
environment:
|
||||||
|
- CONNECTION_STRING=42f6766a67ad90a4743fed463e8eac8b9009f6904dc45444b6ae71340eac978a694b84b20d7bf20fa69039216ca35fd8b0ae1a60afc11f5069418f2c8dc7d8490f
|
||||||
|
|
||||||
|
mc-server-3:
|
||||||
|
image: mc:cluster
|
||||||
|
container_name: mc-server-3
|
||||||
|
environment:
|
||||||
|
- CONNECTION_STRING=8a04374263b622a53002e6043bc0347095e717d2e9b39e39ce2646a9d84a2e13d0b3c125faf008586104aa5e622f6b7c2d5d4dddef5afb63fd0240f13c72308da5
|
||||||
|
|
||||||
|
mc-server-4:
|
||||||
|
image: mc:cluster
|
||||||
|
container_name: mc-server-4
|
||||||
|
environment:
|
||||||
|
- CONNECTION_STRING=8771ce498444a9dc50f27893ee3aaca4ea97c62662515ba510224306b1adeeeec7c91133f055d574a42c82e98d5225edbd408258f46d28c53a6856aa94bb0d5b36
|
20
holesail-connector/Dockerfile
Normal file
20
holesail-connector/Dockerfile
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Base image
|
||||||
|
FROM ubuntu:latest
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install necessary packages and npm
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y curl build-essential && \
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
||||||
|
apt-get install -y nodejs && \
|
||||||
|
npm install -g holesail && npm i pm2 -g \
|
||||||
|
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy the PM2 setup script
|
||||||
|
COPY pm2-setup.sh /usr/local/bin/pm2-setup.sh
|
||||||
|
RUN chmod +x /usr/local/bin/pm2-setup.sh
|
||||||
|
|
||||||
|
# Run the PM2 setup script
|
||||||
|
CMD ["/usr/local/bin/pm2-setup.sh"]
|
19
holesail-connector/pm2-setup.sh
Normal file
19
holesail-connector/pm2-setup.sh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Define connection strings and ports
|
||||||
|
declare -A connections
|
||||||
|
connections=(
|
||||||
|
["8d4637169e8c7a86fd6cbfe5447af3c36746acf8f30e6c0717e7c04df8d4e1a3cf5e36dac34304f278aaed127169fa291075758aca7ddd001cbed444cd2b0f697a"]=8001
|
||||||
|
["42f6766a67ad90a4743fed463e8eac8b9009f6904dc45444b6ae71340eac978a694b84b20d7bf20fa69039216ca35fd8b0ae1a60afc11f5069418f2c8dc7d8490f"]=8002
|
||||||
|
["8a04374263b622a53002e6043bc0347095e717d2e9b39e39ce2646a9d84a2e13d0b3c125faf008586104aa5e622f6b7c2d5d4dddef5afb63fd0240f13c72308da5"]=8003
|
||||||
|
["8771ce498444a9dc50f27893ee3aaca4ea97c62662515ba510224306b1adeeeec7c91133f055d574a42c82e98d5225edbd408258f46d28c53a6856aa94bb0d5b36"]=8004
|
||||||
|
)
|
||||||
|
|
||||||
|
# Launch PM2 processes
|
||||||
|
for connection in "${!connections[@]}"; do
|
||||||
|
port=${connections[$connection]}
|
||||||
|
pm2 start holesail --name "holesail-$port" -- "$connection" --host 0.0.0.0 --port "$port"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Keep the container running
|
||||||
|
pm2-runtime start all
|
79
mc-cluster-image/Dockerfile
Normal file
79
mc-cluster-image/Dockerfile
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
FROM ubuntu:latest
|
||||||
|
|
||||||
|
# Update OS and install deps
|
||||||
|
RUN apt update && apt clean && apt upgrade -y
|
||||||
|
RUN apt install -y curl apt-utils sudo curl python3 python-is-python3 git wget nano openssh-server apt-transport-https zip
|
||||||
|
|
||||||
|
# Get JDK Ready
|
||||||
|
RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc
|
||||||
|
RUN echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
|
||||||
|
RUN cat /etc/apt/sources.list.d/adoptium.list
|
||||||
|
RUN sudo apt-get update
|
||||||
|
|
||||||
|
RUN apt update
|
||||||
|
|
||||||
|
# Install memory safe JDK
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt install temurin-21-jdk -y
|
||||||
|
|
||||||
|
# Download fabric server
|
||||||
|
# This needs to be changed to the version you wish to support.
|
||||||
|
RUN mkdir -vp /home/mc
|
||||||
|
RUN mkdir -vp /home/mc/minecraft
|
||||||
|
|
||||||
|
#Auto Accept EULA for MC
|
||||||
|
COPY eula /home/mc/minecraft/eula.txt
|
||||||
|
COPY server.properties /home/mc/minecraft/server.properties
|
||||||
|
# Add a user
|
||||||
|
RUN useradd mc
|
||||||
|
# Let user use Bash
|
||||||
|
RUN usermod --shell /bin/bash mc
|
||||||
|
# Provide users ownership
|
||||||
|
RUN chown -R mc:mc /home/mc
|
||||||
|
|
||||||
|
#COPY mod manager installer
|
||||||
|
COPY mod-manager-installer.sh /var/mod-manager-installer.sh
|
||||||
|
RUN chmod +x /var/mod-manager-installer.sh
|
||||||
|
|
||||||
|
COPY connection_manager.js /usr/bin/connections
|
||||||
|
RUN chmod +x /usr/bin/connections
|
||||||
|
COPY connections.json /var/connections.json
|
||||||
|
RUN ln -s /usr/bin/connections /usr/bin/con
|
||||||
|
|
||||||
|
ENV PATH="/usr/bin:$PATH"
|
||||||
|
|
||||||
|
|
||||||
|
RUN apt-get install -y ca-certificates curl gnupg
|
||||||
|
RUN sudo mkdir -p /etc/apt/keyrings
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
ENV NODE_MAJOR=18
|
||||||
|
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install nodejs -y
|
||||||
|
RUN npm install -g holesail
|
||||||
|
|
||||||
|
COPY pm2 /var/tools/pm2
|
||||||
|
COPY scripts /var/tools/scripts
|
||||||
|
|
||||||
|
COPY get_latest_fabric_version.js /var/tools/scripts
|
||||||
|
|
||||||
|
RUN cd /var/tools/scripts && npm i axios
|
||||||
|
|
||||||
|
RUN data=$(node /var/tools/scripts/get_latest_fabric_version.js 1.21.1) && \
|
||||||
|
echo "Download URL: $data" && \
|
||||||
|
wget -O /home/mc/minecraft/server.jar "$data"
|
||||||
|
|
||||||
|
|
||||||
|
RUN chmod +x -R /var/tools
|
||||||
|
|
||||||
|
# Install PM2
|
||||||
|
RUN npm install pm2 -g
|
||||||
|
|
||||||
|
|
||||||
|
# Copy over start.sh to allow for backround run
|
||||||
|
COPY start.sh /start.sh
|
||||||
|
RUN chmod +x /start.sh
|
||||||
|
|
||||||
|
# Set root pass
|
||||||
|
RUN echo 'root:noshallpass' | chpasswd
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/bash", "/start.sh"]
|
24
mc-cluster-image/connection_manager.js
Normal file
24
mc-cluster-image/connection_manager.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/node
|
||||||
|
const { execSync } = require('child_process');
|
||||||
|
const port = 25565; // Fixed port
|
||||||
|
const connectionString = process.env.CONNECTION_STRING;
|
||||||
|
|
||||||
|
if (!connectionString) {
|
||||||
|
console.error("Error: CONNECTION_STRING environment variable is not set.");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Starting connection with the following details:`);
|
||||||
|
console.log(`Port: ${port}`);
|
||||||
|
console.log(`Connection String: ${connectionString}`);
|
||||||
|
|
||||||
|
// Start the connection using PM2
|
||||||
|
const pm2cmd = `pm2 start holesail --name holesail_connection -- --live ${port} --connector "${connectionString}"`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
execSync(pm2cmd, { stdio: 'inherit' });
|
||||||
|
console.log(`Connection started successfully on port ${port} using PM2.`);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Error starting connection: ${err.message}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
0
mc-cluster-image/connections.json
Normal file
0
mc-cluster-image/connections.json
Normal file
3
mc-cluster-image/eula
Normal file
3
mc-cluster-image/eula
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
|
||||||
|
#Fri Jun 16 20:59:19 GMT 2023
|
||||||
|
eula=true
|
48
mc-cluster-image/get_latest_fabric_version.js
Normal file
48
mc-cluster-image/get_latest_fabric_version.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
// Function to get the latest Fabric download URL
|
||||||
|
async function getLatestFabricDownloadURL(gameVersion) {
|
||||||
|
try {
|
||||||
|
// Fetch the loader versions for the given game version
|
||||||
|
const loaderResponse = await axios.get(`https://meta.fabricmc.net/v2/versions/loader/${gameVersion}`);
|
||||||
|
const loaderVersions = loaderResponse.data;
|
||||||
|
|
||||||
|
if (loaderVersions.length === 0) {
|
||||||
|
throw new Error('No loader versions found for this game version');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the latest loader version details (assuming the first is the latest)
|
||||||
|
const latestLoader = loaderVersions[0].loader.version;
|
||||||
|
|
||||||
|
// Fetch the installer versions
|
||||||
|
const installerResponse = await axios.get('https://meta.fabricmc.net/v2/versions/installer');
|
||||||
|
const installerVersions = installerResponse.data;
|
||||||
|
|
||||||
|
if (installerVersions.length === 0) {
|
||||||
|
throw new Error('No installer versions found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the latest installer version (assuming the first is the latest)
|
||||||
|
const latestInstaller = installerVersions[0].version;
|
||||||
|
|
||||||
|
// Construct the download URL
|
||||||
|
const downloadURL = `https://meta.fabricmc.net/v2/versions/loader/${gameVersion}/${latestLoader}/${latestInstaller}/server/jar`;
|
||||||
|
|
||||||
|
console.log(downloadURL);
|
||||||
|
return downloadURL;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching Fabric versions:', error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the game version from command line arguments
|
||||||
|
const gameVersion = process.argv[2];
|
||||||
|
|
||||||
|
// Check if game version is provided
|
||||||
|
if (!gameVersion) {
|
||||||
|
console.error('Please provide a game version as an argument');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the function with the provided game version
|
||||||
|
getLatestFabricDownloadURL(gameVersion);
|
91
mc-cluster-image/mod-manager-installer.sh
Normal file
91
mc-cluster-image/mod-manager-installer.sh
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
MIN_NODE_VERSION=12
|
||||||
|
DOWNLOAD_DIR="/tmp/mod-manager-install"
|
||||||
|
INSTALL_DIR="/usr/local/lib/mod-manager"
|
||||||
|
BINARY_PATH="/usr/bin/mod-manager"
|
||||||
|
CYAN="\033[1;96m"
|
||||||
|
RED="\033[0;91m"
|
||||||
|
GREEN="\033[0;92m"
|
||||||
|
RESET='\033[0m'
|
||||||
|
|
||||||
|
print () {
|
||||||
|
echo -e "$1 $2 $RESET"
|
||||||
|
}
|
||||||
|
|
||||||
|
info () {
|
||||||
|
print "$CYAN" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
print "$RED" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
success() {
|
||||||
|
print "$GREEN" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]
|
||||||
|
then
|
||||||
|
error "This script must be ran as root. Please use sudo."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$DOWNLOAD_DIR" || exit
|
||||||
|
mkdir -p "$DOWNLOAD_DIR" || exit
|
||||||
|
|
||||||
|
# Verify compatible version of node is installed
|
||||||
|
info "Verifying node verison..."
|
||||||
|
NODE_VERSION_STR=$(node --version)
|
||||||
|
if [[ "$?" -eq 127 ]]
|
||||||
|
then
|
||||||
|
error "Node does not appear to be installed. Please install Node version $MIN_NODE_VERSION or higher"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
npm --version
|
||||||
|
if [[ "$?" -eq 127 ]]
|
||||||
|
then
|
||||||
|
error "Npm does not appear to be installed. Please install npm and re run the installer"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
NODE_VERSION=$( (echo $NODE_VERSION_STR | sed 's/\..*//') | sed "s/v//")
|
||||||
|
if [[ "$NODE_VERSION" -ge "$MIN_NODE_VERSION" ]]
|
||||||
|
then
|
||||||
|
success "A version of node greater than $MIN_NODE_VERSION is installed!"
|
||||||
|
else
|
||||||
|
error "A version of node greater than $MIN_NODE_VERSION is required. Please install it and re run this install script"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download source files
|
||||||
|
info "Downloading mod-manager source..."
|
||||||
|
git clone "https://git.ssh.surf/snxraven/mod-manager.git" "$DOWNLOAD_DIR" || exit
|
||||||
|
|
||||||
|
# Compile
|
||||||
|
info "Compiling..."
|
||||||
|
cd "$DOWNLOAD_DIR" || exit
|
||||||
|
npm install --save || exit
|
||||||
|
npm install -g @vercel/ncc || exit
|
||||||
|
npx tsc || exit
|
||||||
|
ncc build build/ts/mod-manager.js -o build/flat/ || exit
|
||||||
|
|
||||||
|
# Install
|
||||||
|
info "Installing..."
|
||||||
|
rm -rf "$INSTALL_DIR" || exit
|
||||||
|
mkdir -p "$INSTALL_DIR" || exit
|
||||||
|
|
||||||
|
cp -r build/flat/* "$INSTALL_DIR" || exit
|
||||||
|
|
||||||
|
# Creating executable
|
||||||
|
info "Creating executable..."
|
||||||
|
echo "node $INSTALL_DIR/index.js \$@" > $BINARY_PATH || exit
|
||||||
|
chmod +x $BINARY_PATH || exit
|
||||||
|
|
||||||
|
# Cleaning up
|
||||||
|
info "Cleaning up..."
|
||||||
|
rm -rf "$DOWNLOAD_DIR" || exit
|
||||||
|
|
||||||
|
success "Successfully installed mod-manager. Try mod-manager -h to learn more!"
|
11
mc-cluster-image/pm2/startServer.json
Normal file
11
mc-cluster-image/pm2/startServer.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"apps": [
|
||||||
|
{
|
||||||
|
"name": "MineCraft Server",
|
||||||
|
"cwd": "/home/mc/minecraft",
|
||||||
|
"script": "java -Xms1400M -Xmx4096M -jar server.jar --nogui",
|
||||||
|
"args": "",
|
||||||
|
"max_restarts": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
16
mc-cluster-image/scripts/init-mod-manager.sh
Normal file
16
mc-cluster-image/scripts/init-mod-manager.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd /home/mc/minecraft
|
||||||
|
|
||||||
|
flag_file="mod-manager.init"
|
||||||
|
|
||||||
|
if [ ! -f "$flag_file" ]; then
|
||||||
|
/var/mod-manager-installer.sh
|
||||||
|
echo "1.21.1" | mod-manager init
|
||||||
|
|
||||||
|
|
||||||
|
touch "$flag_file"
|
||||||
|
su - mc -c "pm2 restart all"
|
||||||
|
else
|
||||||
|
echo "Mod Manager is initialized already! Skipping..."
|
||||||
|
fi
|
58
mc-cluster-image/server.properties
Normal file
58
mc-cluster-image/server.properties
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#Minecraft server properties
|
||||||
|
#Fri Jun 16 21:24:32 GMT 2023
|
||||||
|
enable-jmx-monitoring=false
|
||||||
|
rcon.port=25575
|
||||||
|
level-seed=
|
||||||
|
gamemode=survival
|
||||||
|
enable-command-block=false
|
||||||
|
enable-query=false
|
||||||
|
generator-settings={}
|
||||||
|
enforce-secure-profile=false
|
||||||
|
level-name=world
|
||||||
|
motd=A Minecraft Server
|
||||||
|
query.port=25565
|
||||||
|
pvp=true
|
||||||
|
generate-structures=true
|
||||||
|
max-chained-neighbor-updates=1000000
|
||||||
|
difficulty=easy
|
||||||
|
network-compression-threshold=256
|
||||||
|
max-tick-time=60000
|
||||||
|
require-resource-pack=false
|
||||||
|
use-native-transport=true
|
||||||
|
max-players=20
|
||||||
|
online-mode=true
|
||||||
|
enable-status=true
|
||||||
|
allow-flight=false
|
||||||
|
initial-disabled-packs=
|
||||||
|
broadcast-rcon-to-ops=true
|
||||||
|
view-distance=10
|
||||||
|
server-ip=
|
||||||
|
resource-pack-prompt=
|
||||||
|
allow-nether=true
|
||||||
|
server-port=25565
|
||||||
|
enable-rcon=false
|
||||||
|
sync-chunk-writes=true
|
||||||
|
op-permission-level=4
|
||||||
|
prevent-proxy-connections=false
|
||||||
|
hide-online-players=false
|
||||||
|
resource-pack=
|
||||||
|
entity-broadcast-range-percentage=100
|
||||||
|
simulation-distance=10
|
||||||
|
rcon.password=
|
||||||
|
player-idle-timeout=0
|
||||||
|
force-gamemode=false
|
||||||
|
rate-limit=0
|
||||||
|
hardcore=false
|
||||||
|
white-list=false
|
||||||
|
broadcast-console-to-ops=true
|
||||||
|
spawn-npcs=true
|
||||||
|
spawn-animals=true
|
||||||
|
function-permission-level=2
|
||||||
|
initial-enabled-packs=vanilla
|
||||||
|
level-type=minecraft\:normal
|
||||||
|
text-filtering-config=
|
||||||
|
spawn-monsters=true
|
||||||
|
enforce-whitelist=false
|
||||||
|
spawn-protection=16
|
||||||
|
resource-pack-sha1=
|
||||||
|
max-world-size=29999984
|
20
mc-cluster-image/start.sh
Normal file
20
mc-cluster-image/start.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
su - mc -c "cd /var/tools/pm2 && pm2 start startServer.json"
|
||||||
|
|
||||||
|
# Init mod manager in 15 seconds, allow server to generate first
|
||||||
|
sleep 15 && sh /var/tools/scripts/init-mod-manager.sh
|
||||||
|
|
||||||
|
cd /
|
||||||
|
|
||||||
|
|
||||||
|
# Run the specified commands
|
||||||
|
con
|
||||||
|
|
||||||
|
chmod 755 /home/mc
|
||||||
|
chown mc:mc /home/mc/* -R
|
||||||
|
chown mc:mc /home/mc/minecraft/.mod-manager
|
||||||
|
|
||||||
|
# get log
|
||||||
|
su - mc -c "pm2 log"
|
||||||
|
|
||||||
|
tail -f /dev/null
|
62
velocity-image/Dockerfile
Normal file
62
velocity-image/Dockerfile
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
FROM ubuntu:latest
|
||||||
|
|
||||||
|
# Update OS and install deps
|
||||||
|
RUN apt update && apt clean && apt upgrade -y
|
||||||
|
RUN apt install -y curl apt-utils sudo curl python3 python-is-python3 git wget nano openssh-server apt-transport-https zip
|
||||||
|
|
||||||
|
# Get JDK Ready
|
||||||
|
RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc
|
||||||
|
RUN echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
|
||||||
|
RUN cat /etc/apt/sources.list.d/adoptium.list
|
||||||
|
RUN sudo apt-get update
|
||||||
|
|
||||||
|
RUN apt update
|
||||||
|
|
||||||
|
# Install memory safe JDK
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt install temurin-21-jdk -y
|
||||||
|
|
||||||
|
# Download fabric server
|
||||||
|
# This needs to be changed to the version you wish to support.
|
||||||
|
RUN mkdir -vp /home/mc
|
||||||
|
RUN mkdir -vp /home/mc/minecraft
|
||||||
|
|
||||||
|
# Add a user
|
||||||
|
RUN useradd mc
|
||||||
|
# Let user use Bash
|
||||||
|
RUN usermod --shell /bin/bash mc
|
||||||
|
# Provide users ownership
|
||||||
|
RUN chown -R mc:mc /home/mc
|
||||||
|
|
||||||
|
|
||||||
|
ENV PATH="/usr/bin:$PATH"
|
||||||
|
|
||||||
|
|
||||||
|
RUN apt-get install -y ca-certificates curl gnupg
|
||||||
|
RUN sudo mkdir -p /etc/apt/keyrings
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
ENV NODE_MAJOR=18
|
||||||
|
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install nodejs -y
|
||||||
|
RUN npm install -g holesail
|
||||||
|
|
||||||
|
COPY pm2 /var/tools/pm2
|
||||||
|
|
||||||
|
RUN wget -O /home/mc/minecraft/server.jar https://api.papermc.io/v2/projects/velocity/versions/3.4.0-SNAPSHOT/builds/454/downloads/velocity-3.4.0-SNAPSHOT-454.jar
|
||||||
|
|
||||||
|
|
||||||
|
RUN chmod +x -R /var/tools
|
||||||
|
|
||||||
|
# Install PM2
|
||||||
|
RUN npm install pm2 -g
|
||||||
|
|
||||||
|
COPY velocity.toml /home/mc/minecraft
|
||||||
|
|
||||||
|
# Copy over start.sh to allow for backround run
|
||||||
|
COPY start.sh /start.sh
|
||||||
|
RUN chmod +x /start.sh
|
||||||
|
|
||||||
|
# Set root pass
|
||||||
|
RUN echo 'root:noshallpass' | chpasswd
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/bash", "/start.sh"]
|
20
velocity-image/docker-compose.yml
Normal file
20
velocity-image/docker-compose.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
|
||||||
|
holesail:
|
||||||
|
build:
|
||||||
|
context: ../holesail-connector
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: holesail-connections
|
||||||
|
ports:
|
||||||
|
- "8001:8001"
|
||||||
|
- "8002:8002"
|
||||||
|
- "8003:8003"
|
||||||
|
- "8004:8004"
|
||||||
|
|
||||||
|
volicy-proxy:
|
||||||
|
image: velocity:proxy
|
||||||
|
container_name: volicy-proxy
|
||||||
|
ports:
|
||||||
|
- "25565"
|
||||||
|
|
3
velocity-image/eula
Normal file
3
velocity-image/eula
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
|
||||||
|
#Fri Jun 16 20:59:19 GMT 2023
|
||||||
|
eula=true
|
11
velocity-image/pm2/startServer.json
Normal file
11
velocity-image/pm2/startServer.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"apps": [
|
||||||
|
{
|
||||||
|
"name": "MineCraft Server Proxy",
|
||||||
|
"cwd": "/home/mc/minecraft",
|
||||||
|
"script": "java -Xms1G -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -jar server.jar",
|
||||||
|
"args": "",
|
||||||
|
"max_restarts": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
16
velocity-image/start.sh
Normal file
16
velocity-image/start.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
su - mc -c "cd /var/tools/pm2 && pm2 start startServer.json"
|
||||||
|
cd /
|
||||||
|
|
||||||
|
|
||||||
|
# Run the specified commands
|
||||||
|
con
|
||||||
|
|
||||||
|
chmod 755 /home/mc
|
||||||
|
chown mc:mc /home/mc/* -R
|
||||||
|
|
||||||
|
|
||||||
|
# get log
|
||||||
|
su - mc -c "pm2 log"
|
||||||
|
|
||||||
|
tail -f /dev/null
|
160
velocity-image/velocity.toml
Normal file
160
velocity-image/velocity.toml
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
# Config version. Do not change this
|
||||||
|
config-version = "2.7"
|
||||||
|
|
||||||
|
# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25565.
|
||||||
|
bind = "0.0.0.0:25565"
|
||||||
|
|
||||||
|
# What should be the MOTD? This gets displayed when the player adds your server to
|
||||||
|
# their server list. Only MiniMessage format is accepted.
|
||||||
|
motd = "<#09add3>A Velocity Server"
|
||||||
|
|
||||||
|
# What should we display for the maximum number of players? (Velocity does not support a cap
|
||||||
|
# on the number of players online.)
|
||||||
|
show-max-players = 500
|
||||||
|
|
||||||
|
# Should we authenticate players with Mojang? By default, this is on.
|
||||||
|
online-mode = true
|
||||||
|
|
||||||
|
# Should the proxy enforce the new public key security standard? By default, this is on.
|
||||||
|
force-key-authentication = true
|
||||||
|
|
||||||
|
# If client's ISP/AS sent from this proxy is different from the one from Mojang's
|
||||||
|
# authentication server, the player is kicked. This disallows some VPN and proxy
|
||||||
|
# connections but is a weak form of protection.
|
||||||
|
prevent-client-proxy-connections = false
|
||||||
|
|
||||||
|
# Should we forward IP addresses and other data to backend servers?
|
||||||
|
# Available options:
|
||||||
|
# - "none": No forwarding will be done. All players will appear to be connecting
|
||||||
|
# from the proxy and will have offline-mode UUIDs.
|
||||||
|
# - "legacy": Forward player IPs and UUIDs in a BungeeCord-compatible format. Use this
|
||||||
|
# if you run servers using Minecraft 1.12 or lower.
|
||||||
|
# - "bungeeguard": Forward player IPs and UUIDs in a format supported by the BungeeGuard
|
||||||
|
# plugin. Use this if you run servers using Minecraft 1.12 or lower, and are
|
||||||
|
# unable to implement network level firewalling (on a shared host).
|
||||||
|
# - "modern": Forward player IPs and UUIDs as part of the login process using
|
||||||
|
# Velocity's native forwarding. Only applicable for Minecraft 1.13 or higher.
|
||||||
|
player-info-forwarding-mode = "NONE"
|
||||||
|
|
||||||
|
# If you are using modern or BungeeGuard IP forwarding, configure a file that contains a unique secret here.
|
||||||
|
# The file is expected to be UTF-8 encoded and not empty.
|
||||||
|
forwarding-secret-file = "forwarding.secret"
|
||||||
|
|
||||||
|
# Announce whether or not your server supports Forge. If you run a modded server, we
|
||||||
|
# suggest turning this on.
|
||||||
|
#
|
||||||
|
# If your network runs one modpack consistently, consider using ping-passthrough = "mods"
|
||||||
|
# instead for a nicer display in the server list.
|
||||||
|
announce-forge = false
|
||||||
|
|
||||||
|
# If enabled (default is false) and the proxy is in online mode, Velocity will kick
|
||||||
|
# any existing player who is online if a duplicate connection attempt is made.
|
||||||
|
kick-existing-players = false
|
||||||
|
|
||||||
|
# Should Velocity pass server list ping requests to a backend server?
|
||||||
|
# Available options:
|
||||||
|
# - "disabled": No pass-through will be done. The velocity.toml and server-icon.png
|
||||||
|
# will determine the initial server list ping response.
|
||||||
|
# - "mods": Passes only the mod list from your backend server into the response.
|
||||||
|
# The first server in your try list (or forced host) with a mod list will be
|
||||||
|
# used. If no backend servers can be contacted, Velocity won't display any
|
||||||
|
# mod information.
|
||||||
|
# - "description": Uses the description and mod list from the backend server. The first
|
||||||
|
# server in the try (or forced host) list that responds is used for the
|
||||||
|
# description and mod list.
|
||||||
|
# - "all": Uses the backend server's response as the proxy response. The Velocity
|
||||||
|
# configuration is used if no servers could be contacted.
|
||||||
|
ping-passthrough = "DISABLED"
|
||||||
|
|
||||||
|
# If not enabled (default is true) player IP addresses will be replaced by <ip address withheld> in logs
|
||||||
|
enable-player-address-logging = true
|
||||||
|
|
||||||
|
[servers]
|
||||||
|
# Configure your servers here. Each key represents the server's name, and the value
|
||||||
|
# represents the IP address of the server to connect to.
|
||||||
|
lobby = "127.0.0.1:8001"
|
||||||
|
factions = "127.0.0.1:8002"
|
||||||
|
minigames = "127.0.0.1:8003"
|
||||||
|
idk = "127.0.0.1:8004"
|
||||||
|
|
||||||
|
# In what order we should try servers when a player logs in or is kicked from a server.
|
||||||
|
try = [
|
||||||
|
"lobby"
|
||||||
|
]
|
||||||
|
|
||||||
|
[forced-hosts]
|
||||||
|
# Configure your forced hosts here.
|
||||||
|
"lobby.example.com" = [
|
||||||
|
"lobby"
|
||||||
|
]
|
||||||
|
"factions.example.com" = [
|
||||||
|
"factions"
|
||||||
|
]
|
||||||
|
"minigames.example.com" = [
|
||||||
|
"minigames"
|
||||||
|
]
|
||||||
|
|
||||||
|
[advanced]
|
||||||
|
# How large a Minecraft packet has to be before we compress it. Setting this to zero will
|
||||||
|
# compress all packets, and setting it to -1 will disable compression entirely.
|
||||||
|
compression-threshold = 256
|
||||||
|
|
||||||
|
# How much compression should be done (from 0-9). The default is -1, which uses the
|
||||||
|
# default level of 6.
|
||||||
|
compression-level = -1
|
||||||
|
|
||||||
|
# How fast (in milliseconds) are clients allowed to connect after the last connection? By
|
||||||
|
# default, this is three seconds. Disable this by setting this to 0.
|
||||||
|
login-ratelimit = 3000
|
||||||
|
|
||||||
|
# Specify a custom timeout for connection timeouts here. The default is five seconds.
|
||||||
|
connection-timeout = 5000
|
||||||
|
|
||||||
|
# Specify a read timeout for connections here. The default is 30 seconds.
|
||||||
|
read-timeout = 30000
|
||||||
|
|
||||||
|
# Enables compatibility with HAProxy's PROXY protocol. If you don't know what this is for, then
|
||||||
|
# don't enable it.
|
||||||
|
haproxy-protocol = false
|
||||||
|
|
||||||
|
# Enables TCP fast open support on the proxy. Requires the proxy to run on Linux.
|
||||||
|
tcp-fast-open = false
|
||||||
|
|
||||||
|
# Enables BungeeCord plugin messaging channel support on Velocity.
|
||||||
|
bungee-plugin-message-channel = true
|
||||||
|
|
||||||
|
# Shows ping requests to the proxy from clients.
|
||||||
|
show-ping-requests = false
|
||||||
|
|
||||||
|
# By default, Velocity will attempt to gracefully handle situations where the user unexpectedly
|
||||||
|
# loses connection to the server without an explicit disconnect message by attempting to fall the
|
||||||
|
# user back, except in the case of read timeouts. BungeeCord will disconnect the user instead. You
|
||||||
|
# can disable this setting to use the BungeeCord behavior.
|
||||||
|
failover-on-unexpected-server-disconnect = true
|
||||||
|
|
||||||
|
# Declares the proxy commands to 1.13+ clients.
|
||||||
|
announce-proxy-commands = true
|
||||||
|
|
||||||
|
# Enables the logging of commands
|
||||||
|
log-command-executions = false
|
||||||
|
|
||||||
|
# Enables logging of player connections when connecting to the proxy, switching servers
|
||||||
|
# and disconnecting from the proxy.
|
||||||
|
log-player-connections = true
|
||||||
|
|
||||||
|
# Allows players transferred from other hosts via the
|
||||||
|
# Transfer packet (Minecraft 1.20.5) to be received.
|
||||||
|
accepts-transfers = false
|
||||||
|
|
||||||
|
[query]
|
||||||
|
# Whether to enable responding to GameSpy 4 query responses or not.
|
||||||
|
enabled = false
|
||||||
|
|
||||||
|
# If query is enabled, on what port should the query protocol listen on?
|
||||||
|
port = 25565
|
||||||
|
|
||||||
|
# This is the map name that is reported to the query services.
|
||||||
|
map = "Velocity"
|
||||||
|
|
||||||
|
# Whether plugins should be shown in query response by default or not
|
||||||
|
show-plugins = false
|
Loading…
Reference in New Issue
Block a user