datamk commited on
Commit
c4508ff
·
verified ·
1 Parent(s): 76338b1

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +12 -5
  2. app.py +13 -7
Dockerfile CHANGED
@@ -1,11 +1,12 @@
1
  FROM python:3.10-slim
2
 
3
- # Install system-level dependencies for browsers
4
  RUN apt-get update && apt-get install -y \
5
  wget \
6
  gnupg \
7
  ca-certificates \
8
  procps \
 
9
  libnss3 \
10
  libatk1.0-0 \
11
  libatk-bridge2.0-0 \
@@ -18,10 +19,18 @@ RUN apt-get update && apt-get install -y \
18
  libgbm1 \
19
  libasound2 \
20
  libpangocairo-1.0-0 \
 
 
 
 
 
 
 
 
21
  --no-install-recommends \
22
  && rm -rf /var/lib/apt/lists/*
23
 
24
- # Setup the mandatory Hugging Face user (UID 1000)
25
  RUN useradd -m -u 1000 user
26
  USER user
27
  ENV HOME=/home/user \
@@ -30,14 +39,12 @@ ENV HOME=/home/user \
30
 
31
  WORKDIR $HOME/app
32
 
33
- # Only copy requirements first to cache layers
34
  COPY --chown=user requirements.txt .
35
  RUN pip install --no-cache-dir -r requirements.txt
36
 
37
- # Install Playwright browser to the default user home directory
38
  RUN playwright install chromium
39
 
40
- # Copy your application code
41
  COPY --chown=user app.py .
42
 
43
  EXPOSE 7860
 
1
  FROM python:3.10-slim
2
 
3
+ # Install system dependencies for Playwright Chromium
4
  RUN apt-get update && apt-get install -y \
5
  wget \
6
  gnupg \
7
  ca-certificates \
8
  procps \
9
+ # Required system libraries for Chromium
10
  libnss3 \
11
  libatk1.0-0 \
12
  libatk-bridge2.0-0 \
 
19
  libgbm1 \
20
  libasound2 \
21
  libpangocairo-1.0-0 \
22
+ # Adding missing X11 fixes and other common missing dependencies
23
+ libxfixes3 \
24
+ libx11-6 \
25
+ libxcb1 \
26
+ libxcursor1 \
27
+ libxi6 \
28
+ libxtst6 \
29
+ libxshmfence1 \
30
  --no-install-recommends \
31
  && rm -rf /var/lib/apt/lists/*
32
 
33
+ # Mandatory Hugging Face user setup
34
  RUN useradd -m -u 1000 user
35
  USER user
36
  ENV HOME=/home/user \
 
39
 
40
  WORKDIR $HOME/app
41
 
 
42
  COPY --chown=user requirements.txt .
43
  RUN pip install --no-cache-dir -r requirements.txt
44
 
45
+ # Install Playwright and Chromium
46
  RUN playwright install chromium
47
 
 
48
  COPY --chown=user app.py .
49
 
50
  EXPOSE 7860
app.py CHANGED
@@ -13,7 +13,7 @@ logs = ["🚀 System initialized. First run starting..."]
13
  def add_log(message):
14
  timestamp = datetime.datetime.now().strftime('%H:%M:%S')
15
  log_entry = f"[{timestamp}] {message}"
16
- print(log_entry) # Prints to HF Build/Container logs
17
  logs.append(log_entry)
18
  if len(logs) > 50: logs.pop(0)
19
 
@@ -21,9 +21,14 @@ def visit_and_scroll():
21
  add_log(f"Starting keep-alive visit to: {URL}")
22
  try:
23
  with sync_playwright() as p:
24
- # Relying on default path for browser executable
25
- browser = p.chromium.launch(headless=True, args=['--no-sandbox', '--disable-dev-shm-usage'])
26
- context = browser.new_context(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
 
 
 
 
 
27
  page = context.new_page()
28
 
29
  page.goto(URL, wait_until='networkidle', timeout=60000)
@@ -34,7 +39,7 @@ def visit_and_scroll():
34
  scroll_y = i * 800
35
  page.evaluate(f"window.scrollTo(0, {scroll_y});")
36
  add_log(f"Scrolled to {scroll_y}px...")
37
- time.sleep(random.uniform(1.0, 2.5))
38
 
39
  page.evaluate("window.scrollTo(0, 0);")
40
  add_log("Visit completed. Closing browser.")
@@ -57,10 +62,11 @@ thread.start()
57
  def get_logs():
58
  return "\n".join(reversed(logs))
59
 
60
- # Gradio Interface
61
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
62
  gr.Markdown("# 🚀 Cloud Stay-Alive Bot")
63
  status_box = gr.Textbox(label="Latest Logs (Top First)", value=get_logs, every=5, lines=15)
64
 
65
  if __name__ == "__main__":
 
66
  demo.launch(server_name="0.0.0.0", server_port=7860)
 
13
  def add_log(message):
14
  timestamp = datetime.datetime.now().strftime('%H:%M:%S')
15
  log_entry = f"[{timestamp}] {message}"
16
+ print(log_entry)
17
  logs.append(log_entry)
18
  if len(logs) > 50: logs.pop(0)
19
 
 
21
  add_log(f"Starting keep-alive visit to: {URL}")
22
  try:
23
  with sync_playwright() as p:
24
+ # Re-enabling explicit user-agent and simplified launch
25
+ browser = p.chromium.launch(
26
+ headless=True,
27
+ args=['--no-sandbox', '--disable-dev-shm-usage', '--disable-gpu']
28
+ )
29
+ context = browser.new_context(
30
+ user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
31
+ )
32
  page = context.new_page()
33
 
34
  page.goto(URL, wait_until='networkidle', timeout=60000)
 
39
  scroll_y = i * 800
40
  page.evaluate(f"window.scrollTo(0, {scroll_y});")
41
  add_log(f"Scrolled to {scroll_y}px...")
42
+ time.sleep(random.uniform(1.5, 3.0))
43
 
44
  page.evaluate("window.scrollTo(0, 0);")
45
  add_log("Visit completed. Closing browser.")
 
62
  def get_logs():
63
  return "\n".join(reversed(logs))
64
 
65
+ # Gradio Interface fix for v6 warning
66
+ with gr.Blocks() as demo:
67
  gr.Markdown("# 🚀 Cloud Stay-Alive Bot")
68
  status_box = gr.Textbox(label="Latest Logs (Top First)", value=get_logs, every=5, lines=15)
69
 
70
  if __name__ == "__main__":
71
+ # Move theme to launch to fix the Gradio 6 warning
72
  demo.launch(server_name="0.0.0.0", server_port=7860)