FROM node:20-bullseye # 1. تثبيت متطلبات النظام RUN apt-get update \ && apt-get install -y --no-install-recommends \ git \ && rm -rf /var/lib/apt/lists/* # 2. نسخ ملفات المشروع WORKDIR /app COPY package*.json ./ COPY tsconfig.json ./ COPY tsup.config.ts ./ COPY prisma ./prisma/ COPY src ./src/ COPY manager ./manager/ # 3. تضمين متغيرات البيئة من .env.example ENV SERVER_TYPE=http ENV SERVER_PORT=7860 ENV SERVER_URL=https://oex2003-evolution_api.hf.space ENV SSL_CONF_PRIVKEY=/path/to/cert.key ENV SSL_CONF_FULLCHAIN=/path/to/cert.crt ENV SENTRY_DSN= ENV CORS_ORIGIN=* ENV CORS_METHODS=GET,POST,PUT,DELETE ENV CORS_CREDENTIALS=true ENV LOG_LEVEL=ERROR,WARN,DEBUG,INFO,LOG,VERBOSE,DARK,WEBHOOKS,WEBSOCKET ENV LOG_COLOR=true ENV LOG_BAILEYS=verbose ENV EVENT_EMITTER_MAX_LISTENERS=50 ENV DEL_INSTANCE=false ENV DATABASE_PROVIDER=postgresql ENV DATABASE_URL="postgresql://postgres.spnhuzaclgccmmunhmfc:Akalimain000-@aws-0-eu-north-1.pooler.supabase.com:5432/postgres?pgbouncer=true&statement_cache_size=0" ENV DATABASE_CONNECTION_URI="postgresql://postgres.spnhuzaclgccmmunhmfc:Akalimain000-@aws-0-eu-north-1.pooler.supabase.com:5432/postgres?pgbouncer=true&statement_cache_size=0" ENV DATABASE_CONNECTION_CLIENT_NAME=evolution_exchange ENV DATABASE_SAVE_DATA_INSTANCE=true ENV DATABASE_SAVE_DATA_NEW_MESSAGE=true ENV DATABASE_SAVE_MESSAGE_UPDATE=true ENV DATABASE_SAVE_DATA_CONTACTS=true ENV DATABASE_SAVE_DATA_CHATS=true ENV DATABASE_SAVE_DATA_LABELS=true ENV DATABASE_SAVE_DATA_HISTORIC=true ENV DATABASE_SAVE_IS_ON_WHATSAPP=true ENV DATABASE_SAVE_IS_ON_WHATSAPP_DAYS=7 ENV DATABASE_DELETE_MESSAGE=true ENV RABBITMQ_ENABLED=false ENV RABBITMQ_URI=amqp://localhost ENV RABBITMQ_EXCHANGE_NAME=evolution ENV RABBITMQ_FRAME_MAX=8192 ENV RABBITMQ_GLOBAL_ENABLED=false ENV RABBITMQ_PREFIX_KEY=evolution ENV RABBITMQ_EVENTS_APPLICATION_STARTUP=false ENV RABBITMQ_EVENTS_INSTANCE_CREATE=false ENV RABBITMQ_EVENTS_INSTANCE_DELETE=false ENV RABBITMQ_EVENTS_QRCODE_UPDATED=false ENV RABBITMQ_EVENTS_MESSAGES_SET=false ENV RABBITMQ_EVENTS_MESSAGES_UPSERT=false ENV RABBITMQ_EVENTS_MESSAGES_EDITED=false ENV RABBITMQ_EVENTS_MESSAGES_UPDATE=false ENV RABBITMQ_EVENTS_MESSAGES_DELETE=false ENV RABBITMQ_EVENTS_SEND_MESSAGE=false ENV RABBITMQ_EVENTS_SEND_MESSAGE_UPDATE=false ENV RABBITMQ_EVENTS_CONTACTS_SET=false ENV RABBITMQ_EVENTS_CONTACTS_UPSERT=false ENV RABBITMQ_EVENTS_CONTACTS_UPDATE=false ENV RABBITMQ_EVENTS_PRESENCE_UPDATE=false ENV RABBITMQ_EVENTS_CHATS_SET=false ENV RABBITMQ_EVENTS_CHATS_UPSERT=false ENV RABBITMQ_EVENTS_CHATS_UPDATE=false ENV RABBITMQ_EVENTS_CHATS_DELETE=false ENV RABBITMQ_EVENTS_GROUPS_UPSERT=false ENV RABBITMQ_EVENTS_GROUPS_UPDATE=false ENV RABBITMQ_EVENTS_GROUP_PARTICIPANTS_UPDATE=false ENV RABBITMQ_EVENTS_CONNECTION_UPDATE=false ENV RABBITMQ_EVENTS_REMOVE_INSTANCE=false ENV RABBITMQ_EVENTS_LOGOUT_INSTANCE=false ENV RABBITMQ_EVENTS_CALL=false ENV RABBITMQ_EVENTS_TYPEBOT_START=false ENV RABBITMQ_EVENTS_TYPEBOT_CHANGE_STATUS=false ENV SQS_ENABLED=false ENV SQS_ACCESS_KEY_ID= ENV SQS_SECRET_ACCESS_KEY= ENV SQS_ACCOUNT_ID= ENV SQS_REGION= ENV WEBSOCKET_ENABLED=true ENV WEBSOCKET_GLOBAL_EVENTS=true ENV PUSHER_ENABLED=false ENV PUSHER_GLOBAL_ENABLED=false ENV PUSHER_GLOBAL_APP_ID= ENV PUSHER_GLOBAL_KEY= ENV PUSHER_GLOBAL_SECRET= ENV PUSHER_GLOBAL_CLUSTER= ENV PUSHER_GLOBAL_USE_TLS=true ENV PUSHER_EVENTS_APPLICATION_STARTUP=true ENV PUSHER_EVENTS_QRCODE_UPDATED=true ENV PUSHER_EVENTS_MESSAGES_SET=true ENV PUSHER_EVENTS_MESSAGES_UPSERT=true ENV PUSHER_EVENTS_MESSAGES_EDITED=true ENV PUSHER_EVENTS_MESSAGES_UPDATE=true ENV PUSHER_EVENTS_MESSAGES_DELETE=true ENV PUSHER_EVENTS_SEND_MESSAGE=true ENV PUSHER_EVENTS_SEND_MESSAGE_UPDATE=true ENV PUSHER_EVENTS_CONTACTS_SET=true ENV PUSHER_EVENTS_CONTACTS_UPSERT=true ENV PUSHER_EVENTS_CONTACTS_UPDATE=true ENV PUSHER_EVENTS_PRESENCE_UPDATE=true ENV PUSHER_EVENTS_CHATS_SET=true ENV PUSHER_EVENTS_CHATS_UPSERT=true ENV PUSHER_EVENTS_CHATS_UPDATE=true ENV PUSHER_EVENTS_CHATS_DELETE=true ENV PUSHER_EVENTS_GROUPS_UPSERT=true ENV PUSHER_EVENTS_GROUPS_UPDATE=true ENV PUSHER_EVENTS_GROUP_PARTICIPANTS_UPDATE=true ENV PUSHER_EVENTS_CONNECTION_UPDATE=true ENV PUSHER_EVENTS_LABELS_EDIT=true ENV PUSHER_EVENTS_LABELS_ASSOCIATION=true ENV PUSHER_EVENTS_CALL=true ENV PUSHER_EVENTS_TYPEBOT_START=false ENV PUSHER_EVENTS_TYPEBOT_CHANGE_STATUS=false ENV WA_BUSINESS_TOKEN_WEBHOOK=evolution ENV WA_BUSINESS_URL=https://graph.facebook.com ENV WA_BUSINESS_VERSION=v20.0 ENV WA_BUSINESS_LANGUAGE=en_US ENV WEBHOOK_GLOBAL_ENABLED=false ENV WEBHOOK_GLOBAL_URL= ENV WEBHOOK_GLOBAL_WEBHOOK_BY_EVENTS=false ENV WEBHOOK_EVENTS_APPLICATION_STARTUP=false ENV WEBHOOK_EVENTS_QRCODE_UPDATED=true ENV WEBHOOK_EVENTS_MESSAGES_SET=true ENV WEBHOOK_EVENTS_MESSAGES_UPSERT=true ENV WEBHOOK_EVENTS_MESSAGES_EDITED=true ENV WEBHOOK_EVENTS_MESSAGES_UPDATE=true ENV WEBHOOK_EVENTS_MESSAGES_DELETE=true ENV WEBHOOK_EVENTS_SEND_MESSAGE=true ENV WEBHOOK_EVENTS_SEND_MESSAGE_UPDATE=true ENV WEBHOOK_EVENTS_CONTACTS_SET=true ENV WEBHOOK_EVENTS_CONTACTS_UPSERT=true ENV WEBHOOK_EVENTS_CONTACTS_UPDATE=true ENV WEBHOOK_EVENTS_PRESENCE_UPDATE=true ENV WEBHOOK_EVENTS_CHATS_SET=true ENV WEBHOOK_EVENTS_CHATS_UPSERT=true ENV WEBHOOK_EVENTS_CHATS_UPDATE=true ENV WEBHOOK_EVENTS_CHATS_DELETE=true ENV WEBHOOK_EVENTS_GROUPS_UPSERT=true ENV WEBHOOK_EVENTS_GROUPS_UPDATE=true ENV WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true ENV WEBHOOK_EVENTS_CONNECTION_UPDATE=true ENV WEBHOOK_EVENTS_REMOVE_INSTANCE=false ENV WEBHOOK_EVENTS_LOGOUT_INSTANCE=false ENV WEBHOOK_EVENTS_LABELS_EDIT=true ENV WEBHOOK_EVENTS_LABELS_ASSOCIATION=true ENV WEBHOOK_EVENTS_CALL=true ENV WEBHOOK_EVENTS_TYPEBOT_START=false ENV WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false ENV WEBHOOK_EVENTS_ERRORS=false ENV WEBHOOK_EVENTS_ERRORS_WEBHOOK= ENV WEBHOOK_REQUEST_TIMEOUT_MS=60000 ENV WEBHOOK_RETRY_MAX_ATTEMPTS=10 ENV WEBHOOK_RETRY_INITIAL_DELAY_SECONDS=5 ENV WEBHOOK_RETRY_USE_EXPONENTIAL_BACKOFF=true ENV WEBHOOK_RETRY_MAX_DELAY_SECONDS=300 ENV WEBHOOK_RETRY_JITTER_FACTOR=0.2 ENV WEBHOOK_RETRY_NON_RETRYABLE_STATUS_CODES=400,401,403,404,422 ENV CONFIG_SESSION_PHONE_NAME=Chrome ENV CONFIG_SESSION_PHONE_VERSION=2.3000.1023223821 ENV QRCODE_LIMIT=30 ENV QRCODE_COLOR=#000000 ENV TYPEBOT_ENABLED=false ENV TYPEBOT_API_VERSION=latest ENV CHATWOOT_ENABLED=false ENV CHATWOOT_MESSAGE_READ=true ENV CHATWOOT_MESSAGE_DELETE=true ENV CHATWOOT_BOT_CONTACT=true ENV CHATWOOT_IMPORT_DATABASE_CONNECTION_URI= ENV CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true ENV OPENAI_ENABLED=false ENV DIFY_ENABLED=false ENV N8N_ENABLED=false ENV EVOAI_ENABLED=false ENV CACHE_REDIS_ENABLED=true ENV CACHE_REDIS_URI=rediss://default:ARgBAAIjcDE5NjMxODI2NGI1ZWQ0ZWNjOGM5MzZjNGI5MDM2Mjg1MnAxMA@related-ant-6145.upstash.io:6379 ENV CACHE_REDIS_TTL=604800 ENV CACHE_REDIS_PREFIX_KEY=evolution ENV CACHE_REDIS_SAVE_INSTANCES=true ENV CACHE_LOCAL_ENABLED=false ENV S3_ENABLED=false ENV S3_ACCESS_KEY= ENV S3_SECRET_KEY= ENV S3_BUCKET=evolution ENV S3_PORT=443 ENV S3_ENDPOINT=s3.domain.com ENV S3_REGION=eu-west-3 ENV S3_USE_SSL=true ENV AUTHENTICATION_API_KEY=429683C4C977415CAAFCCE10F7D57E11 ENV AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true ENV LANGUAGE=en ENV PROXY_HOST= #ENV PROXY_PORT=80 ENV PROXY_PROTOCOL=http ENV PROXY_USERNAME= ENV PROXY_PASSWORD="" # 4. تثبيت، إعداد مخطط Prisma، إنشاء العميل، والبناء RUN npm install \ && npm install \ && mkdir -p prisma \ && cp prisma/postgresql-schema.prisma prisma/schema.prisma \ && npx prisma generate \ && npm run build # 5. كشف منفذ Huggingface ونسخ سكريبت بدء التشغيل EXPOSE 7860 COPY run.sh /app/run.sh RUN chmod +x /app/run.sh # 6. إصلاح الأذونات والتبديل إلى مستخدم غير جذري RUN chown -R node:node /app USER node WORKDIR /app ENTRYPOINT ["bash", "/app/run.sh"]