Techbitforge commited on
Commit
31db1d3
·
verified ·
1 Parent(s): 41293f7

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile (1) +41 -0
  2. app (4).py +75 -0
  3. requirements (1).txt +2 -0
Dockerfile (1) ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use lightweight Python image
2
+ FROM python:3.10-slim
3
+
4
+ # Environment variables
5
+ ENV PYTHONDONTWRITEBYTECODE=1
6
+ ENV PYTHONUNBUFFERED=1
7
+
8
+ # Working directory
9
+ WORKDIR /app
10
+
11
+ # Install system dependencies
12
+ RUN apt-get update && apt-get install -y \
13
+ curl \
14
+ ca-certificates \
15
+ # lklklkl
16
+ && rm -rf /var/lib/apt/lists/*
17
+
18
+ # Install cloudflared (NO sudo, NO service install)
19
+ RUN curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg \
20
+ | tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null && \
21
+ echo "deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main" \
22
+ | tee /etc/apt/sources.list.d/cloudflared.list && \
23
+ apt-get update && \
24
+ apt-get install -y cloudflared && \
25
+ rm -rf /var/lib/apt/lists/*
26
+
27
+ # Copy requirements first (better caching)
28
+ COPY requirements.txt .
29
+
30
+ # Install Python deps
31
+ RUN pip install --no-cache-dir -r requirements.txt
32
+
33
+ # Copy app
34
+ COPY app.py .
35
+
36
+ # Expose HF port
37
+ EXPOSE 7860
38
+
39
+ # Start Flask + cloudflared together
40
+ CMD cloudflared tunnel run --token $CLOUDFLARED_TOKEN & python app.py
41
+
app (4).py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, Response, jsonify
2
+ import requests
3
+ import threading
4
+ import time
5
+ import random
6
+ import logging
7
+ from typing import Optional
8
+
9
+ app = Flask(__name__)
10
+
11
+ # =========================
12
+ # CONFIG
13
+ # =========================
14
+ Server = [
15
+ "https://techbitforge-webui.hf.space/api/models",
16
+ "https://APINOW-service-server.hf.space",
17
+ "https://APINOW-service-newserver.hf.space",
18
+
19
+ ]
20
+ PING_INTERVAL = 120
21
+ REQUEST_TIMEOUT = 300
22
+
23
+ # =========================
24
+ # LOGGING
25
+ # =========================
26
+ logging.basicConfig(
27
+ level=logging.INFO,
28
+ format="%(asctime)s — %(levelname)s — %(message)s"
29
+ )
30
+ logger = logging.getLogger("proxy")
31
+
32
+
33
+ # =========================
34
+ # HEALTH CHECK
35
+ # =========================
36
+ @app.route("/", methods=["GET"])
37
+ def home():
38
+ return jsonify({"status": "running", "service": "HF Proxy"})
39
+
40
+
41
+ # =========================
42
+ # KEEP ALIVE PINGER
43
+ # =========================
44
+ HEADERS = {"User-Agent": "HF-Proxy-KeepAliveBot"}
45
+
46
+
47
+ def keep_alive_worker():
48
+ while True:
49
+ logger.info("Pinging HF servers...")
50
+ for url in Server:
51
+ try:
52
+ r = requests.get(url, headers=HEADERS, timeout=8)
53
+ logger.info(f"{url} → {r.status_code}")
54
+ except Exception as e:
55
+ logger.warning(f"{url} → ERROR: {e}")
56
+ time.sleep(PING_INTERVAL)
57
+
58
+
59
+ def start_background_thread():
60
+ thread = threading.Thread(target=keep_alive_worker, daemon=True)
61
+ thread.start()
62
+ logger.info("Background keep-alive thread started")
63
+
64
+
65
+ # =========================
66
+ # MAIN
67
+ # =========================
68
+ if __name__ == "__main__":
69
+ start_background_thread()
70
+ app.run(
71
+ host="0.0.0.0",
72
+ port=7860,
73
+ threaded=True,
74
+ debug=False
75
+ )
requirements (1).txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ flask
2
+ requests