Cara install Searx metasearch engine di Ubuntu 18.04
Tags: searx, ubuntu, linux, indonesia
Published: 2021-03-19 20:16:20

Searx adalah sebuah metasearch engine, yang tampilan hasil pencariannya adalah gabungan data pencarian milik beberapa search engine sekaligus. Cara kerjanya adalah, sesaat ketika pengguna mengirimkan input berupa keyword (kata kunci), pada saat bersamaan data dari beberapa search engine langsung diminta (query), untuk kemudian setelah selesai dikumpul akan langsung ditampilkan. Proses ini berjalan dengan sangat cepat.

Searx merupakan produk opensoure, dan siapapun bisa dengan mudah membangun platformnya sendiri, untuk keperluan pribadi maupun bisnis.

Konfigurasi VPS yang digunakan adalah sebagai berikut,

![Konfigurasi VPS](https://cdn.hashnode.com/res/hashnode/image/upload/v1615399890006/YpIBLJrXL.jpeg)

---

## Instalasi paket yg dibutuhkan

Jalankan perintah berikut ini.
```bash
sudo apt install git build-essential libxslt-dev python-dev python-virtualenv python-babel zlib1g-dev libffi-dev libssl-dev -y
```

---

## Instalasi searx

Untuk instalasi searx, jalankan perintah dibawah ini secara berurutan.
```bash
cd /usr/local
```
```bash
sudo git clone https://github.com/asciimoo/searx.git
```
```bash
sudo useradd searx -d /usr/local/searx
```
```bash
sudo chown searx:searx -R /usr/local/searx
```

Selanjutnya untuk instalasi dependencies, jalankan perintah dibawah secara berurutan.
```bash
cd searx/
```
```bash
sudo -u searx -i
```

Dalam bash menu user `searx`, jalankan perintah berikut secara berurutan.
```bash
virtualenv searx-ve
```
```bash
. ./searx-ve/bin/activate
```
```bash
./manage.sh update_packages
```

---

## Konfigurasi searx

Masih dalam bash user `searx`, jalankan perintah berikut,
```bash
sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
```

Edit file `settings.yml`
```bash
vim searx/settings.yml
```

Cari bagian `bind_address` dan ubah nomor IP standar dengan IP server.
```conf
bind_address : "ISI_IP_SERVER_ANDA"
```

Simpan perubahan pada file ini, kemudian jalankan `searx` dengan perintah berikut.
```bash
python searx/webapp.py
```

Akan muncul output seperti dibawah ini.
```log
WARNING:searx.webapp: *** Deprecation Warning ***
WARNING:searx.webapp: Python2 is deprecated
 * Serving Flask app "webapp" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
INFO:werkzeug: * Running on http://NO_IP_SERVER_ANDA:8888/ (Press CTRL+C to quit)
```

---

## Cek instalasi Searx

Buka alamat `http://NO_IP_SERVER_ANDA:8888` pada browser, pastikan `searx` sudah berjalan. Jika sudah, tekan <kbd>Ctrl+C</kbd> untuk menghentikan `searx` dan langsung eksekusi perintah berikut.
```bash
sed -i -e "s/debug : True/debug : False/g" searx/settings.yml
```

Keluar dari bash `searx`, dengan mengetik `exit`.

---

## Instalasi uwsgi

Jalankan perintah berikut untuk menginstalasi `uwsgi` dan komponen pendukung lainnya.
```bash
sudo apt install uwsgi uwsgi-plugin-python -y
```

Lalu buat file bernama `searx.ini`.
```bash
sudo vim /etc/uwsgi/apps-available/searx.ini
```

Salin dan isi dengan baris konten dibawah ini.
```ini
[uwsgi]
# Who will run the code
uid = searx
gid = searx

# disable logging for privacy
disable-logging = true

# Number of workers (usually CPU count)
workers = 4

# The right granted on the created socket
chmod-socket = 666

# Plugin to use and interpretor config
single-interpreter = true
master = true
plugin = python
lazy-apps = true
enable-threads = true

# Module to import
module = searx.webapp

# Support running the module from a webserver subdirectory.
route-run = fixpathinfo:

# Virtualenv and python path
virtualenv = /usr/local/searx/searx-ve/
pythonpath = /usr/local/searx/
chdir = /usr/local/searx/searx/
```

Simpan perubahan pada file diatas, kemudian jalankan perintah dibawah ini secara berurutan, guna mengaktifkan dan menjalankan `uwsgi`.
```bash
cd /etc/uwsgi/apps-enabled
```
```bash
sudo ln -s ../apps-available/searx.ini
```
```bash
sudo /etc/init.d/uwsgi restart
```

Instalasi berhasil, jika outputnya terlihat seperti ini.
```log
[ ok ] Restarting uwsgi (via systemctl): uwsgi.service.
```

---

## Instalasi Nginx

`uwsgi` tidak dapat berjalan, apabila tidak ada webserver seperti Apache atau Nginx. Pada tutorial ini, webserver yang digunakan adalah Nginx.

Instal `nginx` dengan perintah berikut.
```bash
sudo apt install nginx -y
```

Selanjutnya buatlah sebuah file yang berfungsi sebagai block server untuk `searx` pada `nginx`.
```bash
sudo vim /etc/nginx/sites-available/searx
```

Isilah dengan baris konten dibawah ini.
> **PERHATIAN**, domain yang digunakan sebagai contoh dalam artikel ini adalah `searx.contoh.com`. Pastikan untuk menggantinya lebih dulu sebelum menyimpan perubahan pada file ini.

```bash
server {
    listen 80;
    server_name searx.contoh.com;
    root /usr/local/searx/searx;

    location /static {
    }

    location / {
            include uwsgi_params;
            uwsgi_pass unix:/run/uwsgi/app/searx/socket;
    }
}
```

Setelah disimpan, langkah selanjutnya membuat symlink dengan perintah,
```bash
sudo ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
```

Restart `nginx` dan `uwsgi`.
```bash
sudo service nginx restart
```
```bash
sudo service uwsgi restart
```

---

## Langkah melindungi privasi (optional)

Untuk keperluan privacy, nonaktifkan kemampuan untuk merekam data telemetri penggunaan pada `searx` dengan cara memblokir log file. Jalankan langkah berikut.

Edit file `/etc/nginx/sites-available/default` dengan cara.
```bash
sudo vim /etc/nginx/sites-available/searx
```

Tambahkan baris dibawah ini persis dibawah baris `uwsgi_pass`.
```conf
access_log /dev/null;
error_log /dev/null;
```

Hasil akhirnya akan terlihat seperti ini.
```bash
server {
    listen 80;
    server_name searx.contoh.com;
    root /usr/local/searx/searx;

    location /static {
    }

    location / {
            include uwsgi_params;
            uwsgi_pass unix:/run/uwsgi/app/searx/socket;
            access_log /dev/null;
            error_log /dev/null;
    }
}
```

Restart kembali `nginx`.
```bash
sudo service nginx restart
```

Sampai tahap ini, `searx` sudah bisa diakses dengan menggunakan URL domain yang baru.