<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Zoist</title>
        <link>https://paragraph.com/@zoist</link>
        <description>undefined</description>
        <lastBuildDate>Sat, 16 May 2026 07:15:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Zoist</title>
            <url>https://storage.googleapis.com/papyrus_images/0819b0b7f40febdf26f12503c55a6446c236e3972f0872fd414bdda341102e49.jpg</url>
            <link>https://paragraph.com/@zoist</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Protecting Our Searches - Setting up SearXNG]]></title>
            <link>https://paragraph.com/@zoist/protecting-our-searches-setting-up-searxng</link>
            <guid>9DRMmGj2cVmUU810rAG6</guid>
            <pubDate>Wed, 24 Aug 2022 16:51:49 GMT</pubDate>
            <description><![CDATA[With the use of social media to follow topics of interest, personal information is collected and used to keep us engaged. We should be able to be informed about any subject without impacting our online experience. An experiment was performed by searching about Cambodian politics over a weekend. In no time, there were notifications on Twitter about a Cambodian politician running for office. Multiple users searched for “2020 elections”. There were different results.After getting the same type o...]]></description>
            <content:encoded><![CDATA[<p>With the use of social media to follow topics of interest, personal information is collected and used to keep us engaged. We should be able to be informed about any subject without impacting our online experience.</p><p>An experiment was performed by searching about Cambodian politics over a weekend. In no time, there were notifications on Twitter about a Cambodian politician running for office. Multiple users searched for “2020 elections”. There were different results.</p><blockquote><p><strong><em>After getting the same type of information over multiple platforms, it became clear how easy it is to become biased on a subject.</em></strong></p></blockquote><p>Search engines create a profile base on searches and the information it feeds back is tailored to that profile, perhaps, providing unpopular, biased, and incorrect information.</p><pre data-type="codeBlock" text="Personal information is sold to third parties.
"><code>Personal information <span class="hljs-built_in">is</span> sold <span class="hljs-keyword">to</span> third parties.
</code></pre><p>There is concern about how data is collected and who is entrusted to have access to it.</p><p>There is no telling how it will be used in the future and its effects on users.</p><p>It is not a matter of trusting search engines. The US government has been collecting personal data through tech giants for over a decade as the Guardian reported on the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theguardian.com/world/2014/mar/19/us-tech-giants-knew-nsa-data-collection-rajesh-de">NSA’s collection of data</a> from Yahoo, Apple, Google, Microsoft, Facebook, and AOL.</p><blockquote><pre data-type="codeBlock" text="There have been efforts around the world to take action in privacy protection.
"><code>There have been efforts around the world <span class="hljs-keyword">to</span> <span class="hljs-keyword">take</span> action <span class="hljs-keyword">in</span> privacy protection.
</code></pre></blockquote><p>While searching on the internet in incognito mode can give a false sense of privacy, this removes existing cookies from future browsing and does not record browsing history in the browser. The IP address and browser fingerprint are exposed to search engines.</p><p>DuckDuckGo may not be as private as thought after a security researcher found a &quot;privacy hole&quot;, a confidential search agreement in which the DuckDuckGo browser doesn’t block all Microsoft trackers.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/687b80f2e0b2119855dbb9e25f7536d5528c8865434f9058d2559ed690aa45c8.png" alt="Screenshot - privacy engineer comment on DuckDuckGo&apos;s CEO Twits" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Screenshot - privacy engineer comment on DuckDuckGo&apos;s CEO Twits</figcaption></figure><blockquote><p>A way to protect your privacy is by taking matters into your own hands not leaving it to chance that search engines are acting with the best intentions. By saying taking the matter into your own hands, I&apos;m talking about SearXNG.</p></blockquote><h2 id="h-what-is-searxng" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What is SearXNG</h2><p>SearXNG is a fork of Searx. It is an open source <code>&quot;metasearch engine&quot;</code>, meaning it doesn&apos;t itself index the internet, but instead <strong><em>sends search queries out to several other search engines</em></strong>*.* It then brings those results together, presenting them in a unified search result.</p><h2 id="h-how-does-searxng-help-protect-our-privacy" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How does SearXNG help protect our privacy?</h2><ul><li><p>SearXNG removes private data from requests going to search services.</p></li><li><p>It doesn’t forward anything from third-party services through search services like ads.</p></li><li><p>It removes private data from requests going to search engines by not sending cookies.</p></li><li><p>It generates a random browser profile on each request.</p></li></ul><h2 id="h-using-a-hosted-searxng" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Using a hosted SearXNG</h2><p>I have hosted an instance of SearXNG in the cloud which you can use at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://leidy.info/">https://leidy.info</a>. In the next part of this article, I will show how to deploy an instance of SearchXNG for free.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85467ec434febbaee8c44ecbbd5efbf2a7dd5f7058ab1044fb08e16ffb93ca87.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-hosting-searxng-in-the-cloud" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hosting SearXNG in the cloud</h2><p>The quickest and easiest way is, to host SearXNG in the cloud is by using the searXNG docker-compose image. I chose to use AWS because I think is very easy and besides, they provide a 1-year free tier. However, you can do it using any server of choice.</p><h2 id="h-creating-an-ec2-instance" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Creating an EC2 Instance</h2><ol><li><p>Create an AWS account and head over to the EC2 console.</p></li><li><p>Click on <code>“Launch Instance”</code>.</p></li><li><p>Select <code>Ubuntu version 20.04 LTS</code>.</p></li><li><p>For instance type select t2.micro <code>“Free tier eligible”</code>.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8153de7befd697b0116b9a937b0e89e2b96dc854818f323771e3ed2945260ca0.png" alt="AWS Instance type dashboard screenshot" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">AWS Instance type dashboard screenshot</figcaption></figure><h3 id="h-create-a-new-key-pair" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Create a new key pair</h3><p>To securely connect over SSH to the server. Save the pem file in a secure location and set its permissions to read only by you, or <code>chmod 400</code> if using Mac or Linux.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2cd6a070205bf898e90c572be4898581a83525d374703368b719bd03575cf7a5.png" alt="AWS Key pair dashboard screenshot" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">AWS Key pair dashboard screenshot</figcaption></figure><h3 id="h-for-the-security-groups" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">For the security groups</h3><p>Set ssh to allow your IP address (if you do not have a static IP you may have to come back and update this if your IP address changes).  Add HTTP and HTTPS from anywhere so anyone can connect via their browser and use SearXNG.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9eb5cf438e051ab89a4d56d1c550d71c6c484397cb315c1782b0a77626b2835e.png" alt="AWS Security Groups dashboard screenshot" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">AWS Security Groups dashboard screenshot</figcaption></figure><p>Finally, click on <code>“Launch Instance”</code> and you now have an <strong>Ubuntu server</strong>.</p><h2 id="h-create-an-elastic-ip" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Create an elastic IP</h2><p>Elastic IP addresses never change and you can assign them to any resource.</p><ol><li><p>Under the dashboard, select <code>“Elastic IPs”</code>.</p></li><li><p>Select <code>“Allocate Elastic IP Address”</code> then</p></li><li><p><code>“Allocate”</code>. The Elastic IP address will get created and will show on the list.</p><p>Now we need to associate this IP address with our EC2 Instance.</p></li><li><p>Select the created Elastic IP address.</p></li><li><p>Click on <code>“Actions”</code>.</p></li><li><p>Then click <code>“Associate Elastic IP address”</code>.</p><p>You can view the details of the created instance including the newly added elastic IP by going to the EC2 instance dashboard.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3599ad90dee72a6ae88160cf0f80cf603bf65629b2933198c847195e4049f5cb.png" alt="AWS Elastic IP address dashboard screenshot" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">AWS Elastic IP address dashboard screenshot</figcaption></figure><h2 id="h-connecting-to-instance" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Connecting to Instance</h2><p>SSH to your instance:</p><p><code>ssh -i /path/to/your/private_key_name.pem ubuntu@your.instance.ip</code></p><h2 id="h-installing-docker-and-searxng" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Installing docker and SearXNG</h2><ol><li><p>First, make sure the server is up to date <code>$ sudo apt update &amp;&amp; sudo apt upgrade -y</code></p></li><li><p>Install docker <code>$ sudo apt install docker.io -y</code> <code>$ sudo apt install docker-compose -y</code></p></li><li><p>Change to the /usr/local/ directory <code>$ cd /usr/local/</code></p></li><li><p>Clone the searxng docker container <code>$ git clone https://github.com/searxng/searxng.git</code></p></li><li><p>Change the directory to the one you just cloned</p><p><code>$ cd searxng-docker</code></p></li><li><p>Use sed to replace the string in the <code>settings.yml</code> file secret_key: &quot;ultrasecretkey with a random 32-digit string using the OpenSSL command <code>$ sed -i &quot;s|ultrasecretkey!|$(openssl rand -hex 32)|g&quot; searxng/settings.yml</code></p></li><li><p>Edit the <code>.env</code> file and insert your domain name (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://leidy.info">example.com</a>) after the <code>SEARX_HOSTNAME=</code> variable and add a valid email to the end of the <code>LETSENCRYPT_EMAIL=</code> variable. This is required for getting a valid Let’s Encrypt certificate.</p></li><li><p>Run SearXNG <code>$ docker-compose up</code></p></li></ol><p>docker-compose is telling docker how to build our SearXNG environment. There is also an image using Caddy, which is a reverse proxy server with bundled support for getting SSL certificates from Let’s Encrypt. It is going to build 3 docker containers and connect them and make it work like magic and all you have to do is type one command.</p><pre data-type="codeBlock" text="$ docker-compose up -d
"><code>$ docker<span class="hljs-operator">-</span>compose up <span class="hljs-operator">-</span>d
</code></pre><p>You can personalize your hosted SearXNG by going into searxng and updating the <code>settings.yml file</code></p><p>For example, here I set it up to autocomplete using <code>duckduckgo</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/199203e66ed8ba555e8748d92c3da2692dc0e7b3742250d606c8255076ad1861.png" alt="settings.yml file" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">settings.yml file</figcaption></figure><h2 id="h-pointing-your-domain-to-your-instance" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Pointing your domain to your instance</h2><p>You will need to point your domain to your EC2 instance public IP address where SearXNG is up and running. To do this, head over to your domain provider where you bought the domain and go to the DNS section to add records. <em>Create an</em> <code>“A Record”</code>, the host will be at the root or current origin “@“ and the value will be your EC2 instance IP address (the elastic IP address you created previously).</p><h2 id="h-final-thoughts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Final thoughts</h2><p>You can use a public hosted instance of SearXNG (hosted by another company or person) however, you don’t know what is happening in the background with those requests.</p><p>The best thing you can do is to host your instance as explained above to have full control and know what is happening and not happening when you use it.</p><blockquote><p><strong>If you need additional protection, you should be using a VPN to hide your IP address.</strong></p></blockquote><p>It is your responsibility to protect your privacy even if you are not browsing the internet with malicious intentions. Remember, no one can guarantee you that in the future all the data collected about you won’t be used against you.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85467ec434febbaee8c44ecbbd5efbf2a7dd5f7058ab1044fb08e16ffb93ca87.png" alt="Deployed SearXNG on the server" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Deployed SearXNG on the server</figcaption></figure><p>subscribe://</p>]]></content:encoded>
            <author>zoist@newsletter.paragraph.com (Zoist)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4b5846de3a95b6b57eb941ccd0d996f09af4070c15e798a30a519d0428c877bb.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>