commit bdc814ccd00f3ec8e707513760e53493c37791ff Author: DerTyp7 Date: Fri Jul 4 01:04:19 2025 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..333c1e9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +logs/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..925e5ad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:12.11-slim + +RUN apt-get update && apt-get install -y wget + +ENV MAX_LOGS="20" +ENV LOG_DIR="/var/log/glassminers" +ENV LOG_DATE_FORMAT="%Y-%m-%d-%H-%M-%S" + +RUN mkdir -p ${LOG_DIR} + +WORKDIR "/usr/local/bin/glassminers" + +COPY ./scripts/download_server.sh ./ +COPY ./scripts/run_server.sh ./ + +RUN chmod 777 ./*.sh +RUN ./download_server.sh + +CMD ["./run_server.sh"] + +EXPOSE 9876 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac776db --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Glassminers Server Docker + +This project aims to dockerize the server of the [Glassminers](https://github.com/surrealtm/Glassminers) diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..7befe53 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,15 @@ +services: + glassminers_server: + build: + context: . + dockerfile: Dockerfile + network: host + restart: unless-stopped + environment: + - MAX_LOGS=5 + # - LOG_DIR="/var/log/glassminers" + # - LOG_DATE_FORMAT="%Y-%m-%d-%H-%M-%S" # No spaces + volumes: + - ./logs:/var/log/glassminers + ports: + - 9876:9876/tcp diff --git a/scripts/download_server.sh b/scripts/download_server.sh new file mode 100644 index 0000000..8319716 --- /dev/null +++ b/scripts/download_server.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +EXEC=server.out + +echo "[Info] Downloading latest server version..." +wget https://github.com/surrealtm/Glassminers/releases/latest/download/GMServer.out -O "$EXEC" + +if [ $? -ne 0 ]; then + echo "[Error] Download failed! Aborting." + exit 1 +fi + +chmod +x "$EXEC" +echo "[Info] Download completed successfully." diff --git a/scripts/run_server.sh b/scripts/run_server.sh new file mode 100644 index 0000000..224eb17 --- /dev/null +++ b/scripts/run_server.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +MAX_LOGS=${MAX_LOGS:-20} +LOG_DIR=${LOG_DIR:-"/var/log/glassminers"} +LOG_DATE_FORMAT=${LOG_DATE_FORMAT:-"%Y-%m-%d-%H-%M-%S"} + +EXEC=./server.out +TIMESTAMP=$(date +"$LOG_DATE_FORMAT") + +delete_old_logs() { + if [ -d "$LOG_DIR" ]; then + NUM_LOGS=$(ls -1q "$LOG_DIR"/*.log 2>/dev/null | wc -l) + + if ((NUM_LOGS > MAX_LOGS)); then + OLDEST_LOGS=$(ls -1t "$LOG_DIR"/*.log | tail -n $((NUM_LOGS - MAX_LOGS))) + for log_file in $OLDEST_LOGS; do + rm "$log_file" + echo "[Info] Removed old log: $log_file" + done + fi + fi +} + +rename_log() { + if [ -f "$LOG_DIR/latest.log" ]; then + STOP_TIMESTAMP=$(date +"$LOG_DATE_FORMAT") + mv "$LOG_DIR/latest.log" "$LOG_DIR/$STOP_TIMESTAMP.log" + echo "[Info] Renamed latest.log to $STOP_TIMESTAMP.log" + else + echo "[Warning] No latest.log file to rename" + fi +} + +clean_up() { + rename_log + delete_old_logs +} + +trap 'clean_up; exit 0' SIGTERM + +echo "[Info] Max number of logs set to $MAX_LOGS" +echo "[Info] Server is starting at [$TIMESTAMP]" +$EXEC >"$LOG_DIR/latest.log" & +SERVER_PID=$! + +wait $SERVER_PID +EXIT_STATUS=$? + +clean_up + +echo "[Info] Server stopped at [$(date +"$LOG_DATE_FORMAT")] with exit code: $EXIT_STATUS" +sleep 5