# استفاده از یک ایمیج پایه پایتون 3.9 # می توانید از نسخه های دیگر پایتون نیز استفاده کنید، مطمئن شوید که با نیازهای شما سازگار است. FROM python:3.9 # تنظیم دایرکتوری کاری در داخل کانتینر WORKDIR /app # کپی کردن فایل requirements.txt به دایرکتوری کاری COPY requirements.txt . # نصب وابستگی ها از requirements.txt # --no-cache-dir برای جلوگیری از ذخیره سازی کش pip که حجم ایمیج را کم می کند. RUN pip install --no-cache-dir -r requirements.txt # ****** اضافه کردن دستورات برای تنظیم مسیر کش Sentence-Transformers ****** # تنظیم متغیر محیطی برای تغییر مسیر کش به یک مسیر قابل نوشتن در داخل کانتینر (مثلاً در دایرکتوری app) # این کار خطای Permission denied برای /.cache را رفع می کند. ENV SENTENCE_TRANSFORMERS_HOME=/app/.cache/sentence_transformers # ایجاد دایرکتوری کش با مجوزهای مناسب برای اطمینان از قابلیت نوشتن توسط کاربر کانتینر # mkdir -p اگر دایرکتوری والد وجود نداشته باشد آن را ایجاد می کند. # chmod -R 777 مجوز خواندن، نوشتن و اجرا را برای همه کاربران روی دایرکتوری و محتویات آن (پس از ایجاد) تنظیم می کند. RUN mkdir -p /app/.cache/sentence_transformers && chmod -R 777 /app/.cache # ********************************************************************** # کپی کردن تمام فایل های پروژه از دایرکتوری فعلی (Space شما) به دایرکتوری کاری در کانتینر # مطمئن شوید app.py و هر فایل JSON که نیاز دارید در دایرکتوری ریشه Space شما قرار دارند. COPY . /app # تعیین پورتی که برنامه در داخل کانتینر به آن گوش می دهد. # Hugging Face Spaces به پورت 7860 نیاز دارد. EXPOSE 7860 # تعیین دستور اجرای برنامه هنگام راه اندازی کانتینر # ما از Gunicorn به عنوان وب سرور برای اجرای اپلیکیشن Flask استفاده می کنیم. # 'app:app' به Gunicorn می گوید که اپلیکیشن Flask با نام 'app' را در فایل 'app.py' پیدا کند. CMD ["gunicorn", "--bind", "0.0.0.0:7860", "app:app"] # در اینجا می توانید دستورات دیگری برای کپی کردن فایل های JSON نیز اضافه کنید # اگر فایل های JSON شما در پوشه ریشه Space قرار دارند، دستور COPY . /app آنها را نیز کپی می کند. # اگر در پوشه دیگری هستند، نیاز به COPY جداگانه دارید. # مثال: اگر فایل های JSON در پوشه data هستند: # COPY data /app/data