FROM node:20-slim # 1. تثبيت المتطلبات الأساسية RUN apt-get update && apt-get install -y postgresql postgresql-contrib redis-server supervisor nginx curl && rm -rf /var/lib/apt/lists/* # 2. إعداد الصلاحيات لمستخدم 'node' USER root RUN mkdir -p /var/run/postgresql /var/log/postgresql /var/lib/postgresql /var/run/redis /var/log/nginx /var/lib/nginx RUN chown -R node:node /var/run/postgresql /var/log/postgresql /var/lib/postgresql /var/run/redis /var/log/nginx /var/lib/nginx # 3. تجهيز مجلدات المشروع WORKDIR /app COPY --chown=node:node . . # 4. بناء الـ Backend WORKDIR /app/backend RUN npm install RUN npm run build # 5. بناء الـ Frontend WORKDIR /app/frontend RUN npm install RUN npm run build # 6. إعداد Nginx و Supervisor # استبدال الملف الرئيسي لـ Nginx لضمان عمله كمستخدم غير جذري COPY nginx.conf /etc/nginx/nginx.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 7. إعداد ملف التشغيل COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh RUN chown node:node /app/entrypoint.sh # التبديل إلى المستخدم 'node' USER node ENV PGDATA=/home/node/pgdata ENV PATH="/usr/lib/postgresql/17/bin:/usr/lib/postgresql/16/bin:/usr/lib/postgresql/15/bin:/home/node/.local/bin:$PATH" EXPOSE 7860 ENTRYPOINT ["/app/entrypoint.sh"]