# Sử dụng Ubuntu 24.04 để có sẵn GLIBC 2.39 FROM ubuntu:24.04 # Tránh các câu hỏi tương tác khi cài đặt package ENV DEBIAN_FRONTEND=noninteractive # Kiểm tra nếu UID 1000 đã tồn tại thì đổi tên sang user, ngược lại thì tạo mới RUN if id -u 1000 >/dev/null 2>&1; then \ EXISTING_USER=$(id -un 1000); \ usermod -l user ${EXISTING_USER}; \ groupmod -n user ${EXISTING_USER} || true; \ mv /home/${EXISTING_USER} /home/user || true; \ usermod -d /home/user user; \ else \ useradd -m -u 1000 user; \ fi # CÀI ĐẶT THÊM GÓI SUDO, PYTHON, NODEJS VÀ NGINX RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ python3-venv \ curl \ git \ ffmpeg \ libgomp1 \ sudo \ nginx \ lsof \ && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* # CẤU HÌNH CHO PHÉP USER CHẠY SUDO KHÔNG CẦN PASSWORD RUN echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # Cập nhật liên kết alias trỏ thẳng vào python3 của hệ thống RUN ln -sf /usr/bin/python3 /usr/bin/python && \ ln -sf /usr/bin/pip3 /usr/bin/pip # Cài đặt các thư viện Python RUN pip install --no-cache-dir --break-system-packages \ jupyterlab \ langchain \ langchain-groq \ langchain-google-genai \ openai \ httpx \ pandas \ matplotlib \ requests # ==================== PHÂN QUYỀN HỆ THỐNG CHO NGINX (BẰNG ROOT) ==================== RUN mkdir -p /var/lib/nginx/body /var/lib/nginx/proxy /var/log/nginx /run/nginx && \ chown -R user:user /var/lib/nginx /var/log/nginx /run/nginx /var/lib/nginx/body RUN touch /run/nginx.pid && chown user:user /run/nginx.pid # =================================================================================== # Chuyển sang user 1000 (Bắt buộc theo quy định của Hugging Face) USER user WORKDIR /home/user # Copy cấu hình Nginx và JupyterLab vào container COPY --chown=user:user nginx.conf /home/user/nginx.conf # Copy file entrypoint.sh và cấp quyền chạy COPY --chown=user:user entrypoint.sh /home/entrypoint.sh RUN chmod +x /home/entrypoint.sh # Expose cổng mặc định của Space (Cổng này Nginx sẽ đứng đón) EXPOSE 7860 # Khởi chạy bằng entrypoint CMD ["/home/entrypoint.sh"]