Upload 3 files
Browse files- Dockerfile +61 -0
- start.sh +46 -0
- sync.sh +54 -0
Dockerfile
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 1. استخدام توزيعة أوبونتو الرسمية
|
| 2 |
+
FROM ubuntu:24.04
|
| 3 |
+
|
| 4 |
+
# 2. تثبيت الأدوات الأساسية لنظام التشغيل
|
| 5 |
+
RUN apt-get update && apt-get install -y \
|
| 6 |
+
wget \
|
| 7 |
+
curl \
|
| 8 |
+
tar \
|
| 9 |
+
python3 \
|
| 10 |
+
python3-pip \
|
| 11 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 12 |
+
|
| 13 |
+
RUN pip install huggingface_hub --break-system-packages
|
| 14 |
+
|
| 15 |
+
# 3. تحميل وتثبيت playit.gg للنفق العام
|
| 16 |
+
RUN curl -sLo /usr/local/bin/playit https://github.com/playit-cloud/playit-agent/releases/download/v1.0.10/playit-linux-amd64 \
|
| 17 |
+
&& chmod +x /usr/local/bin/playit
|
| 18 |
+
|
| 19 |
+
RUN curl -sLo /usr/local/bin/playit-cli https://github.com/playit-cloud/playit-agent/releases/download/v1.0.10/playit-cli-linux-amd64 \
|
| 20 |
+
&& chmod +x /usr/local/bin/playit-cli
|
| 21 |
+
|
| 22 |
+
# 4. تحميل وتثبيت جافا 25 (OpenJDK 25) عبر خوادم مايكروسوفت السريعة والمضمونة
|
| 23 |
+
RUN wget -O openjdk-25.tar.gz https://aka.ms/download-jdk/microsoft-jdk-25-linux-x64.tar.gz \
|
| 24 |
+
&& tar -xvf openjdk-25.tar.gz \
|
| 25 |
+
&& mv jdk-25* /opt/jdk-25 \
|
| 26 |
+
&& rm openjdk-25.tar.gz
|
| 27 |
+
|
| 28 |
+
# إعداد مسارات بيئة جافا للنظام
|
| 29 |
+
ENV JAVA_HOME=/opt/jdk-25
|
| 30 |
+
ENV PATH="$JAVA_HOME/bin:$PATH"
|
| 31 |
+
|
| 32 |
+
# 5. متغيرات بيئة قابلة للتعديل
|
| 33 |
+
ENV MAX_RAM=12G
|
| 34 |
+
ENV MIN_RAM=4G
|
| 35 |
+
ENV MC_VERSION=26.1.2
|
| 36 |
+
ENV SERVER_PORT=7860
|
| 37 |
+
ENV ONLINE_MODE=false
|
| 38 |
+
ENV HF_USER=
|
| 39 |
+
ENV DATASET=
|
| 40 |
+
|
| 41 |
+
# 6. إنشاء مجلد العمل للسيرفر
|
| 42 |
+
WORKDIR /minecraft
|
| 43 |
+
|
| 44 |
+
# 7. تحميل سيرفر Purpur
|
| 45 |
+
RUN wget -O purpur.jar https://api.purpurmc.org/v2/purpur/${MC_VERSION}/latest/download
|
| 46 |
+
|
| 47 |
+
# 8. الموافقة على شروط اللعبة (EULA) للتشغيل التلقائي
|
| 48 |
+
RUN echo "eula=true" > eula.txt
|
| 49 |
+
|
| 50 |
+
# 9. ضبط إعدادات السيرفر
|
| 51 |
+
RUN printf "server-port=%s\nonline-mode=%s\n" "$SERVER_PORT" "$ONLINE_MODE" > server.properties
|
| 52 |
+
|
| 53 |
+
# 10. نسخ ملف التشغيل وضبط صلاحياته
|
| 54 |
+
COPY start.sh sync.sh .
|
| 55 |
+
RUN chmod +x start.sh sync.sh
|
| 56 |
+
|
| 57 |
+
# 11. فتح البورت للاتصال الخارجي بالمنصة
|
| 58 |
+
EXPOSE 7860
|
| 59 |
+
|
| 60 |
+
# 12. أمر بدء تشغيل سيرفر Purpur
|
| 61 |
+
CMD ["./start.sh"]
|
start.sh
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
playit &>/tmp/playit_daemon.log &
|
| 4 |
+
|
| 5 |
+
sleep 2
|
| 6 |
+
|
| 7 |
+
playit-cli setup
|
| 8 |
+
|
| 9 |
+
source sync.sh all
|
| 10 |
+
|
| 11 |
+
echo "جارٍ تشغيل سيرفر ماينكرافت..."
|
| 12 |
+
|
| 13 |
+
while true; do
|
| 14 |
+
sleep 60
|
| 15 |
+
for f in server.properties bukkit.yml ops.json whitelist.json eula.txt permissions.yml; do
|
| 16 |
+
[ -f "/minecraft/$f" ] && push_file "/minecraft/$f"
|
| 17 |
+
done
|
| 18 |
+
done &
|
| 19 |
+
|
| 20 |
+
while true; do
|
| 21 |
+
sleep 300
|
| 22 |
+
backup_world
|
| 23 |
+
done &
|
| 24 |
+
|
| 25 |
+
(for i in $(seq 1 600); do
|
| 26 |
+
IP=$(playit-cli tunnels 2>/dev/null | grep -oE '[a-zA-Z0-9-]+\.(playit\.gg|gl\.joinmc\.link)' | head -1)
|
| 27 |
+
if [ -n "$IP" ]; then
|
| 28 |
+
echo ""
|
| 29 |
+
echo "============================================"
|
| 30 |
+
echo " IP السيرفر جاهز: $IP"
|
| 31 |
+
echo "============================================"
|
| 32 |
+
echo ""
|
| 33 |
+
break
|
| 34 |
+
fi
|
| 35 |
+
sleep 5
|
| 36 |
+
done) &
|
| 37 |
+
|
| 38 |
+
exec java -Xmx${MAX_RAM} -Xms${MIN_RAM} \
|
| 39 |
+
-Dterminal.jline=false \
|
| 40 |
+
-Dterminal.ansi=true \
|
| 41 |
+
-XX:+UseZGC \
|
| 42 |
+
-XX:+ParallelRefProcEnabled \
|
| 43 |
+
-XX:MaxGCPauseMillis=200 \
|
| 44 |
+
-XX:+UnlockExperimentalVMOptions \
|
| 45 |
+
-XX:+DisableExplicitGC \
|
| 46 |
+
-jar purpur.jar nogui
|
sync.sh
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
HF_TOKEN="${HF_TOKEN:?HF_TOKEN must be set}"
|
| 4 |
+
|
| 5 |
+
huggingface-cli login --token "$HF_TOKEN" --add-to-git-credential 2>&1 | head -1
|
| 6 |
+
|
| 7 |
+
HF_USER="${HF_USER:-$(huggingface-cli whoami 2>/dev/null | head -1 | cut -d' ' -f1)}"
|
| 8 |
+
|
| 9 |
+
DATASET="${DATASET:-${HF_USER}/mc-server-data}"
|
| 10 |
+
|
| 11 |
+
init_dataset() {
|
| 12 |
+
echo "التحقق من Dataset: $DATASET"
|
| 13 |
+
if huggingface-cli repo create "$DATASET" --type dataset 2>&1; then
|
| 14 |
+
echo "✅ تم إنشاء Dataset"
|
| 15 |
+
else
|
| 16 |
+
echo "⚠️ Dataset موجود مسبقاً"
|
| 17 |
+
fi
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
pull_files() {
|
| 21 |
+
echo "سحب الملفات من Dataset..."
|
| 22 |
+
mkdir -p /tmp/sync
|
| 23 |
+
if huggingface-cli download "$DATASET" --local-dir /tmp/sync --token "$HF_TOKEN" 2>&1; then
|
| 24 |
+
cp -r /tmp/sync/* /minecraft/ 2>/dev/null || echo "لا توجد ملفات في Dataset"
|
| 25 |
+
rm -rf /tmp/sync
|
| 26 |
+
echo "✅ تم سحب الملفات"
|
| 27 |
+
else
|
| 28 |
+
echo "ℹ️ Dataset فاضي أو لا يمكن السحب"
|
| 29 |
+
fi
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
push_file() {
|
| 33 |
+
[ -f "$1" ] && huggingface-cli upload "$DATASET" "$1" --token "$HF_TOKEN" 2>&1 && echo "✅ رفع $1"
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
backup_world() {
|
| 37 |
+
echo "نسخ احتياطي للعالم..."
|
| 38 |
+
tar czf /tmp/world-backup.tar.gz -C /minecraft world 2>/dev/null
|
| 39 |
+
if huggingface-cli upload "$DATASET" /tmp/world-backup.tar.gz --token "$HF_TOKEN" 2>&1; then
|
| 40 |
+
echo "✅ تم نسخ العالم"
|
| 41 |
+
fi
|
| 42 |
+
rm -f /tmp/world-backup.tar.gz
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
case "${1:-all}" in
|
| 46 |
+
init) init_dataset ;;
|
| 47 |
+
pull) pull_files ;;
|
| 48 |
+
push) shift; push_file "$@" ;;
|
| 49 |
+
backup) backup_world ;;
|
| 50 |
+
all)
|
| 51 |
+
init_dataset
|
| 52 |
+
pull_files
|
| 53 |
+
;;
|
| 54 |
+
esac
|