**اسکواد کوئرا** *(Quera's Squad)* که سردسته آنها **علیشا** *(AliSha)* میباشد، علاقه خاصی به **رصد رفتار** و **تعاملات کاربران** در محصولات مختلف **کوئرا** دارد. او همواره از **ابزارهای مختلفی** برای انجام این **رصد** و **سنجیدن کیفیت** کالجها و مسابقات کوئرا استفاده میکند. در این بین اما، **فعالیتهای متعدد** یک کاربر یعنی **آقای فرهادیان** *(Mr. Farhadian)* در **بسیاری از کالجها و مسابقات کوئرا** باعث شده است تا ابزارهایی که اسکواد از آنها برای تحلیل رفتار کاربران استفاده میکند، با توجه به **حجم بسیار زیاد اطلاعات فعالیتهای این کاربر،** از ارائه گزارش در مورد عملکردهای او **ناتوان** شده و **از دسترس خارج شوند!**

با توجه به نیاز علیشا برای تحلیل و بررسی **عملکرد کاربران خاصی** مانند **آقای فرهادیان** – که از فعالترین کاربران در پلتفرم کوئرا به شمار میرود – بهمنظور **ارتقای کیفیت خدمات و محصولات ارائهشده** و با در نظر گرفتن اینکه **ابزارهای متداول در حال حاضر در دسترس نیستند**، او از شما میخواهد تا با استفاده از **یک فایل داکر کامپوز** *(Docker Compose)*، یک [*Selenium Grid*](https://www.selenium.dev/documentation/grid/) اختصاصی راهاندازی کنید.
این *Grid* شامل **یک** *Selenium Hub* و **چندین** *Selenium Node* خواهد بود که امکان **جمعآوری** *(Scraping)* دادهها و **تحلیل عملکرد کاربران فعال کوئرا** را فراهم میسازد. **این زیرساخت** به علیشا کمک خواهد کرد تا اطلاعات لازم برای **بهبود هر چه بیشتر تجربه کاربران** را بهدست آورد و تصمیمات مبتنی بر داده اتخاذ کند.
# پروژه اولیه
برای دانلود **پروژهی اولیه** روی [این لینک](/contest/assignments/85281/download_problem_initial_project/291402/) کلیک کنید.
برای راهاندازی یک *Selenium Grid* برای جمعآوری دادههای کاربران، از یک **فایل** `docker-compose.yml` استفاده خواهیم کرد. شما باید در **فایل** `docker-compose.yml` سرویسهای زیر را تعریف کنید:
## **سرویس سلنیوم هاب** *(Selenium Hub)*
- با استفاده از **ایمیج** زیر، یک **سرویس** با نام `selenium-hub` ایجاد کنید.
```
registry.gitlab.com/qio/standard/selenium/hub:4.10.0
```
- **نام کانتینر** را `selenium-hub` قرار دهید.
- **پورت** `4444` را به صورت `4444:4444` به **میزبان** متصل کنید.
## **سرویسهای نودهای سلنیومی** *(Selenium Nodes)*
### **سرویس** *Chrome Node*
با استفاده از **ایمیج** زیر، یک سرویس با نام `chrome` ایجاد کنید:
```
registry.gitlab.com/qio/standard/selenium/node-chrome:4.10.0
```
- **نام کانتینر** باید `chrome-node` باشد.
### **سرویس** *Firefox Node*
با استفاده از **ایمیج** زیر، یک سرویس با نام `firefox` ایجاد کنید:
```
registry.gitlab.com/qio/standard/selenium/node-firefox:4.10.0
```
- **نام کانتینر** باید `firefox-node` باشد.
## **سرویس** *Nginx*
علاوه بر راهاندازی یک *Selenium Grid،* **علیشا** که پیشتر با ابزار **سلنیوم** کار **نکرده** است، از شما میخواهد تا **یک سرویس** با **نام** `nginx` نیز با استفاده از **ایمیج** زیر ایجاد کنید تا او بتواند با ابزاری که برای *Selenium Grid* راهاندازی کردهاید را روی آن تست کند:
```
registry.gitlab.com/qio/standard/nginx:1.20.2-alpine
```
- **نام کانتینر** باید `nginx-server` باشد.
- **پورت ۸۰** باید به صورت `8081:80` به میزبان متصل شود.
- مسیر **محلی** `./nginx/html` باید به مسیر `/usr/share/nginx/html` **درون کانتینر** متصل *(Mount)* شود.
# آنچه باید آپلود کنید
+ **توجه:** شما باید موارد خواسته شده در سوال را **تنها** در قالب **فایل** `docker-compose.yml` پیادهسازی کرده و **ارسال** کنید. همچنین شما باید حتما **تنها** از **ایمیجهای معرفی شده در متن سوال** استفاده کنید. **استفاده از سایر ایمیجها باعث عدم داوری ارسال شما خواهد شد.**
+ **توجه:** شما اجازهی *build* کردن یک ایمیج جدید **نخواهید داشت** و باید از ایمیجهای استاندارد کوئرا استفاده کنید.
+ **توجه:** **نام کانتینرها و سرویسها** باید **دقیقا** عبارات گفته شده در متن سوال باشند.
+ **توجه:** سیستم داوری کوئرا بهصورت خودکار فایل `docker-compose.yml` را با کامند `up` اجرا میکند. **شما نیازی به کد یا اسکریپتی برای اجرای این کار ندارید.**
+ **توجه:** ورژن `docker-compose.yml` باید `3.3` باشد.
``` yaml docker-compose.yml docker
version: "3.3"
# Do not forget that the only available
# selenium hub image is accessible with the following url:
# registry.gitlab.com/qio/standard/selenium/hub:4.10.0
# Do not forget that the only available
# selenium node-chrome image is accessible with the following url:
# registry.gitlab.com/qio/standard/selenium/node-chrome:4.10.0
# Do not forget that the only available
# selenium node-firefox image is accessible with the following url:
# registry.gitlab.com/qio/standard/selenium/node-firefox:4.10.0
# Do not forget that the only available
# nginx image is accessible with the following url:
# registry.gitlab.com/qio/standard/nginx:1.20.2-alpine
```