چندین روز پیش، شخصی در لینکدین خبری از ساخته شدن یک فراجستجوگر داده بود که به شخصه برای من موضوع جالبی بوده همیشه. منتها طبق عادات مالوف هموطنانمون، بزرگ حرف زدن و زیادی مبالغهکردن هم میشد در اون حرفها دید. چیزی که ساخته شده بود اینطور توضیح داده شده بود که:
فراجستجوگر ساخته شده توسط تیمی از بهترین متخصصان که در یک دانشگاه خاص درس خواندند (که خب همین جملات، بدون توجه به اسم دانشگاه و موسسه و … معمولا پرچم قرمزی در بحث تولیدات ملی و بومیه) به این شکل کار میکنه که نتایج جستجو رو از وبسایتهای معروف به موتور جست و جو مانند گوگل، داکداکگو، بینگ و … برمیگردونه و رد پای شما رو از جست و جو حذف میکنه.
وقتی این رو خوندم، فهمیدم که با یک فراجستجوگر یا metasearch engine روبرو هستیم و خب گفتم بد نیست که با هم یکی بسازیم. قبل از هرچیزی، اگر نمیدونید فراجستجوگر چیه، میتونید به اینجا مراجعه کنید و تعریفش رو بخونید. برای ادامه دادن به مطالعه این مطلب هم لازمه که کمی لینوکس و مدیریت سیستم بلد باشید.
آشنایی با searx
خب searx یک نرمافزار آزاده که هدفش، بهبود تجربه جست و جوی افراد در اینترنته. این نرمافزار، به دو صورت قابل دسترسیه. اول این که تعدادی نمونه عمومی داره (لینک نمونههای عمومی در اینجا قرار گرفته) و هم به صورت «خودمیزبان» یا همون self-hosted. متد خودمیزبان یعنی شما به عنوان کاربر، میتونید به صورت رایگان یا با پرداخت پول (بسته به مدل کسب و کار و توسعه اون پروژه خاص)، اون نرمافزار رو روی هاست یا سرور مورد نظر خودتون نصب کنید.
در این آموزش، قراره با کمک یک سرور لینوکسی، یک زیردامنه، یک کارساز وب و داکر؛ یک فراجستجوگر ساده رو به کمک هم بیاریم بالا. به این شکل میتونیم هم یک نمونه عمومی عرضه کنیم، هم این که دیتای کمتری در اختیار شرکتهایی مثل گوگل یا مایکروسافت بذاریم.
ساخت فراجستجوگر
برای ساخت فراجستجوگر خودمون، نیاز به موارد زیر داریم:
- سرور لینوکسی. من شخصا از اوبونتو ۱۸.۰۴ استفاده کردم. برای پردازش بهتر نتایج و نخوردن به مشکل تحریم و …؛ بهتره که سرور داخل ایران هم نباشه. به همین خاطر، من از سرور هلند استفاده کردم (کشور محل قرارگیری سرور، کاملا به خودتون بستگی داره).
- یک دامنه یا زیردامنه. برای این پروژه من از searx[dot]haghiri75[dot]com استفاده کردم.
- کمی آشنایی به کارهای سروری. اگر آشنایی خاصی ندارید هم مهم نیست! در حد لزوم در این مطلب یاد میگیرید 😁
آمادهسازی سرور
وقتی سرور رو از ارائهدهنده سرور تحویل گرفتیم (با فرض اوبونتو/دبیان بودنش) نیازه تا اول لیست بستههای اون رو کمی به روز کنیم:
sudo apt update
و اگر لازم شد، کل سیستمعامل هم یک بار بهروز میکنیم:
sudo apt full-upgrade
بعد از این که این اتفاقات رخ داد، یک دور سرور رو ریبوت میکنیم و پس از بوت شدن مجدد و اتصال به سرور، چند بسته نصب میکنیم:
sudo apt install nginx python3-certbot-nginx docker.io
خب ببینیم این بستهها برای چین؟
- nginx: این بسته، وبسرور یا همون کارساز وب ماست. چیزی که باعث میشه ما بتونیم بدون مشکل، یک وبسایت یا نرمافزار تحت وب رو استفاده کنیم.
- python3-certbot-nginx: از این بسته استفاده خواهیم کرد تا یک گواهی SSL برای وبسایت خودمون بگیریم.
- docker.io: داکر یک سیستم کانتینرییزشنه. در واقع نرمافزارها رو داخل بستههای کوچولو قرار میده و همه ملزوماتشون اونجاست. فقط تنها موردی که داره، اینه که از هسته سیستم عامل استفاده میکنه برای مدیریت فرایندها (در واقع تفاوتش با ماشین مجازی همینه).
حالا ما سرور رو آماده کردیم. گام بعدی چیه؟
آمادهسازی دامنه
برای آمادهسازی دامنه، کافیه که یک رکورد A با IP سرور مورد نظر ایجاد کنید. البته در بعضی موارد از CNAME هم میشه استفاده کرد اما اینجا چون سرور از وبسایت جدا بود، یک A تعریف شد. بعد از این که رکورد رو تعریف کردیم، باید ۵ تا ۱۰ دقیقه صبر کنیم تا عموم DNS Server های اینترنت، بشناسنمون. بعدش میتونیم به کارمون ادامه بدیم.
حالا ۱۰ دقیقه گذشت و یک قهوه هم خوردیم و آمادهایم که مرحله بعدی رو انجام بدیم.
دریافت گواهی SSL
خب دریافت گواهی SSL هم بسیار سادهست. کافیه این دستور رو در سرور اجرا کنید (و دامنه من رو با دامنه خودتون عوض کنید):
sudo certbot -d searx.haghiri75.com --nginx
در این مرحله شما باید آدرس ایمیلتون رو وارد کنید و به چند سوال هم پاسخ بدید. در کل همهچیز با یک wizard اتفاق میفته و نیازی نیست که زحمت زیادی بکشید. فقط یک نکته مهم رو اینجا باید بهش دقت کنیم. اون نکته اینه که certbot اینجا خودش nginx رو استارت میزنه. در مرحله بعدی، نیاز داریم که به این مهم توجه کنیم.
راهاندازی داکر و نصب فراجستجوگر
خب اول از همه کاربر خودمون (که در اینجا فرض میگیریم نام کاربریش هم Ubuntu ئه) رو به گروه داکر اضافه میکنیم:
sudo usermod -aG docker ubuntu
بعدش کافیه یک بار از نشست SSH خارج شیم و دوباره به سرور SSH بزنیم. دقت داشته باشید که این بخش الزامی نیست؛ ولی اگر شما این کار رو نکنید بعدا در استفاده از داکر، نیازمند دسترسی ریشه خواهید بود. نگران دسترسی ریشه هم نباشید چون با sudo قابل حله.
بعد از این مورد، ایمیج searx رو از رجیستری داکر دریافت میکنیم:
docker pull searx/searx
خب در حال حاضر، اتفاق خاصی میافته؟ خیر. فقط تصویری که searx روی اون نصب شده، روی سرور ما دانلود شده.
بعد از اون، نیازداریم که یک کانتینر براش بسازیم. برای این، مراحل زیر رو طی میکنیم:
mkdir searx cd searx docker run --rm -d -v ${PWD}/searx:/etc/searx -p 8080:8080 -e BASE_URL=http://localhost:8080/ searx/searx
خب تبریک به شما، الان شما یک فراجستجوگر دارید.
اما صبر کنید! هنوز نمیتونیم بهش دسترسی پیدا کنیم. پس چه کنیم؟
پراکسی معکوس برای دسترسی به محتوا
خب اینجا نیاز داریم که از پراکسی معکوس استفاده کنیم. انجینکس علاوه بر این که وبسروره، پراکسی معکوس هم هست و خیلی از ما عمدتا از قابلیت پراکسی معکوسش برای اجرای نرمافزارهای تحت وبمون استفاده میکنیم. مثل همین آموزش دپلوی کردن یک پروژه ریلز نوشته بودم (لینک). دونستن این که پراکسی معکوس چیه و چی کار میکنه، از ملزومات پایهای مدیریت سیستم و همچنین دواپس و CI/CD محسوب میشه (جهت اطلاعات بیشتر این پست رو بخونید).
پس اگر میخواهید در آینده مهندس DevOps بشید، شاید بتونید این مطلب رو فرصتی برای تمرین یکی از مواردش قرار بدید. فکر کنم زیاد صحبت کردیم. بریم سر اصل مطلب. برای این که بتونیم از پراکسی معکوس استفاده کنیم، کافیه که اول با ادیتور دلخواهمون، فایل پیکربندی رو باز کنیم:
sudo nano /etc/nginx/sites-enabled/default
و سپس دنبال دامینمون بگردیم (در نانو با ctrl + W میشه). بعد از این که دامینمون رو پیدا کردیم کافیه بخش location / رو پیدا کنیم (معمولا دو سه خط پایینتر از دامین و تنظیماتشه) و سپس به این شکل درش بیاریم:
location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; proxy_pass http://localhost:8080; }
و بعدش هم کافیه که دستور زیر رو اجرا کنیم تا انجینکس ریستارت بشه:
sudo systemctl restart nginx
استفاده از فراجستجوگر شخصی
سخن آخر
نرمافزار searx مثل هر نرمافزار متنباز و آزاد دیگری، قابلیت شخصیسازی داره و همین موضوع که با زبان پایتون نوشته شده هم نشون میده که شخصیسازیش احتمالا از چیزی که فکر میکنیم، سادهتره. به همین خاطر میتونیم به سادگی این نرمافزار رو تغییر بدیم که مطابق میل خودمون کار کنه و طبیعتا آموزشش هم در اینترنت وجود داره.
موضوع بعدی اینه که فراجستجوگرها، علاوه بر این که میتونن در حفظ حریم شخصی و … موثر باشند، میتونن کاملا بیزنسی هم کار کنند. مثلا هرکلید واژهای که سرچ کنید رو صرفا در موضوع خاصی دنبالش بگردند. مثلا شما اگر سرچ کنید «سیبزمینی» فقط در وبسایتهایی که وبینار میزبانی میکنند دنبالش بگرده. وقتی سرچ میکنید «قشم» فقط در وبسایتهای گردشگری دنبالش بگرده و الی آخر.
در این مطلب قصد داشتم این موضوع رو نشونتون بدم که داشتن یک موتور جست و جوی امن، اونقدرا که فکر میکنید سخت نیست و با کمک نرمافزارهای آزاد، به سادگی میتونید یکی رو خودتون بسازید. در پایان مطلب، جا داره از شما بابت خوندن این مطلب تشکر کنم. همچنین، ممنون میشم مطالب و خطخطیهای من رو در ویرگول هم بخونید و نظر بدید 🙂