1 / Dockerfile
tutoihoc's picture
Create Dockerfile
b7a95c7 verified
FROM python:3.13
# Thiết lập biến môi trường cho UV và Port của Hugging Face
ENV UV_PROJECT_ENVIRONMENT=/usr/local
ENV PORT=7860
WORKDIR /app
# 1. Cài đặt uv
RUN pip install uv --no-cache-dir
# 2. Clone repository private sử dụng Secret của Hugging Face
RUN --mount=type=secret,id=CLONE,mode=0444,required=true \
git clone https://$(cat /run/secrets/CLONE)@github.com/tutoihoc/ha.git .
# 3. Cài đặt các dependencies từ repo vừa clone về
# Không dùng --mount bind vì file đã có sẵn trong container sau khi clone
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked --no-cache-dir
# 4. Cài đặt trình duyệt cho Playwright và Camoufox
RUN chmod +x /usr/local/lib/python3.13/site-packages/playwright/driver/node && \
uv run playwright install firefox --with-deps && \
uv run camoufox fetch
# 5. Tạo các thư mục cần thiết nếu chưa có (tránh lỗi permission)
RUN mkdir -p /app/states /app/gemini_logs && chmod -R 777 /app
# --- SCRIPT TỰ KHỞI ĐỘNG LẠI SAU 1 GIỜ ---
# Lệnh 'timeout 7200' sẽ chạy app và tự động kill nó sau 7200 giây (2 tiếng)
RUN echo '#!/bin/bash\n\
while true; do\n\
echo "Starting app with 2 hour timeout..."\n\
timeout 7200 uv run python app.py\n\
echo "App stopped or timed out. Restarting..."\n\
sleep 1\n\
done' > /app/run_loop.sh && chmod +x /app/run_loop.sh
# Expose port 7860 cho Hugging Face
EXPOSE 7860
# Chạy script vòng lặp thay vì chạy thẳng python
CMD ["/app/run_loop.sh"]