SAyyeedd commited on
Commit
e4fd09c
·
verified ·
1 Parent(s): a886953

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +61 -0
  2. start.sh +46 -0
  3. 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