on master help sign in
gh-pages: updated
commit217cb8a1dbad5ffcf04807ed3bb7187941143b0f authorMarkus Heiser <markus.heiser@darmarit.de> dateSun 19 Apr 2020, 12:37 (6 years ago) parent38f98c8
83 files changed+6430−2511
_downloads/ad0ebe55d6b53b1559e0ca8dee6f30b9/reST.rst+3−4 _images/DOT-57a4a7f78690d0b6b884bc59f36e84cfb0b61f76.svg+8−8 _images/arch_public.dot+4−4 _images/arch_public.svg+58−58 _images/hello.svg+7−7 _images/math/07c9ff4251510b06013159f4e45ec9ab97044096.svg+25 _images/math/3b8127a8eed95247f9249ea6c85e8e86df1baa82.svg+25 _images/math/6673b43f9fe29455c1fcd1164e5844698cc64d38.svg+22 _images/math/a6a994cb6e7278ec30eaebe7e636046d3deccb5b.svg+43 _sources/admin/architecture.rst.txt+9−5 _sources/admin/buildhosts.rst.txt+63−11 _sources/admin/filtron.rst.txt+158−106 _sources/admin/index.rst.txt+8−1 _sources/admin/installation-apache.rst.txt+514 _sources/admin/installation-docker.rst.txt+28 _sources/admin/installation-nginx.rst.txt+381 _sources/admin/installation-searx.rst.txt+92 _sources/admin/installation-uwsgi.rst.txt+149 _sources/admin/installation.rst.txt+35−322 _sources/admin/morty.rst.txt+7 _sources/admin/settings.rst.txt+7−1 _sources/admin/update-searx.rst.txt+23 _sources/blog/index.rst.txt+2−1 _sources/dev/contribution_guide.rst.txt+5 _sources/dev/index.rst.txt+2−1 _sources/dev/makefile.rst.txt+24−24 _sources/dev/quickstart.rst.txt+5−5 _sources/dev/reST.rst.txt+3−4 _sources/index.rst.txt+10−8 _sources/user/index.rst.txt+2−1 _sources/user/own-instance.rst.txt+4−2 _sources/user/public_instances.rst.txt−3 _sources/utils/filtron.sh.rst.txt+80 _sources/utils/index.rst.txt+53 _sources/utils/lxc.sh.rst.txt+148 _sources/utils/morty.sh.rst.txt+80 _sources/utils/searx.sh.rst.txt+39 _static/documentation_options.js+1 _static/searchtools.js+4−1 _static/searx.css+11−1 admin/api.html+2−2 admin/architecture.html+12−7 admin/buildhosts.html+153−12 admin/engines.html+2−1332 admin/filtron.html+138−91 admin/index.html+59−7 admin/installation-apache.html+648 user/public_instances.html → admin/installation-docker.html+36−6 admin/installation-nginx.html+505 admin/installation-searx.html+358 admin/installation-uwsgi.html+525 admin/installation.html+35−289 admin/morty.html+9−3 admin/plugins.html+2−6 admin/settings.html+16−8 admin/update-searx.html+134 blog/admin.html+2−2 blog/index.html+30−9 blog/intro-offline.html+2−2 blog/private-engines.html+2−2 blog/python3.html+2−2 dev/contribution_guide.html+27−9 dev/engine_overview.html+2−2 dev/index.html+68−10 dev/makefile.html+62−37 dev/plugins.html+2−2 dev/quickstart.html+7−7 dev/reST.html+30−55 dev/search_api.html+2−2 dev/translation.html+2−2 genindex.html+2−2 index.html+26−8 objects.inv search.html+4−6 searchindex.js+1−1 user/index.html+12−4 user/own-instance.html+7−4 user/search_syntax.html+2−2 utils/filtron.sh.html+301 utils/index.html+217 utils/lxc.sh.html+361 utils/morty.sh.html+304 utils/searx.sh.html+177
_downloads/ad0ebe55d6b53b1559e0ca8dee6f30b9/reST.rst+3−4
@@ -326,7 +326,7 @@ Literal blocks
326326The simplest form of :duref:`literal-blocks` is a indented block introduced by
327327two colons (``::``). For highlighting use :dudir:`highlight` or :ref:`reST
328328code` directive. To include literals from external files use directive
329−:dudir:`literalinclude`.
329+:rst:dir:`literalinclude`.
330330
331331.. _reST literal:
332332
@@ -1312,9 +1312,8 @@ others are basic-tabs_ and code-tabs_. Below a *group-tab* example from
13121312
13131313.. literalinclude:: ../admin/buildhosts.rst
13141314 :language: reST
1315− :start-after: .. _system requirements:
1316− :end-before: .. _system requirements END:
1317−
1315+ :start-after: .. SNIP sh lint requirements
1316+ :end-before: .. SNAP sh lint requirements
13181317
13191318.. _math:
13201319
_images/DOT-57a4a7f78690d0b6b884bc59f36e84cfb0b61f76.svg+8−8
@@ -1,31 +1,31 @@
11<?xml version="1.0" encoding="UTF-8" standalone="no"?>
22<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
33 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4−<!-- Generated by graphviz version 2.43.0 (0)
4+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
55 -->
66<!-- Title: foo Pages: 1 -->
77<svg width="62pt" height="116pt"
88 viewBox="0.00 0.00 62.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
99<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
1010<title>foo</title>
11−<polygon fill="white" stroke="transparent" points="-4,4 -4,-112 58,-112 58,4 -4,4"/>
11+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-112 58,-112 58,4 -4,4"/>
1212<!-- bar -->
1313<g id="node1" class="node">
1414<title>bar</title>
15−<ellipse fill="none" stroke="black" cx="27" cy="-90" rx="27" ry="18"/>
16−<text text-anchor="middle" x="27" y="-86.3" font-family="Times,serif" font-size="14.00">bar</text>
15+<ellipse fill="none" stroke="#000000" cx="27" cy="-90" rx="27" ry="18"/>
16+<text text-anchor="middle" x="27" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">bar</text>
1717</g>
1818<!-- baz -->
1919<g id="node2" class="node">
2020<title>baz</title>
21−<ellipse fill="none" stroke="black" cx="27" cy="-18" rx="27" ry="18"/>
22−<text text-anchor="middle" x="27" y="-14.3" font-family="Times,serif" font-size="14.00">baz</text>
21+<ellipse fill="none" stroke="#000000" cx="27" cy="-18" rx="27" ry="18"/>
22+<text text-anchor="middle" x="27" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">baz</text>
2323</g>
2424<!-- bar&#45;&gt;baz -->
2525<g id="edge1" class="edge">
2626<title>bar&#45;&gt;baz</title>
27−<path fill="none" stroke="black" d="M27,-71.7C27,-63.98 27,-54.71 27,-46.11"/>
28−<polygon fill="black" stroke="black" points="30.5,-46.1 27,-36.1 23.5,-46.1 30.5,-46.1"/>
27+<path fill="none" stroke="#000000" d="M27,-71.8314C27,-64.131 27,-54.9743 27,-46.4166"/>
28+<polygon fill="#000000" stroke="#000000" points="30.5001,-46.4132 27,-36.4133 23.5001,-46.4133 30.5001,-46.4132"/>
2929</g>
3030</g>
3131</svg>
_images/arch_public.dot+4−4
@@ -4,11 +4,11 @@ digraph G {
44 edge [fontname="Sans"];
55
66 browser [label="Browser", shape=Mdiamond];
7− rp [label="Reverse Proxy", href="url to configure reverse proxy"];
8− filtron [label="Filtron", href="https://github.com/asciimoo/filtron"];
9− morty [label="Morty", href="https://github.com/asciimoo/morty"];
7+ rp [label="Reverse Proxy", href="https://asciimoo.github.io/searx/utils/filtron.sh.html#public-reverse-proxy"];
8+ filtron [label="Filtron", href="https://asciimoo.github.io/searx/utils/filtron.sh.html"];
9+ morty [label="Morty", href="https://asciimoo.github.io/searx/utils/morty.sh.html"];
1010 static [label="Static files", href="url to configure static files"];
11− uwsgi [label="uwsgi", href="url to configure uwsgi"]
11+ uwsgi [label="uwsgi", href="https://asciimoo.github.io/searx/utils/searx.sh.html"]
1212 searx1 [label="Searx #1"];
1313 searx2 [label="Searx #2"];
1414 searx3 [label="Searx #3"];
_images/arch_public.svg+58−58
@@ -1,156 +1,156 @@
11<?xml version="1.0" encoding="UTF-8" standalone="no"?>
22<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
33 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4−<!-- Generated by graphviz version 2.43.0 (0)
4+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
55 -->
66<!-- Title: G Pages: 1 -->
7−<svg width="618pt" height="415pt"
8− viewBox="0.00 0.00 618.00 415.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9−<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 411)">
7+<svg width="618pt" height="529pt"
8+ viewBox="0.00 0.00 618.00 529.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 525)">
1010<title>G</title>
11−<polygon fill="white" stroke="transparent" points="-4,4 -4,-411 614,-411 614,4 -4,4"/>
11+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-525 614,-525 614,4 -4,4"/>
1212<g id="clust1" class="cluster">
1313<title>cluster_searx</title>
14−<polygon fill="#fafafa" stroke="black" points="8,-8 8,-330 602,-330 602,-8 8,-8"/>
15−<text text-anchor="middle" x="305" y="-314.8" font-family="Sans" font-size="14.00">Searx instance</text>
14+<polygon fill="#fafafa" stroke="#000000" points="8,-8 8,-444 602,-444 602,-8 8,-8"/>
15+<text text-anchor="middle" x="305" y="-428.8" font-family="Sans" font-size="14.00" fill="#000000">Searx instance</text>
1616</g>
1717<!-- browser -->
1818<g id="node1" class="node">
1919<title>browser</title>
20−<polygon fill="#ffffcc" stroke="black" points="75,-407 5.29,-389 75,-371 144.71,-389 75,-407"/>
21−<polyline fill="none" stroke="black" points="16.91,-392 16.91,-386 "/>
22−<polyline fill="none" stroke="black" points="63.38,-374 86.62,-374 "/>
23−<polyline fill="none" stroke="black" points="133.09,-386 133.09,-392 "/>
24−<polyline fill="none" stroke="black" points="86.62,-404 63.38,-404 "/>
25−<text text-anchor="middle" x="75" y="-385.3" font-family="Sans" font-size="14.00">Browser</text>
20+<polygon fill="#ffffcc" stroke="#000000" points="75,-521 5.2878,-503 75,-485 144.7122,-503 75,-521"/>
21+<polyline fill="none" stroke="#000000" points="16.9067,-506.0001 16.9067,-499.9999 "/>
22+<polyline fill="none" stroke="#000000" points="63.3811,-488.0001 86.6189,-488.0001 "/>
23+<polyline fill="none" stroke="#000000" points="133.0933,-499.9999 133.0933,-506.0001 "/>
24+<polyline fill="none" stroke="#000000" points="86.6189,-517.9999 63.3811,-517.9999 "/>
25+<text text-anchor="middle" x="75" y="-499.3" font-family="Sans" font-size="14.00" fill="#000000">Browser</text>
2626</g>
2727<!-- rp -->
2828<g id="node2" class="node">
2929<title>rp</title>
30−<g id="a_node2"><a xlink:href="url to configure reverse proxy" xlink:title="Reverse Proxy">
31−<polygon fill="#ffffcc" stroke="black" points="134,-299 16,-299 16,-263 134,-263 134,-299"/>
32−<text text-anchor="middle" x="75" y="-277.3" font-family="Sans" font-size="14.00">Reverse Proxy</text>
30+<g id="a_node2"><a xlink:href="https://asciimoo.github.io/searx/utils/filtron.sh.html#public-reverse-proxy" xlink:title="Reverse Proxy">
31+<polygon fill="#ffffcc" stroke="#000000" points="134,-413 16,-413 16,-377 134,-377 134,-413"/>
32+<text text-anchor="middle" x="75" y="-391.3" font-family="Sans" font-size="14.00" fill="#000000">Reverse Proxy</text>
3333</a>
3434</g>
3535</g>
3636<!-- browser&#45;&gt;rp -->
3737<g id="edge1" class="edge">
3838<title>browser&#45;&gt;rp</title>
39−<path fill="none" stroke="black" d="M75,-370.97C75,-354.38 75,-328.88 75,-309.43"/>
40−<polygon fill="black" stroke="black" points="78.5,-309.34 75,-299.34 71.5,-309.34 78.5,-309.34"/>
41−<text text-anchor="middle" x="98" y="-341.8" font-family="Sans" font-size="14.00">HTTPS</text>
39+<path fill="none" stroke="#000000" d="M75,-484.6793C75,-467.821 75,-442.5651 75,-423.147"/>
40+<polygon fill="#000000" stroke="#000000" points="78.5001,-423.0501 75,-413.0502 71.5001,-423.0502 78.5001,-423.0501"/>
41+<text text-anchor="middle" x="98" y="-455.8" font-family="Sans" font-size="14.00" fill="#000000">HTTPS</text>
4242</g>
4343<!-- filtron -->
4444<g id="node3" class="node">
4545<title>filtron</title>
46−<g id="a_node3"><a xlink:href="https://github.com/asciimoo/filtron" xlink:title="Filtron">
47−<polygon fill="#ffffcc" stroke="black" points="105.5,-212 44.5,-212 44.5,-176 105.5,-176 105.5,-212"/>
48−<text text-anchor="middle" x="75" y="-190.3" font-family="Sans" font-size="14.00">Filtron</text>
46+<g id="a_node3"><a xlink:href="https://asciimoo.github.io/searx/utils/filtron.sh.html" xlink:title="Filtron">
47+<polygon fill="#ffffcc" stroke="#000000" points="105.5,-288 44.5,-288 44.5,-252 105.5,-252 105.5,-288"/>
48+<text text-anchor="middle" x="75" y="-266.3" font-family="Sans" font-size="14.00" fill="#000000">Filtron</text>
4949</a>
5050</g>
5151</g>
5252<!-- rp&#45;&gt;filtron -->
5353<g id="edge4" class="edge">
5454<title>rp&#45;&gt;filtron</title>
55−<path fill="none" stroke="black" d="M75,-262.8C75,-251.16 75,-235.55 75,-222.24"/>
56−<polygon fill="black" stroke="black" points="78.5,-222.18 75,-212.18 71.5,-222.18 78.5,-222.18"/>
57−<text text-anchor="middle" x="93.5" y="-233.8" font-family="Sans" font-size="14.00">HTTP</text>
55+<path fill="none" stroke="#000000" d="M75,-376.8239C75,-356.2723 75,-322.5472 75,-298.4893"/>
56+<polygon fill="#000000" stroke="#000000" points="78.5001,-298.198 75,-288.198 71.5001,-298.198 78.5001,-298.198"/>
57+<text text-anchor="middle" x="93.5" y="-328.8" font-family="Sans" font-size="14.00" fill="#000000">HTTP</text>
5858</g>
5959<!-- morty -->
6060<g id="node4" class="node">
6161<title>morty</title>
62−<g id="a_node4"><a xlink:href="https://github.com/asciimoo/morty" xlink:title="Morty">
63−<polygon fill="#ffffcc" stroke="black" points="180.5,-212 123.5,-212 123.5,-176 180.5,-176 180.5,-212"/>
64−<text text-anchor="middle" x="152" y="-190.3" font-family="Sans" font-size="14.00">Morty</text>
62+<g id="a_node4"><a xlink:href="https://asciimoo.github.io/searx/utils/morty.sh.html" xlink:title="Morty">
63+<polygon fill="#ffffcc" stroke="#000000" points="180.5,-288 123.5,-288 123.5,-252 180.5,-252 180.5,-288"/>
64+<text text-anchor="middle" x="152" y="-266.3" font-family="Sans" font-size="14.00" fill="#000000">Morty</text>
6565</a>
6666</g>
6767</g>
6868<!-- rp&#45;&gt;morty -->
6969<g id="edge2" class="edge">
7070<title>rp&#45;&gt;morty</title>
71−<path fill="none" stroke="black" d="M97.16,-262.75C103.53,-257.36 110.29,-251.2 116,-245 122.81,-237.6 129.47,-228.9 135.18,-220.84"/>
72−<polygon fill="black" stroke="black" points="138.17,-222.67 140.96,-212.45 132.4,-218.7 138.17,-222.67"/>
73−<text text-anchor="middle" x="271" y="-233.8" font-family="Sans" font-size="14.00">optional: images and HTML pages proxy</text>
71+<path fill="none" stroke="#000000" d="M89.8355,-376.705C98.0006,-366.2543 108.0569,-352.7317 116,-340 124.4983,-326.3785 132.7784,-310.5167 139.2508,-297.3397"/>
72+<polygon fill="#000000" stroke="#000000" points="142.4243,-298.8167 143.6215,-288.2897 136.1209,-295.7724 142.4243,-298.8167"/>
73+<text text-anchor="middle" x="268" y="-328.8" font-family="Sans" font-size="14.00" fill="#000000">optional: images and HTML pages proxy</text>
7474</g>
7575<!-- static -->
7676<g id="node5" class="node">
7777<title>static</title>
7878<g id="a_node5"><a xlink:href="url to configure static files" xlink:title="Static files">
79−<polygon fill="#ffffcc" stroke="black" points="594,-299 504,-299 504,-263 594,-263 594,-299"/>
80−<text text-anchor="middle" x="549" y="-277.3" font-family="Sans" font-size="14.00">Static files</text>
79+<polygon fill="#ffffcc" stroke="#000000" points="594,-413 504,-413 504,-377 594,-377 594,-413"/>
80+<text text-anchor="middle" x="549" y="-391.3" font-family="Sans" font-size="14.00" fill="#000000">Static files</text>
8181</a>
8282</g>
8383</g>
8484<!-- rp&#45;&gt;static -->
8585<g id="edge3" class="edge">
8686<title>rp&#45;&gt;static</title>
87−<path fill="none" stroke="black" d="M134.07,-281C226.43,-281 403.75,-281 493.72,-281"/>
88−<polygon fill="black" stroke="black" points="493.72,-284.5 503.72,-281 493.72,-277.5 493.72,-284.5"/>
89−<text text-anchor="middle" x="319" y="-287.8" font-family="Sans" font-size="14.00">optional: reverse proxy serves directly static files</text>
87+<path fill="none" stroke="#000000" d="M134.074,-395C226.433,-395 403.7479,-395 493.718,-395"/>
88+<polygon fill="#000000" stroke="#000000" points="493.7212,-398.5001 503.7212,-395 493.7211,-391.5001 493.7212,-398.5001"/>
89+<text text-anchor="middle" x="319" y="-401.8" font-family="Sans" font-size="14.00" fill="#000000">optional: reverse proxy serves directly static files</text>
9090</g>
9191<!-- uwsgi -->
9292<g id="node6" class="node">
9393<title>uwsgi</title>
94−<g id="a_node6"><a xlink:href="url to configure uwsgi" xlink:title="uwsgi">
95−<polygon fill="#ffffcc" stroke="black" points="188,-125 130,-125 130,-89 188,-89 188,-125"/>
96−<text text-anchor="middle" x="159" y="-103.3" font-family="Sans" font-size="14.00">uwsgi</text>
94+<g id="a_node6"><a xlink:href="https://asciimoo.github.io/searx/utils/searx.sh.html" xlink:title="uwsgi">
95+<polygon fill="#ffffcc" stroke="#000000" points="188,-163 130,-163 130,-127 188,-127 188,-163"/>
96+<text text-anchor="middle" x="159" y="-141.3" font-family="Sans" font-size="14.00" fill="#000000">uwsgi</text>
9797</a>
9898</g>
9999</g>
100100<!-- filtron&#45;&gt;uwsgi -->
101101<g id="edge5" class="edge">
102102<title>filtron&#45;&gt;uwsgi</title>
103−<path fill="none" stroke="black" d="M92,-175.8C104.3,-163.36 121.09,-146.36 134.78,-132.5"/>
104−<polygon fill="black" stroke="black" points="137.49,-134.75 142.03,-125.18 132.51,-129.83 137.49,-134.75"/>
105−<text text-anchor="middle" x="140.5" y="-146.8" font-family="Sans" font-size="14.00">HTTP</text>
103+<path fill="none" stroke="#000000" d="M87.2143,-251.8239C101.3983,-230.7169 124.9198,-195.7146 141.1515,-171.5603"/>
104+<polygon fill="#000000" stroke="#000000" points="144.0983,-173.4502 146.7709,-163.198 138.2883,-169.5459 144.0983,-173.4502"/>
105+<text text-anchor="middle" x="139.5" y="-203.8" font-family="Sans" font-size="14.00" fill="#000000">HTTP</text>
106106</g>
107107<!-- searx1 -->
108108<g id="node7" class="node">
109109<title>searx1</title>
110−<polygon fill="#ffffcc" stroke="black" points="99.5,-52 16.5,-52 16.5,-16 99.5,-16 99.5,-52"/>
111−<text text-anchor="middle" x="58" y="-30.3" font-family="Sans" font-size="14.00">Searx #1</text>
110+<polygon fill="#ffffcc" stroke="#000000" points="99.5,-52 16.5,-52 16.5,-16 99.5,-16 99.5,-52"/>
111+<text text-anchor="middle" x="58" y="-30.3" font-family="Sans" font-size="14.00" fill="#000000">Searx #1</text>
112112</g>
113113<!-- uwsgi&#45;&gt;searx1 -->
114114<g id="edge6" class="edge">
115115<title>uwsgi&#45;&gt;searx1</title>
116−<path fill="none" stroke="black" d="M134.81,-88.99C121.66,-79.75 105.22,-68.19 90.92,-58.14"/>
117−<polygon fill="black" stroke="black" points="92.54,-55 82.34,-52.11 88.51,-60.73 92.54,-55"/>
116+<path fill="none" stroke="#000000" d="M142.3219,-126.6706C125.7281,-108.4339 100.1175,-80.2876 81.4738,-59.7979"/>
117+<polygon fill="#000000" stroke="#000000" points="84.0217,-57.3975 74.7029,-52.3566 78.8442,-62.1086 84.0217,-57.3975"/>
118118</g>
119119<!-- searx2 -->
120120<g id="node8" class="node">
121121<title>searx2</title>
122−<polygon fill="#ffffcc" stroke="black" points="200.5,-52 117.5,-52 117.5,-16 200.5,-16 200.5,-52"/>
123−<text text-anchor="middle" x="159" y="-30.3" font-family="Sans" font-size="14.00">Searx #2</text>
122+<polygon fill="#ffffcc" stroke="#000000" points="200.5,-52 117.5,-52 117.5,-16 200.5,-16 200.5,-52"/>
123+<text text-anchor="middle" x="159" y="-30.3" font-family="Sans" font-size="14.00" fill="#000000">Searx #2</text>
124124</g>
125125<!-- uwsgi&#45;&gt;searx2 -->
126126<g id="edge7" class="edge">
127127<title>uwsgi&#45;&gt;searx2</title>
128−<path fill="none" stroke="black" d="M159,-88.81C159,-80.79 159,-71.05 159,-62.07"/>
129−<polygon fill="black" stroke="black" points="162.5,-62.03 159,-52.03 155.5,-62.03 162.5,-62.03"/>
128+<path fill="none" stroke="#000000" d="M159,-126.6706C159,-109.2373 159,-82.7482 159,-62.5489"/>
129+<polygon fill="#000000" stroke="#000000" points="162.5001,-62.3566 159,-52.3566 155.5001,-62.3567 162.5001,-62.3566"/>
130130</g>
131131<!-- searx3 -->
132132<g id="node9" class="node">
133133<title>searx3</title>
134−<polygon fill="#ffffcc" stroke="black" points="301.5,-52 218.5,-52 218.5,-16 301.5,-16 301.5,-52"/>
135−<text text-anchor="middle" x="260" y="-30.3" font-family="Sans" font-size="14.00">Searx #3</text>
134+<polygon fill="#ffffcc" stroke="#000000" points="301.5,-52 218.5,-52 218.5,-16 301.5,-16 301.5,-52"/>
135+<text text-anchor="middle" x="260" y="-30.3" font-family="Sans" font-size="14.00" fill="#000000">Searx #3</text>
136136</g>
137137<!-- uwsgi&#45;&gt;searx3 -->
138138<g id="edge8" class="edge">
139139<title>uwsgi&#45;&gt;searx3</title>
140−<path fill="none" stroke="black" d="M183.19,-88.99C196.34,-79.75 212.78,-68.19 227.08,-58.14"/>
141−<polygon fill="black" stroke="black" points="229.49,-60.73 235.66,-52.11 225.46,-55 229.49,-60.73"/>
140+<path fill="none" stroke="#000000" d="M175.6781,-126.6706C192.2719,-108.4339 217.8825,-80.2876 236.5262,-59.7979"/>
141+<polygon fill="#000000" stroke="#000000" points="239.1558,-62.1086 243.2971,-52.3566 233.9783,-57.3975 239.1558,-62.1086"/>
142142</g>
143143<!-- searx4 -->
144144<g id="node10" class="node">
145145<title>searx4</title>
146−<polygon fill="#ffffcc" stroke="black" points="402.5,-52 319.5,-52 319.5,-16 402.5,-16 402.5,-52"/>
147−<text text-anchor="middle" x="361" y="-30.3" font-family="Sans" font-size="14.00">Searx #4</text>
146+<polygon fill="#ffffcc" stroke="#000000" points="402.5,-52 319.5,-52 319.5,-16 402.5,-16 402.5,-52"/>
147+<text text-anchor="middle" x="361" y="-30.3" font-family="Sans" font-size="14.00" fill="#000000">Searx #4</text>
148148</g>
149149<!-- uwsgi&#45;&gt;searx4 -->
150150<g id="edge9" class="edge">
151151<title>uwsgi&#45;&gt;searx4</title>
152−<path fill="none" stroke="black" d="M188.37,-95.68C220.15,-84.51 271.41,-66.49 309.83,-52.98"/>
153−<polygon fill="black" stroke="black" points="311.03,-56.27 319.31,-49.66 308.71,-49.67 311.03,-56.27"/>
152+<path fill="none" stroke="#000000" d="M188.3725,-128.8596C222.8149,-109.9334 280.1532,-78.4257 319.2181,-56.9594"/>
153+<polygon fill="#000000" stroke="#000000" points="321.1614,-59.8852 328.2399,-52.0018 317.7903,-53.7504 321.1614,-59.8852"/>
154154</g>
155155</g>
156156</svg>
_images/hello.svg+7−7
@@ -1,30 +1,30 @@
11<?xml version="1.0" encoding="UTF-8" standalone="no"?>
22<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
33 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4−<!-- Generated by graphviz version 2.43.0 (0)
4+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
55 -->
66<!-- Title: G Pages: 1 -->
77<svg width="76pt" height="116pt"
88 viewBox="0.00 0.00 75.59 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
99<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
1010<title>G</title>
11−<polygon fill="white" stroke="transparent" points="-4,4 -4,-112 71.59,-112 71.59,4 -4,4"/>
11+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-112 71.594,-112 71.594,4 -4,4"/>
1212<!-- Hello -->
1313<g id="node1" class="node">
1414<title>Hello</title>
15−<ellipse fill="none" stroke="black" cx="33.8" cy="-90" rx="30.59" ry="18"/>
16−<text text-anchor="middle" x="33.8" y="-86.3" font-family="Times,serif" font-size="14.00">Hello</text>
15+<ellipse fill="none" stroke="#000000" cx="33.797" cy="-90" rx="30.5947" ry="18"/>
16+<text text-anchor="middle" x="33.797" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Hello</text>
1717</g>
1818<!-- World -->
1919<g id="node2" class="node">
2020<title>World</title>
21−<ellipse fill="none" stroke="black" cx="33.8" cy="-18" rx="33.6" ry="18"/>
22−<text text-anchor="middle" x="33.8" y="-14.3" font-family="Times,serif" font-size="14.00">World</text>
21+<ellipse fill="none" stroke="#000000" cx="33.797" cy="-18" rx="33.5952" ry="18"/>
22+<text text-anchor="middle" x="33.797" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">World</text>
2323</g>
2424<!-- Hello&#45;&#45;World -->
2525<g id="edge1" class="edge">
2626<title>Hello&#45;&#45;World</title>
27−<path fill="none" stroke="black" d="M33.8,-71.7C33.8,-60.85 33.8,-46.92 33.8,-36.1"/>
27+<path fill="none" stroke="#000000" d="M33.797,-71.8314C33.797,-61 33.797,-47.2876 33.797,-36.4133"/>
2828</g>
2929</g>
3030</svg>
_images/math/07c9ff4251510b06013159f4e45ec9ab97044096.svgnew file+25
@@ -0,0 +1,25 @@
1+<?xml version='1.0' encoding='UTF-8'?>
2+<!-- This file was generated by dvisvgm 2.6.3 -->
3+<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='36.523255pt' height='48.422712pt' viewBox='57.608781 53.798251 36.523255 48.422712'>
4+<defs>
5+<path id='g0-0' d='M9.191532 -3.20797C9.428643 -3.20797 9.679701 -3.20797 9.679701 -3.486924S9.428643 -3.765878 9.191532 -3.765878H1.645828C1.408717 -3.765878 1.157659 -3.765878 1.157659 -3.486924S1.408717 -3.20797 1.645828 -3.20797H9.191532Z'/>
6+<path id='g2-43' d='M5.565131 -3.221918H9.414695C9.609963 -3.221918 9.861021 -3.221918 9.861021 -3.472976C9.861021 -3.737983 9.62391 -3.737983 9.414695 -3.737983H5.565131V-7.587547C5.565131 -7.782814 5.565131 -8.033873 5.314072 -8.033873C5.049066 -8.033873 5.049066 -7.796762 5.049066 -7.587547V-3.737983H1.199502C1.004234 -3.737983 0.753176 -3.737983 0.753176 -3.486924C0.753176 -3.221918 0.990286 -3.221918 1.199502 -3.221918H5.049066V0.627646C5.049066 0.822914 5.049066 1.073973 5.300125 1.073973C5.565131 1.073973 5.565131 0.836862 5.565131 0.627646V-3.221918Z'/>
7+<path id='g2-49' d='M4.016936 -8.940473C4.016936 -9.26127 4.016936 -9.275218 3.737983 -9.275218C3.403238 -8.89863 2.705853 -8.382565 1.26924 -8.382565V-7.978082C1.590037 -7.978082 2.287422 -7.978082 3.054545 -8.340722V-1.073973C3.054545 -0.571856 3.012702 -0.404483 1.785305 -0.404483H1.352927V0C1.729514 -0.027895 3.082441 -0.027895 3.542715 -0.027895S5.341968 -0.027895 5.718555 0V-0.404483H5.286177C4.05878 -0.404483 4.016936 -0.571856 4.016936 -1.073973V-8.940473Z'/>
8+<path id='g1-120' d='M6.611208 -5.69066C6.164882 -5.606974 5.997509 -5.272229 5.997509 -5.007223C5.997509 -4.672478 6.262516 -4.560897 6.457783 -4.560897C6.876214 -4.560897 7.169116 -4.923537 7.169116 -5.300125C7.169116 -5.885928 6.499626 -6.150934 5.913823 -6.150934C5.063014 -6.150934 4.588792 -5.314072 4.463263 -5.049066C4.142466 -6.095143 3.277709 -6.150934 3.02665 -6.150934C1.603985 -6.150934 0.850809 -4.323786 0.850809 -4.016936C0.850809 -3.961146 0.9066 -3.891407 1.004234 -3.891407C1.115816 -3.891407 1.143711 -3.975093 1.171606 -4.030884C1.645828 -5.579078 2.580324 -5.87198 2.984807 -5.87198C3.612453 -5.87198 3.737983 -5.286177 3.737983 -4.951432C3.737983 -4.644583 3.654296 -4.323786 3.486924 -3.654296L3.012702 -1.743462C2.803487 -0.9066 2.399004 -0.139477 1.659776 -0.139477C1.590037 -0.139477 1.241345 -0.139477 0.948443 -0.320797C1.45056 -0.418431 1.562142 -0.836862 1.562142 -1.004234C1.562142 -1.283188 1.352927 -1.45056 1.08792 -1.45056C0.753176 -1.45056 0.390535 -1.157659 0.390535 -0.711333C0.390535 -0.125529 1.046077 0.139477 1.645828 0.139477C2.315318 0.139477 2.789539 -0.390535 3.082441 -0.962391C3.305604 -0.139477 4.002989 0.139477 4.519054 0.139477C5.941719 0.139477 6.694894 -1.687671 6.694894 -1.994521C6.694894 -2.064259 6.639103 -2.12005 6.555417 -2.12005C6.429888 -2.12005 6.41594 -2.050311 6.374097 -1.93873C5.997509 -0.711333 5.188543 -0.139477 4.560897 -0.139477C4.072727 -0.139477 3.807721 -0.502117 3.807721 -1.073973C3.807721 -1.380822 3.863512 -1.603985 4.086675 -2.524533L4.574844 -4.42142C4.78406 -5.258281 5.258281 -5.87198 5.899875 -5.87198C5.927771 -5.87198 6.318306 -5.87198 6.611208 -5.69066Z'/>
9+<path id='g1-121' d='M3.668244 1.562142C3.291656 2.092154 2.747696 2.566376 2.064259 2.566376C1.896887 2.566376 1.227397 2.538481 1.018182 1.896887C1.060025 1.910834 1.129763 1.910834 1.157659 1.910834C1.57609 1.910834 1.855044 1.548194 1.855044 1.227397S1.590037 0.795019 1.380822 0.795019C1.157659 0.795019 0.669489 0.962391 0.669489 1.645828C0.669489 2.357161 1.26924 2.84533 2.064259 2.84533C3.459029 2.84533 4.867746 1.562142 5.258281 0.013948L6.625156 -5.425654C6.639103 -5.495392 6.666999 -5.579078 6.666999 -5.662765C6.666999 -5.87198 6.499626 -6.011457 6.290411 -6.011457C6.164882 -6.011457 5.87198 -5.955666 5.760399 -5.537235L4.728269 -1.436613C4.658531 -1.185554 4.658531 -1.157659 4.546949 -1.004234C4.267995 -0.613699 3.807721 -0.139477 3.138232 -0.139477C2.357161 -0.139477 2.287422 -0.9066 2.287422 -1.283188C2.287422 -2.078207 2.66401 -3.152179 3.040598 -4.156413C3.194022 -4.560897 3.277709 -4.756164 3.277709 -5.035118C3.277709 -5.620922 2.859278 -6.150934 2.175841 -6.150934C0.892653 -6.150934 0.376588 -4.128518 0.376588 -4.016936C0.376588 -3.961146 0.432379 -3.891407 0.530012 -3.891407C0.655542 -3.891407 0.669489 -3.947198 0.72528 -4.142466C1.060025 -5.314072 1.590037 -5.87198 2.133998 -5.87198C2.259527 -5.87198 2.496638 -5.87198 2.496638 -5.411706C2.496638 -5.049066 2.343213 -4.644583 2.133998 -4.11457C1.45056 -2.287422 1.45056 -1.827148 1.45056 -1.492403C1.45056 -0.167372 2.399004 0.139477 3.096389 0.139477C3.500872 0.139477 4.002989 0.013948 4.491158 -0.502117L4.505106 -0.488169C4.29589 0.334745 4.156413 0.878705 3.668244 1.562142Z'/>
10+<path id='g1-122' d='M1.771357 -1.129763C2.371108 -1.8132 2.859278 -2.245579 3.556663 -2.873225C4.393524 -3.598506 4.756164 -3.947198 4.951432 -4.156413C5.927771 -5.118804 6.41594 -5.927771 6.41594 -6.039352S6.304359 -6.150934 6.276463 -6.150934C6.178829 -6.150934 6.150934 -6.095143 6.081196 -5.997509C5.732503 -5.397758 5.397758 -5.104857 5.035118 -5.104857C4.742217 -5.104857 4.588792 -5.230386 4.323786 -5.565131C4.030884 -5.913823 3.793773 -6.150934 3.38929 -6.150934C2.371108 -6.150934 1.75741 -4.881694 1.75741 -4.588792C1.75741 -4.546949 1.771357 -4.463263 1.896887 -4.463263C2.008468 -4.463263 2.022416 -4.519054 2.064259 -4.616687C2.30137 -5.174595 2.970859 -5.272229 3.235866 -5.272229C3.528767 -5.272229 3.807721 -5.174595 4.100623 -5.049066C4.630635 -4.825903 4.853798 -4.825903 4.993275 -4.825903C5.090909 -4.825903 5.1467 -4.825903 5.216438 -4.839851C4.756164 -4.29589 4.002989 -3.626401 3.375342 -3.054545L1.966625 -1.75741C1.115816 -0.892653 0.599751 -0.069738 0.599751 0.027895C0.599751 0.111582 0.669489 0.139477 0.753176 0.139477S0.850809 0.125529 0.948443 -0.041843C1.171606 -0.390535 1.617933 -0.9066 2.133998 -0.9066C2.426899 -0.9066 2.566376 -0.808966 2.84533 -0.460274C3.110336 -0.153425 3.347447 0.139477 3.793773 0.139477C5.160648 0.139477 5.941719 -1.63188 5.941719 -1.952677C5.941719 -2.008468 5.927771 -2.092154 5.788294 -2.092154C5.676712 -2.092154 5.662765 -2.036364 5.620922 -1.896887C5.314072 -1.073973 4.491158 -0.739228 3.947198 -0.739228C3.654296 -0.739228 3.375342 -0.836862 3.082441 -0.962391C2.524533 -1.185554 2.371108 -1.185554 2.189788 -1.185554C2.050311 -1.185554 1.896887 -1.185554 1.771357 -1.129763Z'/>
11+</defs>
12+<g id='page1'>
13+<use x='59.270442' y='62.786766' xlink:href='#g2-49'/>
14+<rect x='58.804295' y='68.456606' height='0.55789' width='7.760768'/>
15+<use x='58.804295' y='81.789907' xlink:href='#g1-120'/>
16+<use x='70.860038' y='72.222482' xlink:href='#g2-43'/>
17+<use x='85.942577' y='62.786766' xlink:href='#g2-49'/>
18+<rect x='85.777106' y='68.456606' height='0.55789' width='7.159416'/>
19+<use x='85.777106' y='81.789907' xlink:href='#g1-121'/>
20+<rect x='57.608781' y='86.175621' height='0.55789' width='36.523255'/>
21+<use x='60.284264' y='99.508922' xlink:href='#g1-121'/>
22+<use x='70.543155' y='99.508922' xlink:href='#g0-0'/>
23+<use x='84.490862' y='99.508922' xlink:href='#g1-122'/>
24+</g>
25+</svg>
_images/math/3b8127a8eed95247f9249ea6c85e8e86df1baa82.svgnew file+25
@@ -0,0 +1,25 @@
1+<?xml version='1.0' encoding='UTF-8'?>
2+<!-- This file was generated by dvisvgm 2.6.3 -->
3+<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='23.092891pt' height='29.523663pt' viewBox='57.608781 53.79825 23.092891 29.523663'>
4+<defs>
5+<path id='g0-0' d='M6.434044 -2.245569C6.600021 -2.245569 6.775761 -2.245569 6.775761 -2.440836S6.600021 -2.636103 6.434044 -2.636103H1.152075C0.986098 -2.636103 0.810358 -2.636103 0.810358 -2.440836S0.986098 -2.245569 1.152075 -2.245569H6.434044Z'/>
6+<path id='g2-43' d='M3.993208 -2.245569H6.717181C6.853868 -2.245569 7.039372 -2.245569 7.039372 -2.440836S6.853868 -2.636103 6.717181 -2.636103H3.993208V-5.36984C3.993208 -5.506526 3.993208 -5.69203 3.797941 -5.69203S3.602674 -5.506526 3.602674 -5.36984V-2.636103H0.868938C0.732251 -2.636103 0.546747 -2.636103 0.546747 -2.440836S0.732251 -2.245569 0.868938 -2.245569H3.602674V0.488167C3.602674 0.624854 3.602674 0.810358 3.797941 0.810358S3.993208 0.624854 3.993208 0.488167V-2.245569Z'/>
7+<path id='g2-49' d='M2.870423 -6.248541C2.870423 -6.482861 2.870423 -6.502388 2.645866 -6.502388C2.040539 -5.877534 1.181365 -5.877534 0.868938 -5.877534V-5.57487C1.064205 -5.57487 1.640242 -5.57487 2.147936 -5.828717V-0.771304C2.147936 -0.419824 2.118646 -0.302664 1.239945 -0.302664H0.927518V0C1.269235 -0.02929 2.118646 -0.02929 2.50918 -0.02929S3.749124 -0.02929 4.090841 0V-0.302664H3.778414C2.899713 -0.302664 2.870423 -0.41006 2.870423 -0.771304V-6.248541Z'/>
8+<path id='g1-120' d='M3.260957 -2.94853C3.319537 -3.202377 3.544094 -4.100605 4.227528 -4.100605C4.276345 -4.100605 4.510665 -4.100605 4.715696 -3.973681C4.442322 -3.924865 4.247055 -3.680781 4.247055 -3.446461C4.247055 -3.290247 4.354452 -3.104744 4.618062 -3.104744C4.832856 -3.104744 5.145283 -3.280484 5.145283 -3.671018C5.145283 -4.178712 4.569245 -4.315398 4.237292 -4.315398C3.671018 -4.315398 3.329301 -3.797941 3.21214 -3.573384C2.968057 -4.217765 2.440836 -4.315398 2.157699 -4.315398C1.142311 -4.315398 0.585801 -3.055927 0.585801 -2.811843C0.585801 -2.71421 0.683434 -2.71421 0.702961 -2.71421C0.781068 -2.71421 0.810358 -2.733737 0.829884 -2.821607C1.161838 -3.856521 1.806219 -4.100605 2.138172 -4.100605C2.323676 -4.100605 2.665393 -4.012735 2.665393 -3.446461C2.665393 -3.143797 2.499416 -2.489653 2.138172 -1.122785C1.981959 -0.517457 1.640242 -0.107397 1.210655 -0.107397C1.152075 -0.107397 0.927518 -0.107397 0.722488 -0.23432C0.966571 -0.283137 1.181365 -0.488167 1.181365 -0.761541C1.181365 -1.025151 0.966571 -1.103258 0.820121 -1.103258C0.527221 -1.103258 0.283137 -0.849411 0.283137 -0.536984C0.283137 -0.08787 0.771304 0.107397 1.200891 0.107397C1.845272 0.107397 2.196753 -0.576037 2.226043 -0.634617C2.343203 -0.273374 2.694683 0.107397 3.280484 0.107397C4.286108 0.107397 4.842619 -1.152075 4.842619 -1.396158C4.842619 -1.493792 4.754749 -1.493792 4.725459 -1.493792C4.637589 -1.493792 4.618062 -1.454738 4.598535 -1.386395C4.276345 -0.341717 3.612438 -0.107397 3.300011 -0.107397C2.91924 -0.107397 2.763027 -0.419824 2.763027 -0.751778C2.763027 -0.966571 2.821607 -1.181365 2.929003 -1.610952L3.260957 -2.94853Z'/>
9+<path id='g1-121' d='M4.744986 -3.719834C4.784039 -3.856521 4.784039 -3.876048 4.784039 -3.944391C4.784039 -4.120131 4.647352 -4.208002 4.500902 -4.208002C4.403268 -4.208002 4.247055 -4.149422 4.159185 -4.002971C4.139658 -3.954155 4.061551 -3.651491 4.022498 -3.475751C3.954155 -3.221904 3.885811 -2.958293 3.827231 -2.694683L3.387881 -0.937281C3.348827 -0.790831 2.929003 -0.107397 2.284623 -0.107397C1.786692 -0.107397 1.679295 -0.536984 1.679295 -0.898228C1.679295 -1.347342 1.845272 -1.952669 2.177226 -2.811843C2.333439 -3.21214 2.372493 -3.319537 2.372493 -3.514804C2.372493 -3.954155 2.060066 -4.315398 1.571899 -4.315398C0.644381 -4.315398 0.283137 -2.899713 0.283137 -2.811843C0.283137 -2.71421 0.38077 -2.71421 0.400297 -2.71421C0.497931 -2.71421 0.507694 -2.733737 0.556511 -2.88995C0.820121 -3.807704 1.210655 -4.100605 1.542608 -4.100605C1.620715 -4.100605 1.786692 -4.100605 1.786692 -3.788178C1.786692 -3.544094 1.689059 -3.290247 1.620715 -3.104744C1.230181 -2.069829 1.054441 -1.513318 1.054441 -1.054441C1.054441 -0.185504 1.669532 0.107397 2.245569 0.107397C2.62634 0.107397 2.958293 -0.05858 3.231667 -0.331954C3.104744 0.17574 2.987583 0.654144 2.59705 1.171601C2.343203 1.503555 1.972196 1.786692 1.523082 1.786692C1.386395 1.786692 0.947044 1.757402 0.781068 1.376632C0.937281 1.376632 1.064205 1.376632 1.200891 1.259471C1.298525 1.171601 1.396158 1.044678 1.396158 0.859174C1.396158 0.556511 1.132548 0.517457 1.034915 0.517457C0.810358 0.517457 0.488167 0.673671 0.488167 1.152075C0.488167 1.640242 0.917754 2.001486 1.523082 2.001486C2.528706 2.001486 3.534331 1.113021 3.807704 0.009763L4.744986 -3.719834Z'/>
10+<path id='g1-122' d='M1.298525 -0.810358C1.825745 -1.376632 2.108882 -1.620715 2.460363 -1.923379C2.460363 -1.933142 3.06569 -2.4506 3.417171 -2.80208C4.344688 -3.710071 4.559482 -4.178712 4.559482 -4.217765C4.559482 -4.315398 4.471612 -4.315398 4.452085 -4.315398C4.383742 -4.315398 4.354452 -4.295872 4.305635 -4.208002C4.012735 -3.739361 3.807704 -3.583148 3.573384 -3.583148S3.221904 -3.729598 3.075454 -3.895575C2.88995 -4.120131 2.723973 -4.315398 2.401783 -4.315398C1.669532 -4.315398 1.220418 -3.407407 1.220418 -3.202377C1.220418 -3.15356 1.249708 -3.09498 1.337578 -3.09498S1.444975 -3.143797 1.464502 -3.202377C1.650005 -3.651491 2.216279 -3.661254 2.294386 -3.661254C2.499416 -3.661254 2.68492 -3.592911 2.909477 -3.514804C3.300011 -3.368354 3.407407 -3.368354 3.661254 -3.368354C3.309774 -2.94853 2.489653 -2.245569 2.304149 -2.089356L1.425448 -1.269235C0.761541 -0.615091 0.419824 -0.05858 0.419824 0.009763C0.419824 0.107397 0.517457 0.107397 0.536984 0.107397C0.615091 0.107397 0.634617 0.08787 0.693197 -0.019527C0.917754 -0.361244 1.210655 -0.624854 1.523082 -0.624854C1.747639 -0.624854 1.845272 -0.536984 2.089356 -0.253847C2.255333 -0.048817 2.431073 0.107397 2.71421 0.107397C3.680781 0.107397 4.247055 -1.132548 4.247055 -1.396158C4.247055 -1.444975 4.208002 -1.493792 4.129895 -1.493792C4.042025 -1.493792 4.022498 -1.435212 3.993208 -1.366868C3.768651 -0.732251 3.143797 -0.546747 2.821607 -0.546747C2.62634 -0.546747 2.4506 -0.605327 2.245569 -0.673671C1.913616 -0.800594 1.767165 -0.839648 1.562135 -0.839648C1.542608 -0.839648 1.386395 -0.839648 1.298525 -0.810358Z'/>
11+</defs>
12+<g id='page1'>
13+<use x='59.153464' y='60.090183' xlink:href='#g2-49'/>
14+<rect x='58.804295' y='61.81595' height='0.55789' width='5.580027'/>
15+<use x='58.804295' y='70.391549' xlink:href='#g1-120'/>
16+<use x='65.579836' y='65.581827' xlink:href='#g2-43'/>
17+<use x='74.496784' y='60.090183' xlink:href='#g2-49'/>
18+<rect x='74.369089' y='61.81595' height='0.55789' width='5.137078'/>
19+<use x='74.369089' y='70.391549' xlink:href='#g1-121'/>
20+<rect x='57.608781' y='72.847884' height='0.55789' width='23.092891'/>
21+<use x='60.304908' y='81.423483' xlink:href='#g1-121'/>
22+<use x='65.441996' y='81.423483' xlink:href='#g0-0'/>
23+<use x='73.035735' y='81.423483' xlink:href='#g1-122'/>
24+</g>
25+</svg>
_images/math/6673b43f9fe29455c1fcd1164e5844698cc64d38.svgnew file+22
@@ -0,0 +1,22 @@
1+<?xml version='1.0' encoding='UTF-8'?>
2+<!-- This file was generated by dvisvgm 2.6.3 -->
3+<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='69.686469pt' height='12.418845pt' viewBox='56.413267 54.399982 69.686469 12.418845'>
4+<defs>
5+<path id='g2-43' d='M5.565131 -3.221918H9.414695C9.609963 -3.221918 9.861021 -3.221918 9.861021 -3.472976C9.861021 -3.737983 9.62391 -3.737983 9.414695 -3.737983H5.565131V-7.587547C5.565131 -7.782814 5.565131 -8.033873 5.314072 -8.033873C5.049066 -8.033873 5.049066 -7.796762 5.049066 -7.587547V-3.737983H1.199502C1.004234 -3.737983 0.753176 -3.737983 0.753176 -3.486924C0.753176 -3.221918 0.990286 -3.221918 1.199502 -3.221918H5.049066V0.627646C5.049066 0.822914 5.049066 1.073973 5.300125 1.073973C5.565131 1.073973 5.565131 0.836862 5.565131 0.627646V-3.221918Z'/>
6+<path id='g2-61' d='M9.414695 -4.519054C9.609963 -4.519054 9.861021 -4.519054 9.861021 -4.770112C9.861021 -5.035118 9.62391 -5.035118 9.414695 -5.035118H1.199502C1.004234 -5.035118 0.753176 -5.035118 0.753176 -4.78406C0.753176 -4.519054 0.990286 -4.519054 1.199502 -4.519054H9.414695ZM9.414695 -1.924782C9.609963 -1.924782 9.861021 -1.924782 9.861021 -2.175841C9.861021 -2.440847 9.62391 -2.440847 9.414695 -2.440847H1.199502C1.004234 -2.440847 0.753176 -2.440847 0.753176 -2.189788C0.753176 -1.924782 0.990286 -1.924782 1.199502 -1.924782H9.414695Z'/>
7+<path id='g0-97' d='M4.198257 -1.659776C4.128518 -1.422665 4.128518 -1.39477 3.93325 -1.129763C3.626401 -0.739228 3.012702 -0.139477 2.357161 -0.139477C1.785305 -0.139477 1.464508 -0.655542 1.464508 -1.478456C1.464508 -2.245579 1.896887 -3.807721 2.161893 -4.393524C2.636115 -5.369863 3.291656 -5.87198 3.835616 -5.87198C4.756164 -5.87198 4.937484 -4.728269 4.937484 -4.616687C4.937484 -4.60274 4.895641 -4.42142 4.881694 -4.393524L4.198257 -1.659776ZM5.090909 -5.230386C4.937484 -5.593026 4.560897 -6.150934 3.835616 -6.150934C2.259527 -6.150934 0.557908 -4.11457 0.557908 -2.050311C0.557908 -0.669489 1.366874 0.139477 2.315318 0.139477C3.082441 0.139477 3.737983 -0.460274 4.128518 -0.920548C4.267995 -0.097634 4.923537 0.139477 5.341968 0.139477S6.095143 -0.111582 6.346202 -0.613699C6.569365 -1.08792 6.764633 -1.93873 6.764633 -1.994521C6.764633 -2.064259 6.708842 -2.12005 6.625156 -2.12005C6.499626 -2.12005 6.485679 -2.050311 6.429888 -1.841096C6.220672 -1.018182 5.955666 -0.139477 5.383811 -0.139477C4.979328 -0.139477 4.951432 -0.502117 4.951432 -0.781071C4.951432 -1.101868 4.993275 -1.255293 5.118804 -1.799253C5.216438 -2.147945 5.286177 -2.454795 5.397758 -2.859278C5.913823 -4.951432 6.039352 -5.453549 6.039352 -5.537235C6.039352 -5.732503 5.885928 -5.885928 5.676712 -5.885928C5.230386 -5.885928 5.118804 -5.397758 5.090909 -5.230386Z'/>
8+<path id='g0-98' d='M3.221918 -9.331009C3.235866 -9.3868 3.263761 -9.470486 3.263761 -9.540224C3.263761 -9.679701 3.124284 -9.679701 3.096389 -9.679701C3.082441 -9.679701 2.580324 -9.637858 2.329265 -9.609963C2.092154 -9.596015 1.882939 -9.56812 1.63188 -9.554172C1.297136 -9.526276 1.199502 -9.512329 1.199502 -9.26127C1.199502 -9.121793 1.338979 -9.121793 1.478456 -9.121793C2.189788 -9.121793 2.189788 -8.996264 2.189788 -8.856787C2.189788 -8.759153 2.078207 -8.35467 2.022416 -8.103611L1.687671 -6.764633C1.548194 -6.206725 0.753176 -3.040598 0.697385 -2.789539C0.627646 -2.440847 0.627646 -2.203736 0.627646 -2.022416C0.627646 -0.599751 1.422665 0.139477 2.329265 0.139477C3.947198 0.139477 5.620922 -1.93873 5.620922 -3.961146C5.620922 -5.244334 4.895641 -6.150934 3.849564 -6.150934C3.124284 -6.150934 2.468742 -5.551183 2.203736 -5.272229L3.221918 -9.331009ZM2.343213 -0.139477C1.896887 -0.139477 1.408717 -0.474222 1.408717 -1.562142C1.408717 -2.022416 1.45056 -2.287422 1.701619 -3.263761C1.743462 -3.445081 1.966625 -4.337733 2.022416 -4.519054C2.050311 -4.630635 2.873225 -5.87198 3.821669 -5.87198C4.435367 -5.87198 4.714321 -5.258281 4.714321 -4.533001C4.714321 -3.863512 4.323786 -2.287422 3.975093 -1.562142C3.626401 -0.808966 2.984807 -0.139477 2.343213 -0.139477Z'/>
9+<path id='g0-99' d='M5.453549 -5.244334C5.188543 -5.244334 5.063014 -5.244334 4.867746 -5.076961C4.78406 -5.007223 4.630635 -4.798007 4.630635 -4.574844C4.630635 -4.29589 4.839851 -4.128518 5.104857 -4.128518C5.439601 -4.128518 5.816189 -4.407472 5.816189 -4.96538C5.816189 -5.634869 5.174595 -6.150934 4.212204 -6.150934C2.385056 -6.150934 0.557908 -4.156413 0.557908 -2.175841C0.557908 -0.962391 1.311083 0.139477 2.733748 0.139477C4.630635 0.139477 5.830137 -1.338979 5.830137 -1.520299C5.830137 -1.603985 5.746451 -1.673724 5.69066 -1.673724C5.648817 -1.673724 5.634869 -1.659776 5.50934 -1.534247C4.616687 -0.348692 3.291656 -0.139477 2.761644 -0.139477C1.799253 -0.139477 1.492403 -0.976339 1.492403 -1.673724C1.492403 -2.161893 1.729514 -3.514819 2.231631 -4.463263C2.594271 -5.118804 3.347447 -5.87198 4.226152 -5.87198C4.407472 -5.87198 5.174595 -5.844085 5.453549 -5.244334Z'/>
10+<path id='g1-50' d='M1.239945 -0.751778L2.274859 -1.757402C3.797941 -3.104744 4.383742 -3.631964 4.383742 -4.608299C4.383742 -5.72132 3.505041 -6.502388 2.313913 -6.502388C1.210655 -6.502388 0.488167 -5.60416 0.488167 -4.735222C0.488167 -4.188475 0.976334 -4.188475 1.005625 -4.188475C1.171601 -4.188475 1.513318 -4.305635 1.513318 -4.705932C1.513318 -4.959779 1.337578 -5.213626 0.995861 -5.213626C0.917754 -5.213626 0.898228 -5.213626 0.868938 -5.203863C1.093495 -5.83848 1.620715 -6.199724 2.186989 -6.199724C3.075454 -6.199724 3.495277 -5.408893 3.495277 -4.608299C3.495277 -3.827231 3.00711 -3.055927 2.470126 -2.4506L0.595564 -0.361244C0.488167 -0.253847 0.488167 -0.23432 0.488167 0H4.110368L4.383742 -1.698822H4.139658C4.090841 -1.405922 4.022498 -0.976334 3.924865 -0.829884C3.856521 -0.751778 3.21214 -0.751778 2.997347 -0.751778H1.239945Z'/>
11+</defs>
12+<g id='page1'>
13+<use x='56.413267' y='65.753425' xlink:href='#g0-97'/>
14+<use x='63.582369' y='60.691915' xlink:href='#g1-50'/>
15+<use x='72.061649' y='65.753425' xlink:href='#g2-43'/>
16+<use x='85.783204' y='65.753425' xlink:href='#g0-98'/>
17+<use x='91.589827' y='60.691915' xlink:href='#g1-50'/>
18+<use x='100.843973' y='65.753425' xlink:href='#g2-61'/>
19+<use x='115.340392' y='65.753425' xlink:href='#g0-99'/>
20+<use x='121.218045' y='60.691915' xlink:href='#g1-50'/>
21+</g>
22+</svg>
_images/math/a6a994cb6e7278ec30eaebe7e636046d3deccb5b.svgnew file+43
@@ -0,0 +1,43 @@
1+<?xml version='1.0' encoding='UTF-8'?>
2+<!-- This file was generated by dvisvgm 2.6.3 -->
3+<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='134.289458pt' height='28.68903pt' viewBox='165.981071 78.308016 134.289458 28.68903'>
4+<defs>
5+<path id='g2-32' d='M6.555417 -9.344956C6.555417 -9.358904 6.611208 -9.540224 6.611208 -9.554172C6.611208 -9.679701 6.499626 -9.679701 6.457783 -9.679701C6.332254 -9.679701 6.318306 -9.609963 6.262516 -9.400747L3.961146 -0.167372C2.803487 -0.306849 2.371108 -0.892653 2.371108 -1.729514C2.371108 -2.036364 2.371108 -2.357161 3.02665 -4.086675C3.20797 -4.588792 3.277709 -4.770112 3.277709 -5.021171C3.277709 -5.648817 2.831382 -6.150934 2.175841 -6.150934C0.892653 -6.150934 0.376588 -4.128518 0.376588 -4.016936C0.376588 -3.961146 0.432379 -3.891407 0.530012 -3.891407C0.655542 -3.891407 0.669489 -3.947198 0.72528 -4.142466C1.060025 -5.355915 1.617933 -5.87198 2.133998 -5.87198C2.259527 -5.87198 2.496638 -5.858032 2.496638 -5.411706C2.496638 -5.355915 2.496638 -5.049066 2.259527 -4.435367C1.506351 -2.454795 1.506351 -2.147945 1.506351 -1.827148C1.506351 -0.488169 2.622167 0.027895 3.87746 0.125529C3.765878 0.557908 3.668244 1.004234 3.556663 1.436613C3.333499 2.273474 3.235866 2.66401 3.235866 2.719801C3.235866 2.84533 3.347447 2.84533 3.38929 2.84533C3.417186 2.84533 3.472976 2.84533 3.500872 2.789539C3.556663 2.733748 4.128518 0.390535 4.184309 0.139477C4.700374 0.139477 5.802242 0.139477 7.057534 -1.157659C7.517808 -1.659776 7.936239 -2.30137 8.17335 -2.901121C8.312827 -3.263761 8.647572 -4.505106 8.647572 -5.216438C8.647572 -6.0533 8.229141 -6.150934 8.089664 -6.150934C7.754919 -6.150934 7.44807 -5.816189 7.44807 -5.537235C7.44807 -5.369863 7.545704 -5.272229 7.601494 -5.216438C7.727024 -5.090909 8.103611 -4.714321 8.103611 -3.989041C8.103611 -3.486924 7.824658 -2.454795 6.932005 -1.45056C5.760399 -0.139477 4.686426 -0.139477 4.267995 -0.139477L6.555417 -9.344956Z'/>
6+<path id='g2-58' d='M2.566376 -0.669489C2.566376 -1.073973 2.231631 -1.352927 1.896887 -1.352927C1.492403 -1.352927 1.21345 -1.018182 1.21345 -0.683437C1.21345 -0.278954 1.548194 0 1.882939 0C2.287422 0 2.566376 -0.334745 2.566376 -0.669489Z'/>
7+<path id='g2-64' d='M6.332254 -4.658531C6.248568 -5.439601 5.760399 -6.374097 4.505106 -6.374097C2.538481 -6.374097 0.530012 -4.379577 0.530012 -2.161893C0.530012 -1.311083 1.115816 0.292902 3.012702 0.292902C6.304359 0.292902 7.713076 -4.505106 7.713076 -6.41594C7.713076 -8.424408 6.583313 -9.972603 4.798007 -9.972603C2.775592 -9.972603 2.175841 -8.201245 2.175841 -7.824658C2.175841 -7.699128 2.259527 -7.392279 2.650062 -7.392279C3.138232 -7.392279 3.347447 -7.838605 3.347447 -8.075716C3.347447 -8.508095 2.915068 -8.508095 2.733748 -8.508095C3.305604 -9.540224 4.365629 -9.637858 4.742217 -9.637858C5.969614 -9.637858 6.750685 -8.661519 6.750685 -7.099377C6.750685 -6.206725 6.485679 -5.174595 6.346202 -4.658531H6.332254ZM3.054545 -0.083686C1.743462 -0.083686 1.520299 -1.115816 1.520299 -1.701619C1.520299 -2.315318 1.910834 -3.75193 2.12005 -4.267995C2.30137 -4.686426 3.096389 -6.095143 4.546949 -6.095143C5.816189 -6.095143 6.109091 -4.993275 6.109091 -4.2401C6.109091 -3.20797 5.202491 -0.083686 3.054545 -0.083686Z'/>
8+<path id='g2-72' d='M10.432877 -8.508095C10.558406 -8.982316 10.586301 -9.121793 11.576588 -9.121793C11.827646 -9.121793 11.967123 -9.121793 11.967123 -9.372852C11.967123 -9.526276 11.841594 -9.526276 11.757908 -9.526276C11.506849 -9.526276 11.213948 -9.498381 10.948941 -9.498381H9.303113C9.038107 -9.498381 8.745205 -9.526276 8.480199 -9.526276C8.382565 -9.526276 8.215193 -9.526276 8.215193 -9.26127C8.215193 -9.121793 8.312827 -9.121793 8.577833 -9.121793C9.414695 -9.121793 9.414695 -9.010212 9.414695 -8.856787C9.414695 -8.828892 9.414695 -8.745205 9.358904 -8.53599L8.508095 -5.160648H4.29589L5.132752 -8.508095C5.258281 -8.982316 5.286177 -9.121793 6.276463 -9.121793C6.527522 -9.121793 6.666999 -9.121793 6.666999 -9.372852C6.666999 -9.526276 6.541469 -9.526276 6.457783 -9.526276C6.206725 -9.526276 5.913823 -9.498381 5.648817 -9.498381H4.002989C3.737983 -9.498381 3.445081 -9.526276 3.180075 -9.526276C3.082441 -9.526276 2.915068 -9.526276 2.915068 -9.26127C2.915068 -9.121793 3.012702 -9.121793 3.277709 -9.121793C4.11457 -9.121793 4.11457 -9.010212 4.11457 -8.856787C4.11457 -8.828892 4.11457 -8.745205 4.05878 -8.53599L2.175841 -1.03213C2.050311 -0.54396 2.022416 -0.404483 1.060025 -0.404483C0.739228 -0.404483 0.641594 -0.404483 0.641594 -0.139477C0.641594 0 0.795019 0 0.836862 0C1.08792 0 1.380822 -0.027895 1.645828 -0.027895H3.291656C3.556663 -0.027895 3.849564 0 4.11457 0C4.226152 0 4.379577 0 4.379577 -0.265006C4.379577 -0.404483 4.254047 -0.404483 4.044832 -0.404483C3.194022 -0.404483 3.194022 -0.516065 3.194022 -0.655542C3.194022 -0.669489 3.194022 -0.767123 3.221918 -0.878705L4.184309 -4.756164H8.410461C8.17335 -3.835616 7.462017 -0.920548 7.434122 -0.836862C7.280697 -0.418431 7.057534 -0.418431 6.23462 -0.404483C6.067248 -0.404483 5.941719 -0.404483 5.941719 -0.139477C5.941719 0 6.095143 0 6.136986 0C6.388045 0 6.680946 -0.027895 6.945953 -0.027895H8.591781C8.856787 -0.027895 9.149689 0 9.414695 0C9.526276 0 9.679701 0 9.679701 -0.265006C9.679701 -0.404483 9.554172 -0.404483 9.344956 -0.404483C8.494147 -0.404483 8.494147 -0.516065 8.494147 -0.655542C8.494147 -0.669489 8.494147 -0.767123 8.522042 -0.878705L10.432877 -8.508095Z'/>
9+<path id='g2-116' d='M2.803487 -5.606974H4.086675C4.351681 -5.606974 4.491158 -5.606974 4.491158 -5.858032C4.491158 -6.011457 4.407472 -6.011457 4.128518 -6.011457H2.901121L3.417186 -8.047821C3.472976 -8.243088 3.472976 -8.270984 3.472976 -8.368618C3.472976 -8.591781 3.291656 -8.71731 3.110336 -8.71731C2.998755 -8.71731 2.677958 -8.675467 2.566376 -8.229141L2.022416 -6.011457H0.711333C0.432379 -6.011457 0.306849 -6.011457 0.306849 -5.746451C0.306849 -5.606974 0.404483 -5.606974 0.669489 -5.606974H1.910834L0.990286 -1.924782C0.878705 -1.436613 0.836862 -1.297136 0.836862 -1.115816C0.836862 -0.460274 1.297136 0.139477 2.078207 0.139477C3.486924 0.139477 4.2401 -1.896887 4.2401 -1.994521C4.2401 -2.078207 4.184309 -2.12005 4.100623 -2.12005C4.072727 -2.12005 4.016936 -2.12005 3.989041 -2.064259C3.975093 -2.050311 3.961146 -2.036364 3.863512 -1.8132C3.57061 -1.115816 2.929016 -0.139477 2.12005 -0.139477C1.701619 -0.139477 1.673724 -0.488169 1.673724 -0.795019C1.673724 -0.808966 1.673724 -1.073973 1.715567 -1.241345L2.803487 -5.606974Z'/>
10+<path id='g1-105' d='M3.807721 -3.249813C3.87746 -3.417186 3.87746 -3.445081 3.87746 -3.486924S3.87746 -3.556663 3.807721 -3.724035L1.366874 -10.139975C1.283188 -10.377086 1.199502 -10.460772 1.046077 -10.460772S0.767123 -10.335243 0.767123 -10.181818C0.767123 -10.139975 0.767123 -10.11208 0.836862 -9.958655L3.305604 -3.486924L0.836862 2.956912C0.767123 3.110336 0.767123 3.138232 0.767123 3.20797C0.767123 3.361395 0.892653 3.486924 1.046077 3.486924C1.227397 3.486924 1.283188 3.347447 1.338979 3.20797L3.807721 -3.249813Z'/>
11+<path id='g1-106' d='M2.217684 -9.958655C2.217684 -10.209714 2.217684 -10.460772 1.93873 -10.460772S1.659776 -10.209714 1.659776 -9.958655V2.984807C1.659776 3.235866 1.659776 3.486924 1.93873 3.486924S2.217684 3.235866 2.217684 2.984807V-9.958655Z'/>
12+<path id='g3-40' d='M4.533001 3.38929C4.533001 3.347447 4.533001 3.319552 4.29589 3.082441C2.901121 1.673724 2.12005 -0.627646 2.12005 -3.472976C2.12005 -6.178829 2.775592 -8.508095 4.393524 -10.153923C4.533001 -10.279452 4.533001 -10.307347 4.533001 -10.349191C4.533001 -10.432877 4.463263 -10.460772 4.407472 -10.460772C4.226152 -10.460772 3.082441 -9.456538 2.399004 -8.089664C1.687671 -6.680946 1.366874 -5.188543 1.366874 -3.472976C1.366874 -2.231631 1.562142 -0.571856 2.287422 0.920548C3.110336 2.594271 4.254047 3.500872 4.407472 3.500872C4.463263 3.500872 4.533001 3.472976 4.533001 3.38929Z'/>
13+<path id='g3-41' d='M3.93325 -3.472976C3.93325 -4.533001 3.793773 -6.262516 3.012702 -7.880448C2.189788 -9.554172 1.046077 -10.460772 0.892653 -10.460772C0.836862 -10.460772 0.767123 -10.432877 0.767123 -10.349191C0.767123 -10.307347 0.767123 -10.279452 1.004234 -10.042341C2.399004 -8.633624 3.180075 -6.332254 3.180075 -3.486924C3.180075 -0.781071 2.524533 1.548194 0.9066 3.194022C0.767123 3.319552 0.767123 3.347447 0.767123 3.38929C0.767123 3.472976 0.836862 3.500872 0.892653 3.500872C1.073973 3.500872 2.217684 2.496638 2.901121 1.129763C3.612453 -0.292902 3.93325 -1.799253 3.93325 -3.472976Z'/>
14+<path id='g3-61' d='M9.414695 -4.519054C9.609963 -4.519054 9.861021 -4.519054 9.861021 -4.770112C9.861021 -5.035118 9.62391 -5.035118 9.414695 -5.035118H1.199502C1.004234 -5.035118 0.753176 -5.035118 0.753176 -4.78406C0.753176 -4.519054 0.990286 -4.519054 1.199502 -4.519054H9.414695ZM9.414695 -1.924782C9.609963 -1.924782 9.861021 -1.924782 9.861021 -2.175841C9.861021 -2.440847 9.62391 -2.440847 9.414695 -2.440847H1.199502C1.004234 -2.440847 0.753176 -2.440847 0.753176 -2.189788C0.753176 -1.924782 0.990286 -1.924782 1.199502 -1.924782H9.414695Z'/>
15+<path id='g3-94' d='M3.417186 -9.679701L1.590037 -7.782814L1.8132 -7.573599L3.403238 -9.010212L5.007223 -7.573599L5.230386 -7.782814L3.417186 -9.679701Z'/>
16+<path id='g3-105' d='M2.426899 -8.591781C2.426899 -8.954421 2.133998 -9.275218 1.743462 -9.275218C1.380822 -9.275218 1.073973 -8.982316 1.073973 -8.605729C1.073973 -8.187298 1.408717 -7.922291 1.743462 -7.922291C2.175841 -7.922291 2.426899 -8.284932 2.426899 -8.591781ZM0.502117 -5.997509V-5.593026C1.39477 -5.593026 1.520299 -5.50934 1.520299 -4.825903V-1.03213C1.520299 -0.404483 1.366874 -0.404483 0.460274 -0.404483V0C0.850809 -0.027895 1.520299 -0.027895 1.924782 -0.027895C2.078207 -0.027895 2.887173 -0.027895 3.361395 0V-0.404483C2.454795 -0.404483 2.399004 -0.474222 2.399004 -1.018182V-6.150934L0.502117 -5.997509Z'/>
17+<path id='g0-126' d='M3.556663 -7.671233H6.262516C6.499626 -7.671233 6.653051 -7.671233 6.653051 -7.838605C6.653051 -8.019925 6.485679 -8.019925 6.220672 -8.019925H3.640349C3.737983 -8.368618 3.737983 -8.396513 3.821669 -8.745205C3.891407 -8.996264 4.016936 -9.484433 4.016936 -9.512329C4.016936 -9.637858 3.93325 -9.679701 3.821669 -9.679701C3.556663 -9.679701 2.454795 -9.56812 2.12005 -9.540224C2.008468 -9.526276 1.855044 -9.512329 1.855044 -9.247323C1.855044 -9.093898 1.994521 -9.093898 2.189788 -9.093898C2.859278 -9.093898 2.887173 -8.996264 2.887173 -8.856787C2.887173 -8.759153 2.761644 -8.298879 2.691905 -8.019925H1.910834C1.63188 -8.019925 1.478456 -8.019925 1.478456 -7.838605C1.478456 -7.671233 1.603985 -7.671233 1.868991 -7.671233H2.608219L0.822914 -0.557908C0.767123 -0.348692 0.767123 -0.320797 0.767123 -0.237111C0.767123 0.069738 1.004234 0.153425 1.171606 0.153425C1.436613 0.153425 1.63188 -0.041843 1.687671 -0.223163C1.715567 -0.292902 1.868991 -0.920548 1.952677 -1.26924L2.273474 -2.510585C2.315318 -2.719801 2.454795 -3.249813 2.496638 -3.459029C2.566376 -3.682192 2.66401 -4.11457 2.677958 -4.156413C2.789539 -4.393524 3.542715 -5.858032 4.937484 -5.858032C5.551183 -5.858032 5.69066 -5.355915 5.69066 -4.895641C5.69066 -4.030884 5.049066 -2.329265 4.798007 -1.687671C4.714321 -1.464508 4.644583 -1.26924 4.644583 -1.004234C4.644583 -0.278954 5.160648 0.153425 5.788294 0.153425C7.127273 0.153425 7.615442 -1.910834 7.615442 -1.994521C7.615442 -2.133998 7.489913 -2.133998 7.44807 -2.133998C7.308593 -2.133998 7.308593 -2.092154 7.238854 -1.882939C6.834371 -0.460274 6.206725 -0.153425 5.830137 -0.153425C5.565131 -0.153425 5.481445 -0.320797 5.481445 -0.613699C5.481445 -0.962391 5.634869 -1.352927 5.718555 -1.590037C5.955666 -2.203736 6.583313 -3.87746 6.583313 -4.658531C6.583313 -5.676712 5.941719 -6.164882 4.979328 -6.164882C4.546949 -6.164882 3.710087 -6.067248 2.915068 -5.104857L3.556663 -7.671233Z'/>
18+</defs>
19+<g id='page1'>
20+<use x='165.981071' y='97.429622' xlink:href='#g3-105'/>
21+<use x='169.774676' y='97.429622' xlink:href='#g0-126'/>
22+<use x='180.971707' y='87.993906' xlink:href='#g2-64'/>
23+<rect x='178.505856' y='93.663745' height='0.55789' width='12.899852'/>
24+<use x='178.505856' y='106.997046' xlink:href='#g2-64'/>
25+<use x='186.474036' y='106.997046' xlink:href='#g2-116'/>
26+<use x='192.601222' y='97.429622' xlink:href='#g1-106'/>
27+<use x='198.80019' y='97.429622' xlink:href='#g2-32'/>
28+<use x='208.179277' y='97.429622' xlink:href='#g3-40'/>
29+<use x='213.490324' y='97.429622' xlink:href='#g2-116'/>
30+<use x='218.42201' y='97.429622' xlink:href='#g3-41'/>
31+<use x='223.733057' y='97.429622' xlink:href='#g1-105'/>
32+<use x='233.031506' y='97.429622' xlink:href='#g3-61'/>
33+<use x='251.068923' y='93.903964' xlink:href='#g3-94'/>
34+<use x='247.527926' y='97.429622' xlink:href='#g2-72'/>
35+<use x='259.920966' y='97.429622' xlink:href='#g1-106'/>
36+<use x='266.119934' y='97.429622' xlink:href='#g2-32'/>
37+<use x='275.499021' y='97.429622' xlink:href='#g3-40'/>
38+<use x='280.810068' y='97.429622' xlink:href='#g2-116'/>
39+<use x='285.741754' y='97.429622' xlink:href='#g3-41'/>
40+<use x='291.052801' y='97.429622' xlink:href='#g1-105'/>
41+<use x='296.476924' y='97.429622' xlink:href='#g2-58'/>
42+</g>
43+</svg>
_sources/admin/architecture.rst.txt+9−5
@@ -4,17 +4,21 @@
44Architecture
55============
66
7−.. sidebar:: Needs work!
7+.. sidebar:: Further reading
88
9− This article needs some work / Searx is a collaborative effort. If you have
10− any contribution, feel welcome to send us your :pull:`PR <../pulls>`, see
11− :ref:`how to contribute`.
9+ - Reverse Proxy: :ref:`Apache <apache searx site>` & :ref:`nginx <nginx searx
10+ site>`
11+ - Filtron: :ref:`searx filtron`
12+ - Morty: :ref:`searx morty`
13+ - uWSGI: :ref:`searx uwsgi`
14+ - Searx: :ref:`installation basic`
1215
1316Herein you will find some hints and suggestions about typical architectures of
1417searx infrastructures.
1518
1619We start with a contribution from :pull:`@dalf <1776#issuecomment-567917320>`.
17−It shows a *reference* setup for public searx instances.
20+It shows a *reference* setup for public searx instances which can build up and
21+maintained by the scripts from our :ref:`toolboxing`.
1822
1923.. _arch public:
2024
_sources/admin/buildhosts.rst.txt+63−11
@@ -9,8 +9,27 @@ Buildhosts
99 If you have any contribution send us your :pull:`PR <../pulls>`, see
1010 :ref:`how to contribute`.
1111
12+.. contents:: Contents
13+ :depth: 2
14+ :local:
15+ :backlinks: entry
16+
1217To get best results from build, its recommend to install additional packages
13−on build hosts.
18+on build hosts (see :ref:`searx.sh`).::
19+
20+ sudo -H ./utils/searx.sh buildhost
21+
22+This will install packages needed by searx:
23+
24+.. include:: ../../build/docs/includes/searx.rst
25+ :start-after: START distro-packages
26+ :end-before: END distro-packages
27+
28+and packages needed to build docuemtation and run tests:
29+
30+.. include:: ../../build/docs/includes/searx.rst
31+ :start-after: START build-packages
32+ :end-before: END build-packages
1433
1534.. _docs build:
1635
@@ -35,8 +54,17 @@ processing additional packages are needed. The XeTeX_ needed not only for PDF
3554creation, its also needed for :ref:`math` when HTML output is build.
3655
3756To be able to do :ref:`sphinx:math-support` without CDNs, the math are rendered
38−as images (``sphinx.ext.imgmath`` extension). If your docs build (``make
39−docs``) shows warnings like this::
57+as images (``sphinx.ext.imgmath`` extension).
58+
59+Here is the extract from the :origin:`docs/conf.py` file, setting math renderer
60+to ``imgmath``:
61+
62+.. literalinclude:: ../conf.py
63+ :language: python
64+ :start-after: # sphinx.ext.imgmath setup
65+ :end-before: # sphinx.ext.imgmath setup END
66+
67+If your docs build (``make docs``) shows warnings like this::
4068
4169 WARNING: dot(1) not found, for better output quality install \
4270 graphviz from http://www.graphviz.org
@@ -47,8 +75,6 @@ docs``) shows warnings like this::
4775you need to install additional packages on your build host, to get better HTML
4876output.
4977
50−.. _system requirements:
51−
5278.. tabs::
5379
5480 .. group-tab:: Ubuntu / debian
@@ -92,12 +118,38 @@ For PDF output you also need:
92118
93119 $ sudo dnf install \
94120 texlive-collection-fontsrecommended texlive-collection-latex \
95− dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts
121+ dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts \
122+ ImageMagick
96123
97−.. _system requirements END:
124+.. _sh lint:
98125
99−.. literalinclude:: ../conf.py
100− :language: python
101− :start-after: # sphinx.ext.imgmath setup
102− :end-before: # sphinx.ext.imgmath setup END
126+Lint shell scripts
127+==================
128+
129+.. _ShellCheck: https://github.com/koalaman/shellcheck
130+
131+To lint shell scripts, we use ShellCheck_ - A shell script static analysis tool.
132+
133+.. SNIP sh lint requirements
134+
135+.. tabs::
136+
137+ .. group-tab:: Ubuntu / debian
138+
139+ .. code-block:: sh
140+
141+ $ sudo apt install shellcheck
142+
143+ .. group-tab:: Arch Linux
144+
145+ .. code-block:: sh
146+
147+ $ sudo pacman -S shellcheck
148+
149+ .. group-tab:: Fedora / RHEL
150+
151+ .. code-block:: sh
152+
153+ $ sudo dnf install ShellCheck
103154
155+.. SNAP sh lint requirements
_sources/admin/filtron.rst.txt+158−106
@@ -1,18 +1,51 @@
1+
2+.. _searx filtron:
3+
14==========================
25How to protect an instance
36==========================
47
5−Searx depens on external search services. To avoid the abuse of these services
8+.. sidebar:: further reading
9+
10+ - :ref:`filtron.sh`
11+ - :ref:`nginx searx site`
12+
13+
14+.. contents:: Contents
15+ :depth: 2
16+ :local:
17+ :backlinks: entry
18+
19+.. _filtron: https://github.com/asciimoo/filtron
20+
21+Searx depends on external search services. To avoid the abuse of these services
622it is advised to limit the number of requests processed by searx.
723
8−An application firewall, ``filtron`` solves exactly this problem. Information
9−on how to install it can be found at the `project page of filtron
10−<https://github.com/asciimoo/filtron>`__.
24+An application firewall, filtron_ solves exactly this problem. Filtron is just
25+a middleware between your web server (nginx, apache, ...) and searx, we describe
26+such infratructures in chapter: :ref:`architecture`.
27+
28+
29+filtron & go
30+============
31+
32+.. _Go: https://golang.org/
33+.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
34+
35+Filtron needs Go_ installed. If Go_ is preinstalled, filtron_ is simply
36+installed by ``go get`` package management (see `filtron README`_). If you use
37+filtron as middleware, a more isolated setup is recommended. To simplify such
38+an installation and the maintenance of, use our script :ref:`filtron.sh`.
1139
40+.. _Sample configuration of filtron:
1241
1342Sample configuration of filtron
1443===============================
1544
45+.. sidebar:: Tooling box
46+
47+ - :origin:`/etc/filtron/rules.json <utils/templates/etc/filtron/rules.json>`
48+
1649An example configuration can be find below. This configuration limits the access
1750of:
1851
@@ -24,105 +57,113 @@ of:
2457
2558.. code:: json
2659
27− [{
28− "name":"search request",
29− "filters":[
30− "Param:q",
31− "Path=^(/|/search)$"
32− ],
33− "interval":"<time-interval-in-sec (int)>",
34− "limit":"<max-request-number-in-interval (int)>",
35− "subrules":[
36− {
37− "name":"roboagent limit",
38− "interval":"<time-interval-in-sec (int)>",
39− "limit":"<max-request-number-in-interval (int)>",
40− "filters":[
41− "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
42− ],
43− "actions":[
44− {
45− "name":"block",
46− "params":{
47− "message":"Rate limit exceeded"
48− }
49− }
50− ]
51− },
52− {
53− "name":"botlimit",
54− "limit":0,
55− "stop":true,
56− "filters":[
57− "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
58− ],
59− "actions":[
60− {
61− "name":"block",
62− "params":{
63− "message":"Rate limit exceeded"
64− }
65− }
66− ]
67− },
68− {
69− "name":"IP limit",
70− "interval":"<time-interval-in-sec (int)>",
71− "limit":"<max-request-number-in-interval (int)>",
72− "stop":true,
73− "aggregations":[
74− "Header:X-Forwarded-For"
75− ],
76− "actions":[
77− {
78− "name":"block",
79− "params":{
80− "message":"Rate limit exceeded"
81− }
82− }
83− ]
84− },
85− {
86− "name":"rss/json limit",
87− "interval":"<time-interval-in-sec (int)>",
88− "limit":"<max-request-number-in-interval (int)>",
89− "stop":true,
90− "filters":[
91− "Param:format=(csv|json|rss)"
92− ],
93− "actions":[
94− {
95− "name":"block",
96− "params":{
97− "message":"Rate limit exceeded"
98− }
99− }
100− ]
101− },
102− {
103− "name":"useragent limit",
104− "interval":"<time-interval-in-sec (int)>",
105− "limit":"<max-request-number-in-interval (int)>",
106− "aggregations":[
107− "Header:User-Agent"
108− ],
109− "actions":[
110− {
111− "name":"block",
112− "params":{
113− "message":"Rate limit exceeded"
114− }
115− }
116− ]
117− }
118− ]
119− }]
120−
121−
60+ [
61+ { "name": "search request",
62+ "filters": [
63+ "Param:q",
64+ "Path=^(/|/search)$"
65+ ],
66+ "interval": "<time-interval-in-sec (int)>",
67+ "limit": "<max-request-number-in-interval (int)>",
68+ "subrules": [
69+ {
70+ "name": "roboagent limit",
71+ "interval": "<time-interval-in-sec (int)>",
72+ "limit": "<max-request-number-in-interval (int)>",
73+ "filters": [
74+ "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
75+ ],
76+ "actions": [
77+ { "name": "log"},
78+ { "name": "block",
79+ "params": {
80+ "message": "Rate limit exceeded"
81+ }
82+ }
83+ ]
84+ },
85+ {
86+ "name": "botlimit",
87+ "limit": 0,
88+ "stop": true,
89+ "filters": [
90+ "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
91+ ],
92+ "actions": [
93+ { "name": "log"},
94+ { "name": "block",
95+ "params": {
96+ "message": "Rate limit exceeded"
97+ }
98+ }
99+ ]
100+ },
101+ {
102+ "name": "IP limit",
103+ "interval": "<time-interval-in-sec (int)>",
104+ "limit": "<max-request-number-in-interval (int)>",
105+ "stop": true,
106+ "aggregations": [
107+ "Header:X-Forwarded-For"
108+ ],
109+ "actions": [
110+ { "name": "log"},
111+ { "name": "block",
112+ "params": {
113+ "message": "Rate limit exceeded"
114+ }
115+ }
116+ ]
117+ },
118+ {
119+ "name": "rss/json limit",
120+ "interval": "<time-interval-in-sec (int)>",
121+ "limit": "<max-request-number-in-interval (int)>",
122+ "stop": true,
123+ "filters": [
124+ "Param:format=(csv|json|rss)"
125+ ],
126+ "actions": [
127+ { "name": "log"},
128+ { "name": "block",
129+ "params": {
130+ "message": "Rate limit exceeded"
131+ }
132+ }
133+ ]
134+ },
135+ {
136+ "name": "useragent limit",
137+ "interval": "<time-interval-in-sec (int)>",
138+ "limit": "<max-request-number-in-interval (int)>",
139+ "aggregations": [
140+ "Header:User-Agent"
141+ ],
142+ "actions": [
143+ { "name": "log"},
144+ { "name": "block",
145+ "params": {
146+ "message": "Rate limit exceeded"
147+ }
148+ }
149+ ]
150+ }
151+ ]
152+ }
153+ ]
154+
155+
156+.. _filtron route request:
122157
123158Route request through filtron
124159=============================
125160
161+.. sidebar:: further reading
162+
163+ - :ref:`filtron.sh overview`
164+ - :ref:`installation nginx`
165+ - :ref:`installation apache`
166+
126167Filtron can be started using the following command:
127168
128169.. code:: sh
@@ -136,13 +177,24 @@ Use it along with ``nginx`` with the following example configuration.
136177
137178.. code:: nginx
138179
139− location / {
140− proxy_set_header Host $http_host;
141− proxy_set_header X-Real-IP $remote_addr;
142− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
143− proxy_set_header X-Scheme $scheme;
144− proxy_pass http://127.0.0.1:4004/;
180+ # https://example.org/searx
181+
182+ location /searx {
183+ proxy_pass http://127.0.0.1:4004/;
184+
185+ proxy_set_header Host $http_host;
186+ proxy_set_header Connection $http_connection;
187+ proxy_set_header X-Real-IP $remote_addr;
188+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
189+ proxy_set_header X-Scheme $scheme;
190+ proxy_set_header X-Script-Name /searx;
145191 }
146192
193+ location /searx/static {
194+ /usr/local/searx/searx-src/searx/static;
195+ }
196+
197+
147198Requests are coming from port 4004 going through filtron and then forwarded to
148−port 8888 where a searx is being run.
199+port 8888 where a searx is being run. For a complete setup see: :ref:`nginx
200+searx site`.
_sources/admin/index.rst.txt+8−1
@@ -3,9 +3,16 @@ Administrator documentation
33===========================
44
55.. toctree::
6− :maxdepth: 1
6+ :maxdepth: 2
7+ :caption: Contents
78
89 installation
10+ installation-searx
11+ installation-uwsgi
12+ installation-nginx
13+ installation-apache
14+ installation-docker
15+ update-searx
916 settings
1017 api
1118 architecture
_sources/admin/installation-apache.rst.txtnew file+514
@@ -0,0 +1,514 @@
1+.. _installation apache:
2+
3+===================
4+Install with apache
5+===================
6+
7+.. _Apache: https://httpd.apache.org/
8+.. _Apache Debian:
9+ https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout#DistrosDefaultLayout-Debian,Ubuntu(Apachehttpd2.x):
10+.. _README.Debian:
11+ https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian
12+.. _Apache Arch Linux:
13+ https://wiki.archlinux.org/index.php/Apache_HTTP_Server
14+.. _Apache Fedora:
15+ https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html
16+.. _Apache directives:
17+ https://httpd.apache.org/docs/trunk/mod/directives.html
18+.. _Getting Started:
19+ https://httpd.apache.org/docs/current/en/getting-started.html
20+.. _Terms Used to Describe Directives:
21+ https://httpd.apache.org/docs/current/en/mod/directive-dict.html
22+.. _Configuration Files:
23+ https://httpd.apache.org/docs/current/en/configuring.html
24+.. _ProxyPreserveHost: https://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypreservehost
25+.. _LoadModule:
26+ https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule
27+.. _DocumentRoot:
28+ https://httpd.apache.org/docs/trunk/mod/core.html#documentroot
29+.. _Location:
30+ https://httpd.apache.org/docs/trunk/mod/core.html#location
31+.. _uWSGI Apache support:
32+ https://uwsgi-docs.readthedocs.io/en/latest/Apache.html
33+.. _mod_proxy_uwsgi:
34+ https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi
35+
36+.. sidebar:: further read
37+
38+ - `Apache Arch Linux`_
39+ - `Apache Debian`_ and `README.Debian`_
40+ - `Apache Fedora`_
41+ - `Apache directives`_
42+
43+.. contents:: Contents
44+ :depth: 2
45+ :local:
46+ :backlinks: entry
47+
48+----
49+
50+**Install** :ref:`apache searx site` using :ref:`filtron.sh <filtron.sh overview>`
51+
52+.. code:: bash
53+
54+ $ sudo -H ./utils/filtron.sh apache install
55+
56+**Install** :ref:`apache searx site` using :ref:`morty.sh <morty.sh overview>`
57+
58+.. code:: bash
59+
60+ $ sudo -H ./utils/morty.sh apache install
61+
62+----
63+
64+The apache HTTP server
65+======================
66+
67+If Apache_ is not installed, install it now. If apache_ is new to you, the
68+`Getting Started`_, `Configuration Files`_ and `Terms Used to Describe
69+Directives`_ documentation gives first orientation. There is also a list of
70+`Apache directives`_ *to keep in the pocket*.
71+
72+.. tabs::
73+
74+ .. group-tab:: Ubuntu / debian
75+
76+ .. code:: sh
77+
78+ sudo -H apt-get install apache2
79+
80+ .. group-tab:: Arch Linux
81+
82+ .. code:: sh
83+
84+ sudo -H pacman -S apache
85+ sudo -H systemctl enable httpd
86+ sudo -H systemctl start http
87+
88+ .. group-tab:: Fedora / RHEL
89+
90+ .. code:: sh
91+
92+ sudo -H dnf install httpd
93+ sudo -H systemctl enable httpd
94+ sudo -H systemctl start httpd
95+
96+Now at http://localhost you should see any kind of *Welcome* or *Test* page.
97+How this default intro site is configured, depends on the linux distribution
98+(compare `Apache directives`_).
99+
100+.. tabs::
101+
102+ .. group-tab:: Ubuntu / debian
103+
104+ .. code:: sh
105+
106+ less /etc/apache2/sites-enabled/000-default.conf
107+
108+ In this file, there is a line setting the `DocumentRoot`_ directive:
109+
110+ .. code:: apache
111+
112+ DocumentRoot /var/www/html
113+
114+ And the *welcome* page is the HTML file at ``/var/www/html/index.html``.
115+
116+ .. group-tab:: Arch Linux
117+
118+ .. code:: sh
119+
120+ less /etc/httpd/conf/httpd.conf
121+
122+ In this file, there is a line setting the `DocumentRoot`_ directive:
123+
124+ .. code:: apache
125+
126+ DocumentRoot "/srv/http"
127+ <Directory "/srv/http">
128+ Options Indexes FollowSymLinks
129+ AllowOverride None
130+ Require all granted
131+ </Directory>
132+
133+ The *welcome* page of Arch Linux is a page showing directory located at
134+ ``DocumentRoot``. This is *directory* page is generated by the Module
135+ `mod_autoindex <https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html>`_:
136+
137+ .. code:: apache
138+
139+ LoadModule autoindex_module modules/mod_autoindex.so
140+ ...
141+ Include conf/extra/httpd-autoindex.conf
142+
143+ .. group-tab:: Fedora / RHEL
144+
145+ .. code:: sh
146+
147+ less /etc/httpd/conf/httpd.conf
148+
149+ In this file, there is a line setting the ``DocumentRoot`` directive:
150+
151+ .. code:: apache
152+
153+ DocumentRoot "/var/www/html"
154+ ...
155+ <Directory "/var/www">
156+ AllowOverride None
157+ # Allow open access:
158+ Require all granted
159+ </Directory>
160+
161+ On fresh installations, the ``/var/www`` is empty and the *default
162+ welcome page* is shown, the configuration is located at::
163+
164+ less /etc/httpd/conf.d/welcome.conf
165+
166+.. _apache searx site:
167+
168+Apache Reverse Proxy
169+====================
170+
171+.. sidebar:: public to the internet?
172+
173+ If your searx instance is public, stop here and first install :ref:`filtron
174+ reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
175+ :ref:`installation scripts`. If already done, follow setup: *searx via
176+ filtron plus morty*.
177+
178+To setup a Apache revers proxy you have to enable the *headers* and *proxy*
179+modules and create a `Location`_ configuration for the searx site. In most
180+distributions you have to un-comment the lines in the main configuration file,
181+except in :ref:`The Debian Layout`.
182+
183+To pass the HTTP HOST header
184+With ProxyPreserveHost_ the incoming Host HTTP request header is passed to the
185+proxied host.
186+
187+.. tabs::
188+
189+ .. group-tab:: Ubuntu / debian
190+
191+ In the Apache setup, enable headers and proxy modules:
192+
193+ .. code:: sh
194+
195+ sudo -H a2enmod headers
196+ sudo -H a2enmod proxy
197+ sudo -H a2enmod proxy_http
198+
199+ In :ref:`The Debian Layout` you create a ``searx.conf`` with the
200+ ``<Location /searx >`` directive and save this file in the *sites
201+ available* folder at ``/etc/apache2/sites-available``. To enable the
202+ ``searx.conf`` use :man:`a2ensite`:
203+
204+ .. code:: sh
205+
206+ sudo -H a2ensite searx.conf
207+
208+ .. group-tab:: Arch Linux
209+
210+ In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
211+ modules (LoadModule_):
212+
213+ .. code:: apache
214+
215+ FIXME needs test
216+
217+ LoadModule headers_module modules/mod_headers.so
218+ LoadModule proxy_module modules/mod_proxy.so
219+ LoadModule proxy_http_module modules/mod_proxy_http.so
220+
221+ .. group-tab:: Fedora / RHEL
222+
223+ In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
224+ modules (LoadModule_):
225+
226+ .. code:: apache
227+
228+ FIXME needs test
229+
230+ LoadModule headers_module modules/mod_headers.so
231+ LoadModule proxy_module modules/mod_proxy.so
232+ LoadModule proxy_http_module modules/mod_proxy_http.so
233+
234+.. tabs::
235+
236+ .. group-tab:: searx via filtron plus morty
237+
238+ Use this setup, if your instance is public to the internet, compare
239+ figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
240+
241+ 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
242+ *localhost 4004* (:ref:`filtron route request`):
243+
244+ .. code:: apache
245+
246+ <Location /searx >
247+
248+ # SetEnvIf Request_URI "/searx" dontlog
249+ # CustomLog /dev/null combined env=dontlog
250+
251+ Require all granted
252+
253+ Order deny,allow
254+ Deny from all
255+ #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
256+ Allow from all
257+
258+ ProxyPreserveHost On
259+ ProxyPass http://127.0.0.1:4004
260+ RequestHeader set X-Script-Name /searx
261+
262+ </Location>
263+
264+ 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
265+ *localhost 3000*
266+
267+ .. code:: apache
268+
269+ ProxyPreserveHost On
270+
271+ <Location /morty >
272+
273+ # SetEnvIf Request_URI "/morty" dontlog
274+ # CustomLog /dev/null combined env=dontlog
275+
276+ Require all granted
277+
278+ Order deny,allow
279+ Deny from all
280+ #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
281+ Allow from all
282+
283+ ProxyPass http://127.0.0.1:3000
284+ RequestHeader set X-Script-Name /morty
285+
286+ </Location>
287+
288+ Note that reverse proxy advised to be used in case of single-user or
289+ low-traffic instances. For a fully result proxification add :ref:`morty's
290+ <searx morty>` **public URL** to your :origin:`searx/settings.yml`:
291+
292+ .. code:: yaml
293+
294+ result_proxy:
295+ # replace example.org with your server's public name
296+ url : https://example.org/morty
297+
298+ server:
299+ image_proxy : True
300+
301+uWSGI support
302+=============
303+
304+Be warned, with this setup, your instance isn't :ref:`protected <searx
305+filtron>`, nevertheless it is good enough for intranet usage. In modern Linux
306+distributions, the `mod_proxy_uwsgi`_ is compiled into the *normal* apache
307+package and you need to install only the :ref:`uWSGI <searx uwsgi>` package:
308+
309+.. tabs::
310+
311+ .. group-tab:: Ubuntu / debian
312+
313+ .. code:: sh
314+
315+ sudo -H apt-get install uwsgi
316+
317+ # Ubuntu =< 18.04
318+ sudo -H apt-get install libapache2-mod-proxy-uwsgi
319+
320+ .. group-tab:: Arch Linux
321+
322+ .. code:: sh
323+
324+ sudo -H pacman -S uwsgi
325+
326+ .. group-tab:: Fedora / RHEL
327+
328+ .. code:: sh
329+
330+ sudo -H dnf install uwsgi
331+
332+The next example shows a configuration using the `uWSGI Apache support`_ via
333+unix sockets and `mod_proxy_uwsgi`_.
334+
335+For socket communication, you have to activate ``socket =
336+/run/uwsgi/app/searx/socket`` and comment out the ``http = 127.0.0.1:8888``
337+configuration in your :ref:`uwsgi ini file <uwsgi configuration>`. If not
338+already exists, create a folder for the unix sockets, which can be used by the
339+searx account (see :ref:`create searx user`):
340+
341+.. code:: bash
342+
343+ sudo -H mkdir -p /run/uwsgi/app/searx/
344+ sudo -H chown -R searx:searx /run/uwsgi/app/searx/
345+
346+If the server is public; to limit access to your intranet replace ``Allow from
347+all`` directive and replace ``192.168.0.0/16`` with your subnet IP/class.
348+
349+.. tabs::
350+
351+ .. group-tab:: Ubuntu / debian
352+
353+ .. code:: apache
354+
355+ LoadModule headers_module /usr/lib/apache2/mod_headers.so
356+ LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
357+ LoadModule proxy_uwsgi_module /usr/lib/apache2/modules/mod_proxy_uwsgi.so
358+
359+ # SetEnvIf Request_URI /searx dontlog
360+ # CustomLog /dev/null combined env=dontlog
361+
362+ <Location /searx>
363+
364+ Require all granted
365+ Order deny,allow
366+ Deny from all
367+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
368+ Allow from all
369+
370+ ProxyPreserveHost On
371+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
372+
373+ </Location>
374+
375+ .. group-tab:: Arch Linux
376+
377+ .. code:: apache
378+
379+ FIXME needs test
380+
381+ LoadModule proxy_module modules/mod_proxy.so
382+ LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
383+
384+ # SetEnvIf Request_URI /searx dontlog
385+ # CustomLog /dev/null combined env=dontlog
386+
387+ <Location /searx>
388+
389+ Require all granted
390+ Order deny,allow
391+ Deny from all
392+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
393+ Allow from all
394+
395+ ProxyPreserveHost On
396+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
397+
398+ </Location>
399+
400+ .. group-tab:: Fedora / RHEL
401+
402+ .. code:: apache
403+
404+ FIXME needs test
405+
406+ LoadModule proxy_module modules/mod_proxy.so
407+ LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
408+ <IfModule proxy_uwsgi_module>
409+
410+ # SetEnvIf Request_URI /searx dontlog
411+ # CustomLog /dev/null combined env=dontlog
412+
413+ <Location /searx>
414+
415+ Require all granted
416+ Order deny,allow
417+ Deny from all
418+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
419+ Allow from all
420+
421+ ProxyPreserveHost On
422+ ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
423+
424+ </Location>
425+
426+ </IfModule>
427+
428+ .. group-tab:: old mod_wsgi
429+
430+ We show this only for historical reasons, DON'T USE `mod_uwsgi
431+ <https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-uwsgi>`_.
432+ ANYMORE!
433+
434+ .. code:: apache
435+
436+ <IfModule mod_uwsgi.c>
437+
438+ # SetEnvIf Request_URI "/searx" dontlog
439+ # CustomLog /dev/null combined env=dontlog
440+
441+ <Location /searx >
442+
443+ Require all granted
444+
445+ Options FollowSymLinks Indexes
446+ SetHandler uwsgi-handler
447+ uWSGISocket /run/uwsgi/app/searx/socket
448+
449+ Order deny,allow
450+ Deny from all
451+ # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
452+ Allow from all
453+
454+ </Location>
455+
456+ </IfModule>
457+
458+.. _restart apache:
459+
460+Restart service
461+===============
462+
463+.. tabs::
464+
465+ .. group-tab:: Ubuntu / debian
466+
467+ .. code:: sh
468+
469+ sudo -H systemctl restart apache2
470+ sudo -H service uwsgi restart searx
471+
472+ .. group-tab:: Arch Linux
473+
474+ .. code:: sh
475+
476+ sudo -H systemctl restart httpd
477+ sudo -H systemctl restart uwsgi@searx
478+
479+ .. group-tab:: Fedora / RHEL
480+
481+ .. code:: sh
482+
483+ sudo -H systemctl restart httpd
484+ sudo -H touch /etc/uwsgi.d/searx.ini
485+
486+
487+disable logs
488+============
489+
490+For better privacy you can disable Apache logs. In the examples above activate
491+one of the lines and `restart apache`_::
492+
493+
494+ # SetEnvIf Request_URI "/searx" dontlog
495+ # CustomLog /dev/null combined env=dontlog
496+
497+The ``CustomLog`` directive disable logs for the whole (virtual) server, use it
498+when the URL of the service does not have a path component (``/searx``) / is
499+located at root (``/``).
500+
501+.. _The Debian Layout:
502+
503+The Debian Layout
504+=================
505+
506+Be aware that the Debian layout is quite different from the standard Apache
507+configuration. For details look at the README.Debian_
508+(``/usr/share/doc/apache2/README.Debian.gz``). Some commands you should know on
509+Debian:
510+
511+* :man:`apache2ctl`: Apache HTTP server control interface
512+* :man:`a2enmod`, :man:`a2dismod`: switch on/off modules
513+* :man:`a2enconf`, :man:`a2disconf`: switch on/off configurations
514+* :man:`a2ensite`, :man:`a2dissite`: switch on/off sites
_sources/admin/installation-docker.rst.txtnew file+28
@@ -0,0 +1,28 @@
1+.. _installation docker:
2+
3+===================
4+Docker installation
5+===================
6+
7+.. contents:: Contents
8+ :depth: 2
9+ :local:
10+ :backlinks: entry
11+
12+Make sure you have installed Docker. For instance, you can deploy searx like this:
13+
14+.. code:: sh
15+
16+ docker pull wonderfall/searx
17+ docker run -d --name searx -p $PORT:8888 wonderfall/searx
18+
19+Go to ``http://localhost:$PORT``.
20+
21+See https://hub.docker.com/r/wonderfall/searx/ for more informations. It's also
22+possible to build searx from the embedded Dockerfile.
23+
24+.. code:: sh
25+
26+ git clone https://github.com/asciimoo/searx.git
27+ cd searx
28+ docker build -t whatever/searx .
_sources/admin/installation-nginx.rst.txtnew file+381
@@ -0,0 +1,381 @@
1+.. _installation nginx:
2+
3+==================
4+Install with nginx
5+==================
6+
7+.. _nginx:
8+ https://docs.nginx.com/nginx/admin-guide/
9+.. _nginx server configuration:
10+ https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers
11+.. _nginx beginners guide:
12+ http://nginx.org/en/docs/beginners_guide.html
13+.. _Getting Started wiki:
14+ https://www.nginx.com/resources/wiki/start/
15+.. _uWSGI support from nginx:
16+ https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
17+.. _uwsgi_params:
18+ https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html#configuring-nginx
19+.. _SCRIPT_NAME:
20+ https://werkzeug.palletsprojects.com/en/1.0.x/wsgi/#werkzeug.wsgi.get_script_name
21+
22+.. sidebar:: further reading
23+
24+ - nginx_
25+ - `nginx beginners guide`_
26+ - `nginx server configuration`_
27+ - `Getting Started wiki`_
28+ - `uWSGI support from nginx`_
29+
30+.. contents:: Contents
31+ :depth: 2
32+ :local:
33+ :backlinks: entry
34+
35+----
36+
37+**Install** :ref:`nginx searx site` using :ref:`filtron.sh <filtron.sh overview>`
38+
39+.. code:: bash
40+
41+ $ sudo -H ./utils/filtron.sh nginx install
42+
43+**Install** :ref:`nginx searx site` using :ref:`morty.sh <morty.sh overview>`
44+
45+.. code:: bash
46+
47+ $ sudo -H ./utils/morty.sh nginx install
48+
49+----
50+
51+
52+The nginx HTTP server
53+=====================
54+
55+If nginx_ is not installed (uwsgi will not work with the package nginx-light),
56+install it now.
57+
58+.. tabs::
59+
60+ .. group-tab:: Ubuntu / debian
61+
62+ .. code:: sh
63+
64+ sudo -H apt-get install nginx
65+
66+ .. group-tab:: Arch Linux
67+
68+ .. code-block:: sh
69+
70+ sudo -H pacman -S nginx-mainline
71+ sudo -H systemctl enable nginx
72+ sudo -H systemctl start nginx
73+
74+ .. group-tab:: Fedora / RHEL
75+
76+ .. code-block:: sh
77+
78+ sudo -H dnf install nginx
79+ sudo -H systemctl enable nginx
80+ sudo -H systemctl start nginx
81+
82+Now at http://localhost you should see a *Welcome to nginx!* page, on Fedora you
83+see a *Fedora Webserver - Test Page*. The test page comes from the default
84+`nginx server configuration`_. How this default intro site is configured,
85+depends on the linux distribution:
86+
87+.. tabs::
88+
89+ .. group-tab:: Ubuntu / debian
90+
91+ .. code:: sh
92+
93+ less /etc/nginx/nginx.conf
94+
95+ there is a line including site configurations from:
96+
97+ .. code:: nginx
98+
99+ include /etc/nginx/sites-enabled/*;
100+
101+ .. group-tab:: Arch Linux
102+
103+ .. code-block:: sh
104+
105+ less /etc/nginx/nginx.conf
106+
107+ in there is a configuration section named ``server``:
108+
109+ .. code-block:: nginx
110+
111+ server {
112+ listen 80;
113+ server_name localhost;
114+ # ...
115+ }
116+
117+ .. group-tab:: Fedora / RHEL
118+
119+ .. code-block:: sh
120+
121+ less /etc/nginx/nginx.conf
122+
123+ there is a line including site configurations from:
124+
125+ .. code:: nginx
126+
127+ include /etc/nginx/conf.d/*.conf;
128+
129+.. _nginx searx site:
130+
131+A nginx searx site
132+==================
133+
134+.. sidebar:: public to the internet?
135+
136+ If your searx instance is public, stop here and first install :ref:`filtron
137+ reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
138+ :ref:`installation scripts`. If already done, follow setup: *searx via
139+ filtron plus morty*.
140+
141+Now you have to create a configuration for the searx site. If nginx_ is new to
142+you, the `nginx beginners guide`_ is a good starting point and the `Getting
143+Started wiki`_ is always a good resource *to keep in the pocket*.
144+
145+.. tabs::
146+
147+ .. group-tab:: Ubuntu / debian
148+
149+ Create configuration at ``/etc/nginx/sites-available/searx`` and place a
150+ symlink to sites-enabled:
151+
152+ .. code:: sh
153+
154+ sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
155+
156+ .. group-tab:: Arch Linux
157+
158+ In the ``/etc/nginx/nginx.conf`` file, replace the configuration section
159+ named ``server``.
160+
161+ .. group-tab:: Fedora / RHEL
162+
163+ Create configuration at ``/etc/nginx/conf.d/searx`` and place a
164+ symlink to sites-enabled:
165+
166+.. tabs::
167+
168+ .. group-tab:: searx via filtron plus morty
169+
170+ Use this setup, if your instance is public to the internet, compare
171+ figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
172+
173+ 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
174+ *localhost 4004* (:ref:`filtron route request`):
175+
176+ .. code:: nginx
177+
178+ # https://example.org/searx
179+
180+ location /searx {
181+ proxy_pass http://127.0.0.1:4004/;
182+
183+ proxy_set_header Host $http_host;
184+ proxy_set_header Connection $http_connection;
185+ proxy_set_header X-Real-IP $remote_addr;
186+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
187+ proxy_set_header X-Scheme $scheme;
188+ proxy_set_header X-Script-Name /searx;
189+ }
190+
191+ location /searx/static {
192+ /usr/local/searx/searx-src/searx/static;
193+ }
194+
195+
196+ 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
197+ *localhost 3000*:
198+
199+ .. code:: nginx
200+
201+ # https://example.org/morty
202+
203+ location /morty {
204+ proxy_pass http://127.0.0.1:3000/;
205+
206+ proxy_set_header Host $http_host;
207+ proxy_set_header Connection $http_connection;
208+ proxy_set_header X-Real-IP $remote_addr;
209+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
210+ proxy_set_header X-Scheme $scheme;
211+ }
212+
213+ Note that reverse proxy advised to be used in case of single-user or
214+ low-traffic instances. For a fully result proxification add :ref:`morty's
215+ <searx morty>` **public URL** to your :origin:`searx/settings.yml`:
216+
217+ .. code:: yaml
218+
219+ result_proxy:
220+ # replace example.org with your server's public name
221+ url : https://example.org/morty
222+
223+ server:
224+ image_proxy : True
225+
226+
227+ .. group-tab:: proxy or uWSGI
228+
229+ Be warned, with this setup, your instance isn't :ref:`protected <searx
230+ filtron>`. Nevertheless it is good enough for intranet usage and it is a
231+ excellent example of; *how different services can be set up*. The next
232+ example shows a reverse proxy configuration wrapping the :ref:`searx-uWSGI
233+ application <uwsgi configuration>`, listening on ``http =
234+ 127.0.0.1:8888``.
235+
236+ .. code:: nginx
237+
238+ # https://hostname.local/
239+
240+ location / {
241+ proxy_pass http://127.0.0.1:8888;
242+
243+ proxy_set_header Host $host;
244+ proxy_set_header Connection $http_connection;
245+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
246+ proxy_set_header X-Scheme $scheme;
247+ proxy_buffering off;
248+ }
249+
250+ Alternatively you can use the `uWSGI support from nginx`_ via unix
251+ sockets. For socket communication, you have to activate ``socket =
252+ /run/uwsgi/app/searx/socket`` and comment out the ``http =
253+ 127.0.0.1:8888`` configuration in your :ref:`uwsgi ini file <uwsgi
254+ configuration>`.
255+
256+ The example shows a nginx virtual ``server`` configuration, listening on
257+ port 80 (IPv4 and IPv6 http://[::]:80). The uWSGI app is configured at
258+ location ``/`` by importing the `uwsgi_params`_ and passing requests to
259+ the uWSGI socket (``uwsgi_pass``). The ``server``\'s root points to the
260+ :ref:`searx-src clone <searx-src>` and wraps directly the
261+ :origin:`searx/static/` content at ``location /static``.
262+
263+ .. code:: nginx
264+
265+ server {
266+ # replace hostname.local with your server's name
267+ server_name hostname.local;
268+
269+ listen 80;
270+ listen [::]:80;
271+
272+ location / {
273+ include uwsgi_params;
274+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
275+ }
276+
277+ root /usr/local/searx/searx-src/searx;
278+ location /static { }
279+ }
280+
281+ If not already exists, create a folder for the unix sockets, which can be
282+ used by the searx account:
283+
284+ .. code:: bash
285+
286+ mkdir -p /run/uwsgi/app/searx/
287+ sudo -H chown -R searx:searx /run/uwsgi/app/searx/
288+
289+ .. group-tab:: \.\. at subdir URL
290+
291+ Be warned, with these setups, your instance isn't :ref:`protected <searx
292+ filtron>`. The examples are just here to demonstrate how to export the
293+ searx application from a subdirectory URL ``https://example.org/searx/``.
294+
295+ .. code:: nginx
296+
297+ # https://hostname.local/searx
298+
299+ location /searx {
300+ proxy_pass http://127.0.0.1:8888;
301+
302+ proxy_set_header Host $host;
303+ proxy_set_header Connection $http_connection;
304+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
305+ proxy_set_header X-Scheme $scheme;
306+ proxy_set_header X-Script-Name /searx;
307+ proxy_buffering off;
308+ }
309+
310+ location /searx/static {
311+ alias /usr/local/searx/searx-src/searx/static;
312+ }
313+
314+ The ``X-Script-Name /searx`` is needed by the searx implementation to
315+ calculate relative URLs correct. The next example shows a uWSGI
316+ configuration. Since there are no HTTP headers in a (u)WSGI protocol, the
317+ value is shipped via the SCRIPT_NAME_ in the WSGI environment.
318+
319+ .. code:: nginx
320+
321+ # https://hostname.local/searx
322+
323+ location /searx {
324+ uwsgi_param SCRIPT_NAME /searx;
325+ include uwsgi_params;
326+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
327+ }
328+
329+ location /searx/static {
330+ alias /usr/local/searx/searx-src/searx;
331+ }
332+
333+ For searx to work correctly the ``base_url`` must be set in the
334+ :origin:`searx/settings.yml`.
335+
336+ .. code:: yaml
337+
338+ server:
339+ # replace example.org with your server's public name
340+ base_url : https://example.org/searx/
341+
342+
343+Restart service:
344+
345+.. tabs::
346+
347+ .. group-tab:: Ubuntu / debian
348+
349+ .. code:: sh
350+
351+ sudo -H systemctl restart nginx
352+ sudo -H service uwsgi restart searx
353+
354+ .. group-tab:: Arch Linux
355+
356+ .. code:: sh
357+
358+ sudo -H systemctl restart nginx
359+ sudo -H systemctl restart uwsgi@searx
360+
361+ .. group-tab:: Fedora
362+
363+ .. code:: sh
364+
365+ sudo -H systemctl restart nginx
366+ sudo -H touch /etc/uwsgi.d/searx.ini
367+
368+
369+Disable logs
370+============
371+
372+For better privacy you can disable nginx logs in ``/etc/nginx/nginx.conf``.
373+
374+.. code:: nginx
375+
376+ http {
377+ # ...
378+ access_log /dev/null;
379+ error_log /dev/null;
380+ # ...
381+ }
_sources/admin/installation-searx.rst.txtnew file+92
@@ -0,0 +1,92 @@
1+.. _installation basic:
2+
3+=========================
4+Step by step installation
5+=========================
6+
7+.. contents:: Contents
8+ :depth: 2
9+ :local:
10+ :backlinks: entry
11+
12+Step by step installation with virtualenv. For Ubuntu, be sure to have enable
13+universe repository.
14+
15+.. _install packages:
16+
17+Install packages
18+================
19+
20+.. include:: ../../build/docs/includes/searx.rst
21+ :start-after: START distro-packages
22+ :end-before: END distro-packages
23+
24+.. hint::
25+
26+ This installs also the packages needed by :ref:`searx uwsgi`
27+
28+.. _create searx user:
29+
30+Create user
31+===========
32+
33+.. include:: ../../build/docs/includes/searx.rst
34+ :start-after: START create user
35+ :end-before: END create user
36+
37+.. _searx-src:
38+
39+install searx & dependencies
40+============================
41+
42+Start a interactive shell from new created user and clone searx:
43+
44+.. include:: ../../build/docs/includes/searx.rst
45+ :start-after: START clone searx
46+ :end-before: END clone searx
47+
48+In the same shell create *virtualenv*:
49+
50+.. include:: ../../build/docs/includes/searx.rst
51+ :start-after: START create virtualenv
52+ :end-before: END create virtualenv
53+
54+To install searx's dependencies, exit the searx *bash* session you opened above
55+and restart a new. Before install, first check if your *virualenv* was sourced
56+from the login (*~/.profile*):
57+
58+.. include:: ../../build/docs/includes/searx.rst
59+ :start-after: START manage.sh update_packages
60+ :end-before: END manage.sh update_packages
61+
62+.. tip::
63+
64+ Open a second terminal for the configuration tasks and left the ``(searx)$``
65+ terminal open for the tasks below.
66+
67+Configuration
68+==============
69+
70+Create a copy of the :origin:`searx/settings.yml` configuration file in system's
71+*/etc* folder. Configure like shown below -- replace ``searx@\$(uname -n)`` with
72+a name of your choice -- *and/or* edit ``/etc/searx/settings.yml`` if necessary.
73+
74+.. include:: ../../build/docs/includes/searx.rst
75+ :start-after: START searx config
76+ :end-before: END searx config
77+
78+Check
79+=====
80+
81+To check your searx setup, optional enable debugging and start the *webapp*.
82+Searx looks at the exported environment ``$SEARX_SETTINGS_PATH`` for a
83+configuration file.
84+
85+.. include:: ../../build/docs/includes/searx.rst
86+ :start-after: START check searx installation
87+ :end-before: END check searx installation
88+
89+If everything works fine, hit ``[CTRL-C]`` to stop the *webapp* and disable the
90+debug option in ``settings.yml``. You can now exit searx user bash (enter exit
91+command twice). At this point searx is not demonized; uwsgi allows this.
92+
_sources/admin/installation-uwsgi.rst.txtnew file+149
@@ -0,0 +1,149 @@
1+.. _searx uwsgi:
2+
3+=====
4+uwsgi
5+=====
6+
7+.. sidebar:: further reading
8+
9+ - `systemd.unit`_
10+ - `uWSGI Emperor`_
11+
12+.. contents:: Contents
13+ :depth: 2
14+ :local:
15+ :backlinks: entry
16+
17+
18+.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
19+.. _One service per app in systemd:
20+ https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
21+.. _uWSGI Emperor:
22+ https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html
23+.. _uwsgi ini file:
24+ https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files
25+.. _systemd unit template:
26+ http://0pointer.de/blog/projects/instances.html
27+
28+
29+Origin uWSGI
30+============
31+
32+How uWSGI is implemented by distributors is different. uWSGI itself
33+recommend two methods
34+
35+`systemd.unit`_ template files as described here `One service per app in systemd`_.
36+
37+ There is one `systemd unit template`_ and one `uwsgi ini file`_ per uWSGI-app
38+ placed at dedicated locations. Take archlinux and a searx.ini as example::
39+
40+ unit template --> /usr/lib/systemd/system/uwsgi@.service
41+ uwsgi ini files --> /etc/uwsgi/searx.ini
42+
43+ The searx app can be maintained as know from common systemd units::
44+
45+ systemctl enable uwsgi@searx
46+ systemctl start uwsgi@searx
47+ systemctl restart uwsgi@searx
48+ systemctl stop uwsgi@searx
49+
50+The `uWSGI Emperor`_ mode which fits for maintaining a large range of uwsgi apps.
51+
52+ The Emperor mode is a special uWSGI instance that will monitor specific
53+ events. The Emperor mode (service) is started by a (common, not template)
54+ systemd unit. The Emperor service will scan specific directories for `uwsgi
55+ ini file`_\s (also know as *vassals*). If a *vassal* is added, removed or the
56+ timestamp is modified, a corresponding action takes place: a new uWSGI
57+ instance is started, reload or stopped. Take Fedora and a searx.ini as
58+ example::
59+
60+ to start a new searx instance create --> /etc/uwsgi.d/searx.ini
61+ to reload the instance edit timestamp --> touch /etc/uwsgi.d/searx.ini
62+ to stop instance remove ini --> rm /etc/uwsgi.d/searx.ini
63+
64+Distributors
65+============
66+
67+The `uWSGI Emperor`_ mode and `systemd unit template`_ is what the distributors
68+mostly offer their users, even if they differ in the way they implement both
69+modes and their defaults. Another point they might differ is the packaging of
70+plugins (if so, compare :ref:`install packages`) and what the default python
71+interpreter is (python2 vs. python3).
72+
73+Fedora starts a Emperor by default, while archlinux does not start any uwsgi
74+service by default. Worth to know; debian (ubuntu) follow a complete different
75+approach. *debian*: your are familiar with the apache infrastructure? .. they
76+do similar for the uWSGI infrastructure (with less comfort), the folders are::
77+
78+ /etc/uwsgi/apps-available/
79+ /etc/uwsgi/apps-enabled/
80+
81+The `uwsgi ini file`_ is enabled by a symbolic link::
82+
83+ ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/
84+
85+From debian's documentation (``/usr/share/doc/uwsgi/README.Debian.gz``): You
86+could control specific instance(s) by issuing::
87+
88+ service uwsgi <command> <confname> <confname> ...
89+
90+ sudo -H service uwsgi start searx
91+ sudo -H service uwsgi stop searx
92+
93+My experience is, that this command is a bit buggy.
94+
95+.. _uwsgi configuration:
96+
97+Alltogether
98+===========
99+
100+Create the configuration ini-file according to your distribution (see below) and
101+restart the uwsgi application.
102+
103+.. tabs::
104+
105+ .. group-tab:: Ubuntu / debian
106+
107+ .. literalinclude:: ../../build/docs/includes/searx.rst
108+ :start-after: START searx uwsgi-description ubuntu-20.04
109+ :end-before: END searx uwsgi-description ubuntu-20.04
110+
111+
112+ .. group-tab:: Arch Linux
113+
114+ .. literalinclude:: ../../build/docs/includes/searx.rst
115+ :start-after: START searx uwsgi-description arch
116+ :end-before: END searx uwsgi-description arch
117+
118+
119+ .. group-tab:: Fedora / RHEL
120+
121+ .. literalinclude:: ../../build/docs/includes/searx.rst
122+ :start-after: START searx uwsgi-description fedora
123+ :end-before: END searx uwsgi-description fedora
124+
125+
126+.. tabs::
127+
128+ .. group-tab:: Ubuntu / debian
129+
130+ .. literalinclude:: ../../build/docs/includes/searx.rst
131+ :language: ini
132+ :start-after: START searx uwsgi-appini ubuntu-20.04
133+ :end-before: END searx uwsgi-appini ubuntu-20.04
134+
135+ .. group-tab:: Arch Linux
136+
137+ .. literalinclude:: ../../build/docs/includes/searx.rst
138+ :language: ini
139+ :start-after: START searx uwsgi-appini arch
140+ :end-before: END searx uwsgi-appini arch
141+
142+ .. group-tab:: Fedora / RHEL
143+
144+ .. literalinclude:: ../../build/docs/includes/searx.rst
145+ :language: ini
146+ :start-after: START searx uwsgi-appini fedora
147+ :end-before: END searx uwsgi-appini fedora
148+
149+
_sources/admin/installation.rst.txt+35−322
@@ -4,346 +4,59 @@
44Installation
55============
66
7−.. contents::
8− :depth: 3
7+*You're spoilt for choice*, choose your preferred method of installation.
98
10−Basic installation
11−==================
9+- :ref:`installation docker`
10+- :ref:`installation scripts`
11+- :ref:`installation basic`
1212
13−Step by step installation for Debian/Ubuntu with virtualenv. For Ubuntu, be sure
14−to have enable universe repository.
13+The :ref:`installation basic` is good enough for intranet usage and it is a
14+excellent illustration of *how a searx instance is build up*. If you place your
15+instance public to the internet you should really consider to install a
16+:ref:`filtron reverse proxy <filtron.sh>` and for privacy a :ref:`result proxy
17+<morty.sh>` is mandatory.
1518
16−Install packages:
19+Therefore, if you do not have any special preferences, its recommend to use the
20+:ref:`installation docker` or the `Installation scripts`_ from our :ref:`tooling
21+box <toolboxing>` as described below.
1722
18−.. code:: sh
23+.. _installation scripts:
1924
20− $ sudo -H apt-get install \
21− git build-essential libxslt-dev \
22− python-dev python-virtualenv python-babel \
23− zlib1g-dev libffi-dev libssl-dev
25+Installation scripts
26+====================
2427
25−Install searx:
28+The following will install a setup as shown in :ref:`architecture`. First you
29+need to get a clone. The clone is only needed for the installation procedure
30+and some maintenance tasks (alternatively you can create your own fork).
2631
27−.. code:: sh
32+.. code:: bash
2833
29− cd /usr/local
30− sudo -H git clone https://github.com/asciimoo/searx.git
31− sudo -H useradd searx -d /usr/local/searx
32− sudo -H chown searx:searx -R /usr/local/searx
34+ $ cd ~/Downloads
35+ $ git clone https://github.com/asciimoo/searx searx
36+ $ cd searx
3337
34−Install dependencies in a virtualenv:
38+**Install** :ref:`searx service <searx.sh>`
3539
36−.. code:: sh
40+This installs searx as described in :ref:`installation basic`.
3741
38− cd /usr/local/searx
39− sudo -H -u searx -i
42+.. code:: bash
4043
41−.. code:: sh
44+ $ sudo -H ./utils/searx.sh install all
4245
43− (searx)$ virtualenv searx-ve
44− (searx)$ . ./searx-ve/bin/activate
45− (searx)$ ./manage.sh update_packages
46+**Install** :ref:`filtron reverse proxy <filtron.sh>`
4647
47−Configuration
48−==============
48+.. code:: bash
4949
50−.. code:: sh
50+ $ sudo -H ./utils/filtron.sh install all
5151
52− sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
52+**Install** :ref:`result proxy <morty.sh>`
5353
54−Edit searx/settings.yml if necessary.
54+.. code:: bash
5555
56−Check
57−=====
56+ $ sudo -H ./utils/morty.sh install all
5857
59−Start searx:
58+If all services are running fine, you can add it to your HTTP server:
6059
61−.. code:: sh
60+- :ref:`installation apache`
61+- :ref:`installation nginx`
6262
63− python searx/webapp.py
64−
65−Go to http://localhost:8888
66−
67−If everything works fine, disable the debug option in settings.yml:
68−
69−.. code:: sh
70−
71− sed -i -e "s/debug : True/debug : False/g" searx/settings.yml
72−
73−At this point searx is not demonized ; uwsgi allows this.
74−
75−You can exit the virtualenv and the searx user bash (enter exit command
76−twice).
77−
78−uwsgi
79−=====
80−
81−Install packages:
82−
83−.. code:: sh
84−
85− sudo -H apt-get install \
86− uwsgi uwsgi-plugin-python
87−
88−Create the configuration file ``/etc/uwsgi/apps-available/searx.ini`` with this
89−content:
90−
91−.. code:: ini
92−
93− [uwsgi]
94− # Who will run the code
95− uid = searx
96− gid = searx
97−
98− # disable logging for privacy
99− disable-logging = true
100−
101− # Number of workers (usually CPU count)
102− workers = 4
103−
104− # The right granted on the created socket
105− chmod-socket = 666
106−
107− # Plugin to use and interpretor config
108− single-interpreter = true
109− master = true
110− plugin = python
111− lazy-apps = true
112− enable-threads = true
113−
114− # Module to import
115− module = searx.webapp
116−
117− # Support running the module from a webserver subdirectory.
118− route-run = fixpathinfo:
119−
120− # Virtualenv and python path
121− virtualenv = /usr/local/searx/searx-ve/
122− pythonpath = /usr/local/searx/
123− chdir = /usr/local/searx/searx/
124−
125−Activate the uwsgi application and restart:
126−
127−.. code:: sh
128−
129− cd /etc/uwsgi/apps-enabled
130− ln -s ../apps-available/searx.ini
131− /etc/init.d/uwsgi restart
132−
133−Web server
134−==========
135−
136−with nginx
137−----------
138−
139−If nginx is not installed (uwsgi will not work with the package
140−nginx-light):
141−
142−.. code:: sh
143−
144− sudo -H apt-get install nginx
145−
146−Hosted at /
147−~~~~~~~~~~~
148−
149−Create the configuration file ``/etc/nginx/sites-available/searx`` with this
150−content:
151−
152−.. code:: nginx
153−
154− server {
155− listen 80;
156− server_name searx.example.com;
157− root /usr/local/searx/searx;
158−
159− location /static {
160− }
161−
162− location / {
163− include uwsgi_params;
164− uwsgi_pass unix:/run/uwsgi/app/searx/socket;
165− }
166− }
167−
168−Create a symlink to sites-enabled:
169−
170−.. code:: sh
171−
172− sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
173−
174−Restart service:
175−
176−.. code:: sh
177−
178− sudo -H service nginx restart
179− sudo -H service uwsgi restart
180−
181−from subdirectory URL (/searx)
182−~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
183−
184−Add this configuration in the server config file
185−``/etc/nginx/sites-enabled/default``:
186−
187−.. code:: nginx
188−
189− location /searx/static {
190− alias /usr/local/searx/searx/static;
191− }
192−
193− location /searx {
194− uwsgi_param SCRIPT_NAME /searx;
195− include uwsgi_params;
196− uwsgi_pass unix:/run/uwsgi/app/searx/socket;
197− }
198−
199−
200−**OR** using reverse proxy (Please, note that reverse proxy advised to be used
201−in case of single-user or low-traffic instances.)
202−
203−.. code:: nginx
204−
205− location /searx/static {
206− alias /usr/local/searx/searx/static;
207− }
208−
209− location /searx {
210− proxy_pass http://127.0.0.1:8888;
211− proxy_set_header Host $host;
212− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
213− proxy_set_header X-Scheme $scheme;
214− proxy_set_header X-Script-Name /searx;
215− proxy_buffering off;
216− }
217−
218−
219−Enable ``base_url`` in ``searx/settings.yml``
220−
221−.. code:: yaml
222−
223− base_url : http://your.domain.tld/searx/
224−
225−Restart service:
226−
227−.. code:: sh
228−
229− sudo -H service nginx restart
230− sudo -H service uwsgi restart
231−
232−disable logs
233−^^^^^^^^^^^^
234−
235−for better privacy you can disable nginx logs about searx.
236−
237−how to proceed: below ``uwsgi_pass`` in ``/etc/nginx/sites-available/default``
238−add:
239−
240−.. code:: nginx
241−
242− access_log /dev/null;
243− error_log /dev/null;
244−
245−Restart service:
246−
247−.. code:: sh
248−
249− sudo -H service nginx restart
250−
251−with apache
252−-----------
253−
254−Add wsgi mod:
255−
256−.. code:: sh
257−
258− sudo -H apt-get install libapache2-mod-uwsgi
259− sudo -H a2enmod uwsgi
260−
261−Add this configuration in the file ``/etc/apache2/apache2.conf``:
262−
263−.. code:: apache
264−
265− <Location />
266− Options FollowSymLinks Indexes
267− SetHandler uwsgi-handler
268− uWSGISocket /run/uwsgi/app/searx/socket
269− </Location>
270−
271−Note that if your instance of searx is not at the root, you should change
272−``<Location />`` by the location of your instance, like ``<Location /searx>``.
273−
274−Restart Apache:
275−
276−.. code:: sh
277−
278− sudo -H /etc/init.d/apache2 restart
279−
280−disable logs
281−~~~~~~~~~~~~
282−
283−For better privacy you can disable Apache logs.
284−
285−.. warning::
286−
287− You can only disable logs for the whole (virtual) server not for a specific
288− path.
289−
290−Go back to ``/etc/apache2/apache2.conf`` and above ``<Location />`` add:
291−
292−.. code:: apache
293−
294− CustomLog /dev/null combined
295−
296−Restart Apache:
297−
298−.. code:: sh
299−
300− sudo -H /etc/init.d/apache2 restart
301−
302−How to update
303−=============
304−
305−.. code:: sh
306−
307− cd /usr/local/searx
308− sudo -H -u searx -i
309−
310−.. code:: sh
311−
312− (searx)$ . ./searx-ve/bin/activate
313− (searx)$ git stash
314− (searx)$ git pull origin master
315− (searx)$ git stash apply
316− (searx)$ ./manage.sh update_packages
317−
318−.. code:: sh
319−
320− sudo -H service uwsgi restart
321−
322−Docker
323−======
324−
325−Make sure you have installed Docker. For instance, you can deploy searx like this:
326−
327−.. code:: sh
328−
329− docker pull wonderfall/searx
330− docker run -d --name searx -p $PORT:8888 wonderfall/searx
331−
332−Go to ``http://localhost:$PORT``.
333−
334−See https://hub.docker.com/r/wonderfall/searx/ for more informations. It's also
335−possible to build searx from the embedded Dockerfile.
336−
337−.. code:: sh
338−
339− git clone https://github.com/asciimoo/searx.git
340− cd searx
341− docker build -t whatever/searx .
342−
343−References
344−==========
345−
346−* https://about.okhin.fr/posts/Searx/ with some additions
347−
348−* How to: `Setup searx in a couple of hours with a free SSL certificate
349− <https://www.reddit.com/r/privacytoolsIO/comments/366kvn/how_to_setup_your_own_privacy_respecting_search/>`__
_sources/admin/morty.rst.txt+7
@@ -1,7 +1,14 @@
1+
2+.. _searx morty:
3+
14=========================
25How to setup result proxy
36=========================
47
8+.. sidebar:: further reading
9+
10+ - :ref:`morty.sh`
11+
512.. _morty: https://github.com/asciimoo/morty
613.. _morty's README: https://github.com/asciimoo/morty
714
_sources/admin/settings.rst.txt+7−1
@@ -4,11 +4,17 @@
44``settings.yml``
55================
66
7+This page describe the options possibilities of the :origin:`searx/settings.yml`
8+file.
9+
710.. sidebar:: Further reading ..
811
912 - :ref:`search API`
1013
11−This page describe the options possibilities of the settings.yml file.
14+.. contents:: Contents
15+ :depth: 2
16+ :local:
17+ :backlinks: entry
1218
1319.. _settings global:
1420
_sources/admin/update-searx.rst.txtnew file+23
@@ -0,0 +1,23 @@
1+.. _update searx:
2+
3+=============
4+How to update
5+=============
6+
7+.. code:: sh
8+
9+ sudo -H -u searx -i
10+ (searx)$ git stash
11+ (searx)$ git pull origin master
12+ (searx)$ git stash apply
13+ (searx)$ ./manage.sh update_packages
14+
15+Restart uwsgi:
16+
17+.. tabs::
18+
19+ .. group-tab:: Ubuntu / debian
20+
21+ .. code:: sh
22+
23+ sudo -H systemctl restart uwsgi
_sources/blog/index.rst.txt+2−1
@@ -3,7 +3,8 @@ Blog
33====
44
55.. toctree::
6− :maxdepth: 1
6+ :maxdepth: 2
7+ :caption: Contents
78
89 python3
910 admin
_sources/dev/contribution_guide.rst.txt+5
@@ -4,6 +4,11 @@
44How to contribute
55=================
66
7+.. contents:: Contents
8+ :depth: 2
9+ :local:
10+ :backlinks: entry
11+
712Prime directives: Privacy, Hackability
813======================================
914
_sources/dev/index.rst.txt+2−1
@@ -3,7 +3,8 @@ Developer documentation
33=======================
44
55.. toctree::
6− :maxdepth: 1
6+ :maxdepth: 2
7+ :caption: Contents
78
89 quickstart
910 contribution_guide
_sources/dev/makefile.rst.txt+24−24
@@ -11,23 +11,17 @@ Makefile Targets
1111 Before looking deeper at the targets, first read about :ref:`makefile setup`
1212 and :ref:`make pyenv`.
1313
14+ To install system requirements follow :ref:`buildhosts`.
15+
1416With the aim to simplify development cycles, started with :pull:`1756` a
1517``Makefile`` based boilerplate was added. If you are not familiar with
1618Makefiles, we recommend to read gnu-make_ introduction.
1719
1820The usage is simple, just type ``make {target-name}`` to *build* a target.
19−Calling the ``help`` target gives a first overview::
20−
21− $ make help
22− test - run developer tests
23− docs - build documentation
24− docs-live - autobuild HTML documentation while editing
25− run - run developer instance
26− install - developer install (./local)
27− uninstall - uninstall (./local)
28− gh-pages - build docs & deploy on gh-pages branch
29− clean - drop builds and environments
30− ...
21+Calling the ``help`` target gives a first overview (``make help``):
22+
23+.. program-output:: bash -c "cd ..; make --no-print-directory help"
24+
3125
3226.. contents:: Contents
3327 :depth: 2
@@ -37,27 +31,33 @@ Calling the ``help`` target gives a first overview::
3731
3832.. _makefile setup:
3933
40−Setup
41−=====
34+Makefile setup
35+==============
4236
4337.. _git stash: https://git-scm.com/docs/git-stash
4438
45−The main setup is done in the :origin:`Makefile`::
46−
47− export GIT_URL=https://github.com/asciimoo/searx
48− export SEARX_URL=https://searx.me
49− export DOCS_URL=https://asciimoo.github.io/searx
50−
5139.. sidebar:: fork & upstream
5240
5341 Commit changes in your (local) branch, fork or whatever, but do not push them
5442 upstream / `git stash`_ is your friend.
5543
56−:GIT_URL: Changes this, to point to your searx fork.
44+The main setup is done in the :origin:`Makefile`.
45+
46+.. literalinclude:: ../../Makefile
47+ :start-after: START Makefile setup
48+ :end-before: END Makefile setup
49+
50+:GIT_URL: Changes this, to point to your searx fork.
51+:GIT_BRANCH: Changes this, to point to your searx branch.
52+:SEARX_URL: Changes this, to point to your searx instance.
53+:DOCS_URL: If you host your own (*brand*) documentation, change this URL.
5754
58−:SEARX_URL: Changes this, to point to your searx instance.
55+If you change any of this build environment variables, you have to run ``make
56+buildenv``::
5957
60−:DOCS_URL: If you host your own (branded) documentation, change this URL.
58+ $ make buildenv
59+ build searx/brand.py
60+ build utils/brand.env
6161
6262.. _make pyenv:
6363
@@ -170,7 +170,7 @@ e.g.:
170170
171171.. code:: sh
172172
173− $ make test.pep8 test.unit
173+ $ make test.pep8 test.unit test.sh
174174 . ./local/py3/bin/activate; ./manage.sh pep8_check
175175 [!] Running pep8 check
176176 . ./local/py3/bin/activate; ./manage.sh unit_tests
_sources/dev/quickstart.rst.txt+5−5
@@ -27,7 +27,7 @@ searx-ve virtualenv and install the required packages using ``manage.sh``.
2727 cd ~/myprojects
2828 git clone https://github.com/asciimoo/searx.git
2929 cd searx
30− virtualenv searx-ve
30+ python3 -m venv searx-ve
3131 . ./searx-ve/bin/activate
3232 ./manage.sh update_dev_packages
3333
@@ -87,8 +87,8 @@ After satisfying the requirements styles can be build using ``manage.sh``
8787 ./manage.sh styles
8888
8989
90−How to build the source of the oscar theme
91−==========================================
90+How to build the source of the themes
91+=====================================
9292
9393.. _grunt: https://gruntjs.com/
9494
@@ -98,13 +98,13 @@ NodeJS, so first Node has to be installed.
9898.. code:: sh
9999
100100 sudo -H apt-get install nodejs
101− sudo -H npm install -g grunt-cli
101+ make node.env
102102
103103After installing grunt, the files can be built using the following command:
104104
105105.. code:: sh
106106
107− ./manage.sh grunt_build
107+ make themes
108108
109109
110110Tips for debugging/development
_sources/dev/reST.rst.txt+3−4
@@ -326,7 +326,7 @@ Literal blocks
326326The simplest form of :duref:`literal-blocks` is a indented block introduced by
327327two colons (``::``). For highlighting use :dudir:`highlight` or :ref:`reST
328328code` directive. To include literals from external files use directive
329−:dudir:`literalinclude`.
329+:rst:dir:`literalinclude`.
330330
331331.. _reST literal:
332332
@@ -1312,9 +1312,8 @@ others are basic-tabs_ and code-tabs_. Below a *group-tab* example from
13121312
13131313.. literalinclude:: ../admin/buildhosts.rst
13141314 :language: reST
1315− :start-after: .. _system requirements:
1316− :end-before: .. _system requirements END:
1317−
1315+ :start-after: .. SNIP sh lint requirements
1316+ :end-before: .. SNAP sh lint requirements
13181317
13191318.. _math:
13201319
_sources/index.rst.txt+10−8
@@ -2,7 +2,14 @@
22Welcome to searx
33================
44
5−Search without being tracked.
5+ *Search without being tracked.*
6+
7+Searx is a free internet metasearch engine which aggregates results from more
8+than 70 search services. Users are neither tracked nor profiled. Additionally,
9+searx can be used over Tor for online anonymity.
10+
11+Get started with searx by using one of the Searx-instances_. If you don't trust
12+anyone, you can set up your own, see :ref:`installation`.
613
714.. sidebar:: Features
815
@@ -16,19 +23,14 @@ Search without being tracked.
1623 - Hosted by organizations, such as *La Quadrature du Net*, which promote
1724 digital rights
1825
19−Searx is a free internet metasearch engine which aggregates results from more
20−than 70 search services. Users are neither tracked nor profiled. Additionally,
21−searx can be used over Tor for online anonymity.
22−
23−Get started with searx by using one of the Searx-instances_. If you don't trust
24−anyone, you can set up your own, see :ref:`installation`.
25−
2626.. toctree::
2727 :maxdepth: 2
28+ :caption: Contents
2829
2930 user/index
3031 admin/index
3132 dev/index
33+ utils/index
3234 blog/index
3335
3436.. _Searx-instances: https://searx.space
_sources/user/index.rst.txt+2−1
@@ -3,7 +3,8 @@ User documentation
33==================
44
55.. toctree::
6− :maxdepth: 1
6+ :maxdepth: 2
7+ :caption: Contents
78
89 search_syntax
910 own-instance
_sources/user/own-instance.rst.txt+4−2
@@ -2,8 +2,10 @@
22Why use a private instance?
33===========================
44
5−"Is it worth to run my own instance?" is a common question among searx users.
6−Before answering this question, see what options a searx user has.
5+ *"Is it worth to run my own instance?"*
6+
7+\.\. is a common question among searx users. Before answering this question,
8+see what options a searx user has.
79
810Public instances are open to everyone who has access to its URL. Usually, these
911are operated by unknown parties (from the users' point of view). Private
_sources/user/public_instances.rst.txtdeleted−3
@@ -1,3 +0,0 @@
1−:orphan:
2−
3−This page page has been moved to `searx.space <https://searx.space/>`__
_sources/utils/filtron.sh.rst.txtnew file+80
@@ -0,0 +1,80 @@
1+
2+.. _filtron.sh:
3+
4+====================
5+``utils/filtron.sh``
6+====================
7+
8+.. sidebar:: further reading
9+
10+ - :ref:`searx filtron`
11+ - :ref:`architecture`
12+ - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
13+ <installation apache>`)
14+
15+.. _Go: https://golang.org/
16+.. _filtron: https://github.com/asciimoo/filtron
17+.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
18+
19+To simplify installation and maintenance of a filtron instance you can use the
20+script :origin:`utils/filtron.sh`. In most cases you will install filtron_
21+simply by running the command:
22+
23+.. code:: bash
24+
25+ sudo -H ./utils/filtron.sh install all
26+
27+The script adds a ``${SERVICE_USER}`` (default:``filtron``) and installs filtron_
28+into this user account:
29+
30+#. Create a separated user account (``filtron``).
31+#. Download and install Go_ binary in user's $HOME (``~filtron``).
32+#. Install filtron with the package management from Go_ (``go get -v -u
33+ github.com/asciimoo/filtron``)
34+#. Setup a proper rule configuration :origin:`[ref]
35+ <utils/templates/etc/filtron/rules.json>` (``/etc/filtron/rules.json``).
36+#. Setup a systemd service unit :origin:`[ref]
37+ <utils/templates/lib/systemd/system/filtron.service>`
38+ (``/lib/systemd/system/filtron.service``).
39+
40+
41+Create user
42+===========
43+
44+.. include:: ../../build/docs/includes/filtron.rst
45+ :start-after: START create user
46+ :end-before: END create user
47+
48+
49+Install go
50+==========
51+
52+.. include:: ../../build/docs/includes/filtron.rst
53+ :start-after: START install go
54+ :end-before: END install go
55+
56+
57+Install filtron
58+===============
59+
60+Install :origin:`rules.json <utils/templates/etc/filtron/rules.json>` at
61+``/etc/filtron/rules.json`` (see :ref:`Sample configuration of filtron`) and
62+install filtron software and systemd unit:
63+
64+.. include:: ../../build/docs/includes/filtron.rst
65+ :start-after: START install filtron
66+ :end-before: END install filtron
67+
68+.. include:: ../../build/docs/includes/filtron.rst
69+ :start-after: START install systemd unit
70+ :end-before: END install systemd unit
71+
72+.. _filtron.sh overview:
73+
74+Overview
75+========
76+
77+The ``--help`` output of the script is largely self-explanatory
78+(:ref:`toolboxing common`):
79+
80+.. program-output:: ../utils/filtron.sh --help
_sources/utils/index.rst.txtnew file+53
@@ -0,0 +1,53 @@
1+.. _searx_utils:
2+.. _toolboxing:
3+
4+=======================
5+Tooling box ``utils/*``
6+=======================
7+
8+In the folder :origin:`utils/` we maintain some tools useful for admins and
9+developers.
10+
11+.. toctree::
12+ :maxdepth: 2
13+ :caption: Contents
14+
15+ searx.sh
16+ filtron.sh
17+ morty.sh
18+ lxc.sh
19+
20+.. _toolboxing common:
21+
22+Common commands & environment
23+=============================
24+
25+Scripts to maintain services often dispose of common commands and environments.
26+
27+``shell`` : command
28+ Opens a shell from the service user ``${SERVICE_USSR}``, very helpful for
29+ troubleshooting.
30+
31+``inspect service`` : command
32+ Shows status and log of the service, most often you have a option to enable
33+ more verbose debug logs. Very helpful for debugging, but be careful not to
34+ enable debugging in a production environment!
35+
36+``FORCE_TIMEOUT`` : environment
37+ Sets timeout for interactive prompts. If you want to run a script in batch
38+ job, with defaults choices, set ``FORCE_TIMEOUT=0``. By example; to install a
39+ reverse proxy for filtron on all containers of the :ref:`searx suite
40+ <lxc-searx.env>` use ::
41+
42+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh apache install
43+
44+.. _toolboxing setup:
45+
46+Tooling box setup
47+=================
48+
49+The main setup is done in the :origin:`.config.sh` (read also :ref:`makefile
50+setup`).
51+
52+.. literalinclude:: ../../.config.sh
53+ :language: bash
_sources/utils/lxc.sh.rst.txtnew file+148
@@ -0,0 +1,148 @@
1+
2+.. _snap: https://snapcraft.io
3+.. _snapcraft LXD: https://snapcraft.io/lxd
4+.. _LXC/LXD Image Server: https://uk.images.linuxcontainers.org/
5+.. _LXC: https://linuxcontainers.org/lxc/introduction/
6+.. _LXD: https://linuxcontainers.org/lxd/introduction/
7+.. _`LXD@github`: https://github.com/lxc/lxd
8+
9+.. _archlinux: https://www.archlinux.org/
10+
11+.. _lxc.sh:
12+
13+================
14+``utils/lxc.sh``
15+================
16+
17+.. sidebar:: further reading
18+
19+ - snap_, `snapcraft LXD`_
20+ - LXC_, LXD_
21+ - `LXC/LXD Image Server`_
22+ - `LXD@github`_
23+
24+With the use of *Linux Containers* (LXC_) we can scale our tasks over a stack of
25+containers, what we call the: *lxc suite*. The *searx suite*
26+(:origin:`lxc-searx.env <utils/lxc-searx.env>`) is loaded by default, every time
27+you start the ``lxc.sh`` script (*you do not need to care about*).
28+
29+Before you can start with containers, you need to install and initiate LXD_
30+once::
31+
32+ $ snap install lxd
33+ $ lxd init --auto
34+
35+To make use of the containers from the *searx suite*, you have to build the
36+:ref:`LXC suite containers <lxc.sh help>` initial. But be warned, **this might
37+take some time**::
38+
39+ $ sudo -H ./utils/lxc.sh build
40+
41+A cup of coffee later, your LXC suite is build up and you can run whatever task
42+you want / in a selected or even in all :ref:`LXC suite containers <lxc.sh
43+help>`. If you do not want to build all containers, **you can build just
44+one**::
45+
46+ $ sudo -H ./utils/lxc.sh build searx-ubu1804
47+
48+*Good to know ...*
49+
50+Eeach container shares the root folder of the repository and the
51+command ``utils/lxc.sh cmd`` **handles relative path names transparent**,
52+compare output of::
53+
54+ $ sudo -H ./utils/lxc.sh cmd -- ls -la Makefile
55+ ...
56+
57+In the containers, you can run what ever you want, e.g. to start a bash use::
58+
59+ $ sudo -H ./utils/lxc.sh cmd searx-ubu1804 bash
60+ INFO: [searx-ubu1804] bash
61+ root@searx-ubu1804:/share/searx#
62+
63+If there comes the time you want to **get rid off all** the containers and
64+**clean up local images** just type::
65+
66+ $ sudo -H ./utils/lxc.sh remove
67+ $ sudo -H ./utils/lxc.sh remove images
68+
69+
70+Install suite
71+=============
72+
73+To install the complete :ref:`searx suite (includes searx, morty & filtron)
74+<lxc-searx.env>` into all LXC_ use::
75+
76+ $ sudo -H ./utils/lxc.sh install suite
77+
78+The command above installs a searx suite (see :ref:`installation scripts`). To
79+get the IP (URL) of the filtron service in the containers use ``show suite``
80+command. To test instances from containers just open the URLs in your
81+WEB-Browser::
82+
83+ $ sudo ./utils/lxc.sh show suite | grep filtron
84+ [searx-ubu1604] INFO: (eth0) filtron: http://n.n.n.246:4004/ http://n.n.n.246/searx
85+ [searx-ubu1804] INFO: (eth0) filtron: http://n.n.n.147:4004/ http://n.n.n.147/searx
86+ [searx-ubu1910] INFO: (eth0) filtron: http://n.n.n.140:4004/ http://n.n.n.140/searx
87+ [searx-ubu2004] INFO: (eth0) filtron: http://n.n.n.18:4004/ http://n.n.n.18/searx
88+ [searx-fedora31] INFO: (eth0) filtron: http://n.n.n.46:4004/ http://n.n.n.46/searx
89+ [searx-archlinux] INFO: (eth0) filtron: http://n.n.n.32:4004/ http://n.n.n.32/searx
90+
91+To :ref:`install a nginx <installation nginx>` reverse proxy for filtron and
92+morty use (or alternatively use :ref:`apache <installation apache>`)::
93+
94+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh nginx install
95+ sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/morty.sh nginx install
96+
97+
98+Running commands
99+================
100+
101+**Inside containers, you can use make or run scripts** from the
102+:ref:`toolboxing`. By example: to setup a :ref:`buildhosts` and run the
103+Makefile target ``test`` in the archlinux_ container::
104+
105+ sudo -H ./utils/lxc.sh cmd searx-archlinux ./utils/searx.sh buildhost
106+ sudo -H ./utils/lxc.sh cmd searx-archlinux make test
107+
108+
109+Setup searx buildhost
110+=====================
111+
112+You can **install the searx buildhost environment** into one or all containers.
113+The installation procedure to set up a :ref:`build host<buildhosts>` takes its
114+time. Installation in all containers will take more time (time for another cup
115+of coffee).::
116+
117+ sudo -H ./utils/lxc.sh cmd -- ./utils/searx.sh buildhost
118+
119+To build (live) documentation inside a archlinux_ container::
120+
121+ sudo -H ./utils/lxc.sh cmd searx-archlinux make docs-clean docs-live
122+ ...
123+ [I 200331 15:00:42 server:296] Serving on http://0.0.0.0:8080
124+
125+To get IP of the container and the port number *live docs* is listening::
126+
127+ $ sudo ./utils/lxc.sh show suite | grep docs-live
128+ ...
129+ [searx-archlinux] INFO: (eth0) docs-live: http://n.n.n.12:8080/
130+
131+
132+.. _lxc.sh help:
133+
134+Overview
135+========
136+
137+The ``--help`` output of the script is largely self-explanatory:
138+
139+.. program-output:: ../utils/lxc.sh --help
140+
141+
142+.. _lxc-searx.env:
143+
144+searx suite
145+===========
146+
147+.. literalinclude:: ../../utils/lxc-searx.env
148+ :language: bash
_sources/utils/morty.sh.rst.txtnew file+80
@@ -0,0 +1,80 @@
1+
2+.. _morty: https://github.com/asciimoo/morty
3+.. _morty's README: https://github.com/asciimoo/morty
4+.. _Go: https://golang.org/
5+
6+.. _morty.sh:
7+
8+==================
9+``utils/morty.sh``
10+==================
11+
12+.. sidebar:: further reading
13+
14+ - :ref:`architecture`
15+ - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
16+ <installation apache>`)
17+ - :ref:`searx morty`
18+
19+To simplify installation and maintenance of a morty_ instance you can use the
20+script :origin:`utils/morty.sh`. In most cases you will install morty_ simply by
21+running the command:
22+
23+.. code:: bash
24+
25+ sudo -H ./utils/morty.sh install all
26+
27+The script adds a ``${SERVICE_USER}`` (default:``morty``) and installs morty_
28+into this user account:
29+
30+#. Create a separated user account (``morty``).
31+#. Download and install Go_ binary in user's $HOME (``~morty``).
32+#. Install morty_ with the package management from Go_ (``go get -v -u
33+ github.com/asciimoo/morty``)
34+#. Setup a systemd service unit :origin:`[ref]
35+ <utils/templates/lib/systemd/system/morty.service>`
36+ (``/lib/systemd/system/morty.service``).
37+
38+.. hint::
39+
40+ To add morty to your searx instance read chapter :ref:`searx morty`.
41+
42+Create user
43+===========
44+
45+.. include:: ../../build/docs/includes/morty.rst
46+ :start-after: START create user
47+ :end-before: END create user
48+
49+
50+Install go
51+==========
52+
53+.. include:: ../../build/docs/includes/morty.rst
54+ :start-after: START install go
55+ :end-before: END install go
56+
57+
58+Install morty
59+=============
60+
61+Install morty software and systemd unit:
62+
63+.. include:: ../../build/docs/includes/morty.rst
64+ :start-after: START install morty
65+ :end-before: END install morty
66+
67+.. include:: ../../build/docs/includes/morty.rst
68+ :start-after: START install systemd unit
69+ :end-before: END install systemd unit
70+
71+.. _morty.sh overview:
72+
73+Overview
74+========
75+
76+The ``--help`` output of the script is largely self-explanatory
77+(:ref:`toolboxing common`):
78+
79+.. program-output:: ../utils/morty.sh --help
80+
_sources/utils/searx.sh.rst.txtnew file+39
@@ -0,0 +1,39 @@
1+
2+.. _searx.sh:
3+
4+==================
5+``utils/searx.sh``
6+==================
7+
8+.. sidebar:: further reading
9+
10+ - :ref:`architecture`
11+ - :ref:`installation`
12+ - :ref:`installation nginx`
13+ - :ref:`installation apache`
14+
15+To simplify installation and maintenance of a searx instance you can use the
16+script :origin:`utils/searx.sh`.
17+
18+Install
19+=======
20+
21+In most cases you will install searx simply by running the command:
22+
23+.. code:: bash
24+
25+ sudo -H ./utils/searx.sh install all
26+
27+The script adds a ``${SERVICE_USER}`` (default:``searx``) and installs searx
28+into this user account. The installation is described in chapter
29+:ref:`installation basic`.
30+
31+.. _intranet reverse proxy:
32+
33+Overview
34+========
35+
36+The ``--help`` output of the script is largely self-explanatory
37+(:ref:`toolboxing common`):
38+
39+.. program-output:: ../utils/searx.sh --help
_static/documentation_options.js+1
@@ -5,6 +5,7 @@ var DOCUMENTATION_OPTIONS = {
55 COLLAPSE_INDEX: false,
66 BUILDER: 'html',
77 FILE_SUFFIX: '.html',
8+ LINK_SUFFIX: '.html',
89 HAS_SOURCE: true,
910 SOURCELINK_SUFFIX: '.txt',
1011 NAVIGATION_WITH_KEYS: false
_static/searchtools.js+4−1
@@ -251,6 +251,7 @@ var Search = {
251251 var item = results.pop();
252252 var listItem = $('<li style="display:none"></li>');
253253 var requestUrl = "";
254+ var linkUrl = "";
254255 if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
255256 // dirhtml builder
256257 var dirname = item[0] + '/';
@@ -260,13 +261,15 @@ var Search = {
260261 dirname = '';
261262 }
262263 requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
264+ linkUrl = requestUrl;
263265
264266 } else {
265267 // normal html builders
266268 requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
269+ linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
267270 }
268271 listItem.append($('<a/>').attr('href',
269− requestUrl +
272+ linkUrl +
270273 highlightstring + item[2]).html(item[1]));
271274 if (item[3]) {
272275 listItem.append($('<span> (' + item[3] + ')</span>'));
_static/searx.css+11−1
@@ -33,7 +33,7 @@ p.sidebar-title, .sidebar p {
3333/* admonitions
3434*/
3535
36−div.admonition, div.topic {
36+div.admonition, div.topic, div.toctree-wrapper {
3737 background-color: #fafafa;
3838 margin: 8px 0px;
3939 padding: 1em;
@@ -42,6 +42,16 @@ div.admonition, div.topic {
4242 border-right: none;
4343 border-bottom: none;
4444 border-left: 5pt solid #ccc;
45+ list-style-type: disclosure-closed;
46+}
47+
48+div.toctree-wrapper p.caption {
49+ font-weight: normal;
50+ font-size: 24px;
51+ margin: 0 0 10px 0;
52+ padding: 0;
53+ line-height: 1;
54+ display: inline;
4555}
4656
4757p.admonition-title:after {
admin/api.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -184,7 +184,7 @@ HTML of the site. URL of the searx instance and values are customizable.</p>
184184
185185 <div class="footer" role="contentinfo">
186186 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
187− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
187+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
188188 </div>
189189 <script src="../_static/version_warning_offset.js"></script>
190190
admin/architecture.html+12−7
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -45,15 +45,20 @@
4545 <div class="section" id="architecture">
4646<span id="id1"></span><h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline">¶</a></h1>
4747<div class="sidebar">
48−<p class="sidebar-title">Needs work!</p>
49−<p>This article needs some work / Searx is a collaborative effort. If you have
50−any contribution, feel welcome to send us your <a class="reference external" href="https://github.com/asciimoo/searx/pull/../pulls">PR</a>, see
51−<a class="reference internal" href="../dev/contribution_guide.html#how-to-contribute"><span class="std std-ref">How to contribute</span></a>.</p>
48+<p class="sidebar-title">Further reading</p>
49+<ul class="simple">
50+<li><p>Reverse Proxy: <a class="reference internal" href="installation-apache.html#apache-searx-site"><span class="std std-ref">Apache</span></a> &amp; <a class="reference internal" href="installation-nginx.html#nginx-searx-site"><span class="std std-ref">nginx</span></a></p></li>
51+<li><p>Filtron: <a class="reference internal" href="filtron.html#searx-filtron"><span class="std std-ref">How to protect an instance</span></a></p></li>
52+<li><p>Morty: <a class="reference internal" href="morty.html#searx-morty"><span class="std std-ref">How to setup result proxy</span></a></p></li>
53+<li><p>uWSGI: <a class="reference internal" href="installation-uwsgi.html#searx-uwsgi"><span class="std std-ref">uwsgi</span></a></p></li>
54+<li><p>Searx: <a class="reference internal" href="installation-searx.html#installation-basic"><span class="std std-ref">Step by step installation</span></a></p></li>
55+</ul>
5256</div>
5357<p>Herein you will find some hints and suggestions about typical architectures of
5458searx infrastructures.</p>
5559<p>We start with a contribution from <a class="reference external" href="https://github.com/asciimoo/searx/pull/1776#issuecomment-567917320">&#64;dalf</a>.
56−It shows a <em>reference</em> setup for public searx instances.</p>
60+It shows a <em>reference</em> setup for public searx instances which can build up and
61+maintained by the scripts from our <a class="reference internal" href="../utils/index.html#toolboxing"><span class="std std-ref">Tooling box utils/*</span></a>.</p>
5762<div class="figure align-default" id="id2">
5863<img alt="arch_public.dot" src="../_images/arch_public.svg" /><p class="caption"><span class="caption-number">Fig. 1 </span><span class="caption-text">Reference architecture of a public searx setup.</span><a class="headerlink" href="#id2" title="Permalink to this image">¶</a></p>
5964</div>
@@ -111,7 +116,7 @@ It shows a <em>reference</em> setup for public searx instances.</p>
111116
112117 <div class="footer" role="contentinfo">
113118 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
114− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
119+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
115120 </div>
116121 <script src="../_static/version_warning_offset.js"></script>
117122
admin/buildhosts.html+153−12
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -55,10 +55,110 @@
5555<p>If you have any contribution send us your <a class="reference external" href="https://github.com/asciimoo/searx/pull/../pulls">PR</a>, see
5656<a class="reference internal" href="../dev/contribution_guide.html#how-to-contribute"><span class="std std-ref">How to contribute</span></a>.</p>
5757</div>
58+<div class="contents local topic" id="contents">
59+<p class="topic-title">Contents</p>
60+<ul class="simple">
61+<li><p><a class="reference internal" href="#build-docs" id="id2">Build docs</a></p></li>
62+<li><p><a class="reference internal" href="#lint-shell-scripts" id="id3">Lint shell scripts</a></p></li>
63+</ul>
64+</div>
5865<p>To get best results from build, its recommend to install additional packages
59−on build hosts.</p>
66+on build hosts (see <a class="reference internal" href="../utils/searx.sh.html#searx-sh"><span class="std std-ref">utils/searx.sh</span></a>).:</p>
67+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/searx.sh buildhost
68+</pre></div>
69+</div>
70+<p>This will install packages needed by searx:</p>
71+<div class="sphinx-tabs docutils container">
72+<div class="ui top attached tabular menu sphinx-menu docutils container">
73+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
74+<div class="docutils container">
75+<p>Ubuntu / debian</p>
76+</div>
77+</div>
78+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
79+<div class="docutils container">
80+<p>Arch Linux</p>
81+</div>
82+</div>
83+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
84+<div class="docutils container">
85+<p>Fedora / RHEL</p>
86+</div>
87+</div>
88+</div>
89+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
90+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H apt-get install -y <span class="se">\</span>
91+ virtualenv python3-dev python3-babel python3-venv <span class="se">\</span>
92+ uwsgi uwsgi-plugin-python3 <span class="se">\</span>
93+ git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev <span class="se">\</span>
94+ shellcheck
95+</pre></div>
96+</div>
97+</div>
98+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
99+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H pacman -S --noconfirm <span class="se">\</span>
100+ python-virtualenv python python-pip python-lxml python-babel <span class="se">\</span>
101+ uwsgi uwsgi-plugin-python <span class="se">\</span>
102+ git base-devel libxml2 <span class="se">\</span>
103+ shellcheck
104+</pre></div>
105+</div>
106+</div>
107+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
108+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H dnf install -y <span class="se">\</span>
109+ virtualenv python python-pip python-lxml python-babel <span class="se">\</span>
110+ uwsgi uwsgi-plugin-python3 <span class="se">\</span>
111+ git @development-tools libxml2 <span class="se">\</span>
112+ ShellCheck
113+</pre></div>
114+</div>
115+</div>
116+</div>
117+<p>and packages needed to build docuemtation and run tests:</p>
118+<div class="sphinx-tabs docutils container">
119+<div class="ui top attached tabular menu sphinx-menu docutils container">
120+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
121+<div class="docutils container">
122+<p>Ubuntu / debian</p>
123+</div>
124+</div>
125+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
126+<div class="docutils container">
127+<p>Arch Linux</p>
128+</div>
129+</div>
130+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
131+<div class="docutils container">
132+<p>Fedora / RHEL</p>
133+</div>
134+</div>
135+</div>
136+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
137+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H apt-get install -y <span class="se">\</span>
138+ firefox graphviz imagemagick texlive-xetex librsvg2-bin <span class="se">\</span>
139+ texlive-latex-recommended texlive-extra-utils ttf-dejavu
140+</pre></div>
141+</div>
142+</div>
143+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
144+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H pacman -S --noconfirm <span class="se">\</span>
145+ firefox graphviz imagemagick texlive-bin extra/librsvg <span class="se">\</span>
146+ texlive-core texlive-latexextra ttf-dejavu
147+</pre></div>
148+</div>
149+</div>
150+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
151+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H dnf install -y <span class="se">\</span>
152+ firefox graphviz graphviz-gd ImageMagick librsvg2-tools <span class="se">\</span>
153+ texlive-xetex-bin texlive-collection-fontsrecommended <span class="se">\</span>
154+ texlive-collection-latex dejavu-sans-fonts dejavu-serif-fonts <span class="se">\</span>
155+ dejavu-sans-mono-fonts
156+</pre></div>
157+</div>
158+</div>
159+</div>
60160<div class="section" id="build-docs">
61−<span id="docs-build"></span><h2>Build docs<a class="headerlink" href="#build-docs" title="Permalink to this headline">¶</a></h2>
161+<span id="docs-build"></span><h2><a class="toc-backref" href="#id2">Build docs</a><a class="headerlink" href="#build-docs" title="Permalink to this headline">¶</a></h2>
62162<div class="sidebar">
63163<p class="sidebar-title">Sphinx build needs</p>
64164<ul class="simple">
@@ -72,9 +172,16 @@ on build hosts.</p>
72172docs can be build from scratch with <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span></code>. For better math and image
73173processing additional packages are needed. The <a class="reference external" href="https://tug.org/xetex/">XeTeX</a> needed not only for PDF
74174creation, its also needed for <a class="reference internal" href="../dev/reST.html#math"><span class="std std-ref">Math equations</span></a> when HTML output is build.</p>
75−<p>To be able to do <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/extensions/math.html#math-support" title="(in Sphinx v4.0.0+/b1400ac42)"><span>Math support for HTML outputs in Sphinx</span></a> without CDNs, the math are rendered
76−as images (<code class="docutils literal notranslate"><span class="pre">sphinx.ext.imgmath</span></code> extension). If your docs build (<code class="docutils literal notranslate"><span class="pre">make</span>
77−<span class="pre">docs</span></code>) shows warnings like this:</p>
175+<p>To be able to do <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/extensions/math.html#math-support" title="(in Sphinx v4.0.0+/adad0e62b)"><span>Math support for HTML outputs in Sphinx</span></a> without CDNs, the math are rendered
176+as images (<code class="docutils literal notranslate"><span class="pre">sphinx.ext.imgmath</span></code> extension).</p>
177+<p>Here is the extract from the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/docs/conf.py">git://docs/conf.py</a> file, setting math renderer
178+to <code class="docutils literal notranslate"><span class="pre">imgmath</span></code>:</p>
179+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">html_math_renderer</span> <span class="o">=</span> <span class="s1">&#39;imgmath&#39;</span>
180+<span class="n">imgmath_image_format</span> <span class="o">=</span> <span class="s1">&#39;svg&#39;</span>
181+<span class="n">imgmath_font_size</span> <span class="o">=</span> <span class="mi">14</span>
182+</pre></div>
183+</div>
184+<p>If your docs build (<code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span></code>) shows warnings like this:</p>
78185<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>WARNING: dot(1) not found, for better output quality install \
79186 graphviz from http://www.graphviz.org
80187..
@@ -84,7 +191,7 @@ WARNING: LaTeX command &#39;latex&#39; cannot be run (needed for math \
84191</div>
85192<p>you need to install additional packages on your build host, to get better HTML
86193output.</p>
87−<div class="sphinx-tabs docutils container" id="system-requirements">
194+<div class="sphinx-tabs docutils container">
88195<div class="ui top attached tabular menu sphinx-menu docutils container">
89196<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
90197<div class="docutils container">
@@ -150,17 +257,51 @@ output.</p>
150257<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
151258<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo dnf install <span class="se">\</span>
152259 texlive-collection-fontsrecommended texlive-collection-latex <span class="se">\</span>
153− dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts
260+ dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts <span class="se">\</span>
261+ ImageMagick
154262</pre></div>
155263</div>
156264</div>
157265</div>
158−<div class="highlight-python notranslate" id="system-requirements-end"><div class="highlight"><pre><span></span><span class="n">html_math_renderer</span> <span class="o">=</span> <span class="s1">&#39;imgmath&#39;</span>
159−<span class="n">imgmath_image_format</span> <span class="o">=</span> <span class="s1">&#39;svg&#39;</span>
160−<span class="n">imgmath_font_size</span> <span class="o">=</span> <span class="mi">14</span>
266+</div>
267+<div class="section" id="lint-shell-scripts">
268+<span id="sh-lint"></span><h2><a class="toc-backref" href="#id3">Lint shell scripts</a><a class="headerlink" href="#lint-shell-scripts" title="Permalink to this headline">¶</a></h2>
269+<p>To lint shell scripts, we use <a class="reference external" href="https://github.com/koalaman/shellcheck">ShellCheck</a> - A shell script static analysis tool.</p>
270+<div class="sphinx-tabs docutils container">
271+<div class="ui top attached tabular menu sphinx-menu docutils container">
272+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
273+<div class="docutils container">
274+<p>Ubuntu / debian</p>
275+</div>
276+</div>
277+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
278+<div class="docutils container">
279+<p>Arch Linux</p>
280+</div>
281+</div>
282+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
283+<div class="docutils container">
284+<p>Fedora / RHEL</p>
285+</div>
286+</div>
287+</div>
288+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
289+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo apt install shellcheck
290+</pre></div>
291+</div>
292+</div>
293+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
294+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo pacman -S shellcheck
161295</pre></div>
162296</div>
163297</div>
298+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
299+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo dnf install ShellCheck
300+</pre></div>
301+</div>
302+</div>
303+</div>
304+</div>
164305</div>
165306
166307
@@ -215,7 +356,7 @@ output.</p>
215356
216357 <div class="footer" role="contentinfo">
217358 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
218− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
359+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
219360 </div>
220361 <script src="../_static/version_warning_offset.js"></script>
221362
admin/engines.html+2−1332
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -134,1336 +134,6 @@
134134</tr>
135135</thead>
136136<tbody>
137−<tr class="row-even"><th class="stub"><p>apk mirror</p></th>
138−<th class="stub"><p>!apkm</p></th>
139−<td><p>apkmirror</p></td>
140−<td><p>4.0</p></td>
141−<td><p>it</p></td>
142−<td><p>y</p></td>
143−<td><p>y</p></td>
144−<td></td>
145−<td><p>y</p></td>
146−<td></td>
147−<td></td>
148−<td><p>1</p></td>
149−<td><p>y</p></td>
150−</tr>
151−<tr class="row-odd"><th class="stub"><p>arch linux wiki</p></th>
152−<th class="stub"><p>!al</p></th>
153−<td><p>archlinux</p></td>
154−<td><p>2.0</p></td>
155−<td><p>it</p></td>
156−<td><p>y</p></td>
157−<td><p>y</p></td>
158−<td></td>
159−<td></td>
160−<td></td>
161−<td></td>
162−<td><p>1</p></td>
163−<td></td>
164−</tr>
165−<tr class="row-even"><th class="stub"><p>archive is</p></th>
166−<th class="stub"><p>!ai</p></th>
167−<td><p>xpath</p></td>
168−<td><p>7.0</p></td>
169−<td><p>general</p></td>
170−<td></td>
171−<td><p>y</p></td>
172−<td></td>
173−<td><p>y</p></td>
174−<td></td>
175−<td></td>
176−<td><p>1</p></td>
177−<td><p>y</p></td>
178−</tr>
179−<tr class="row-odd"><th class="stub"><p>arxiv</p></th>
180−<th class="stub"><p>!arx</p></th>
181−<td><p>arxiv</p></td>
182−<td><p>4.0</p></td>
183−<td><p>science</p></td>
184−<td><p>y</p></td>
185−<td><p>y</p></td>
186−<td></td>
187−<td></td>
188−<td></td>
189−<td></td>
190−<td><p>1</p></td>
191−<td></td>
192−</tr>
193−<tr class="row-even"><th class="stub"><p>wikipedia</p></th>
194−<th class="stub"><p>!wp</p></th>
195−<td><p>wikipedia</p></td>
196−<td><p>2.0</p></td>
197−<td><p>general</p></td>
198−<td></td>
199−<td><p>y</p></td>
200−<td></td>
201−<td></td>
202−<td></td>
203−<td></td>
204−<td><p>1</p></td>
205−<td></td>
206−</tr>
207−<tr class="row-odd"><th class="stub"><p>bing</p></th>
208−<th class="stub"><p>!bi</p></th>
209−<td><p>bing</p></td>
210−<td><p>2.0</p></td>
211−<td><p>general</p></td>
212−<td><p>y</p></td>
213−<td><p>y</p></td>
214−<td></td>
215−<td></td>
216−<td></td>
217−<td></td>
218−<td><p>1</p></td>
219−<td></td>
220−</tr>
221−<tr class="row-even"><th class="stub"><p>bing images</p></th>
222−<th class="stub"><p>!bii</p></th>
223−<td><p>bing_images</p></td>
224−<td><p>2.0</p></td>
225−<td><p>images</p></td>
226−<td><p>y</p></td>
227−<td><p>y</p></td>
228−<td><p>y</p></td>
229−<td></td>
230−<td><p>y</p></td>
231−<td></td>
232−<td><p>1</p></td>
233−<td></td>
234−</tr>
235−<tr class="row-odd"><th class="stub"><p>bing news</p></th>
236−<th class="stub"><p>!bin</p></th>
237−<td><p>bing_news</p></td>
238−<td><p>2.0</p></td>
239−<td><p>news</p></td>
240−<td><p>y</p></td>
241−<td><p>y</p></td>
242−<td></td>
243−<td></td>
244−<td><p>y</p></td>
245−<td></td>
246−<td><p>1</p></td>
247−<td></td>
248−</tr>
249−<tr class="row-even"><th class="stub"><p>bing videos</p></th>
250−<th class="stub"><p>!biv</p></th>
251−<td><p>bing_videos</p></td>
252−<td><p>2.0</p></td>
253−<td><p>videos</p></td>
254−<td><p>y</p></td>
255−<td><p>y</p></td>
256−<td><p>y</p></td>
257−<td></td>
258−<td><p>y</p></td>
259−<td></td>
260−<td><p>1</p></td>
261−<td></td>
262−</tr>
263−<tr class="row-odd"><th class="stub"><p>bitbucket</p></th>
264−<th class="stub"><p>!bb</p></th>
265−<td><p>xpath</p></td>
266−<td><p>4.0</p></td>
267−<td><p>it</p></td>
268−<td><p>y</p></td>
269−<td><p>y</p></td>
270−<td></td>
271−<td><p>y</p></td>
272−<td></td>
273−<td></td>
274−<td><p>1</p></td>
275−<td><p>y</p></td>
276−</tr>
277−<tr class="row-even"><th class="stub"><p>btdigg</p></th>
278−<th class="stub"><p>!bt</p></th>
279−<td><p>btdigg</p></td>
280−<td><p>2.0</p></td>
281−<td><p>videos, music, files</p></td>
282−<td><p>y</p></td>
283−<td><p>y</p></td>
284−<td></td>
285−<td></td>
286−<td></td>
287−<td></td>
288−<td><p>1</p></td>
289−<td></td>
290−</tr>
291−<tr class="row-odd"><th class="stub"><p>ccc-tv</p></th>
292−<th class="stub"><p>!c3tv</p></th>
293−<td><p>xpath</p></td>
294−<td><p>2.0</p></td>
295−<td><p>videos</p></td>
296−<td></td>
297−<td><p>y</p></td>
298−<td></td>
299−<td><p>y</p></td>
300−<td></td>
301−<td></td>
302−<td><p>1</p></td>
303−<td><p>y</p></td>
304−</tr>
305−<tr class="row-even"><th class="stub"><p>crossref</p></th>
306−<th class="stub"><p>!cr</p></th>
307−<td><p>json_engine</p></td>
308−<td><p>2.0</p></td>
309−<td><p>science</p></td>
310−<td><p>y</p></td>
311−<td><p>y</p></td>
312−<td></td>
313−<td></td>
314−<td></td>
315−<td></td>
316−<td><p>1</p></td>
317−<td></td>
318−</tr>
319−<tr class="row-odd"><th class="stub"><p>currency</p></th>
320−<th class="stub"><p>!cc</p></th>
321−<td><p>currency_convert</p></td>
322−<td><p>2.0</p></td>
323−<td><p>general</p></td>
324−<td></td>
325−<td><p>y</p></td>
326−<td></td>
327−<td></td>
328−<td></td>
329−<td></td>
330−<td><p>100</p></td>
331−<td></td>
332−</tr>
333−<tr class="row-even"><th class="stub"><p>deezer</p></th>
334−<th class="stub"><p>!dz</p></th>
335−<td><p>deezer</p></td>
336−<td><p>2.0</p></td>
337−<td><p>music</p></td>
338−<td><p>y</p></td>
339−<td><p>y</p></td>
340−<td></td>
341−<td></td>
342−<td></td>
343−<td></td>
344−<td><p>1</p></td>
345−<td></td>
346−</tr>
347−<tr class="row-odd"><th class="stub"><p>deviantart</p></th>
348−<th class="stub"><p>!da</p></th>
349−<td><p>deviantart</p></td>
350−<td><p>3.0</p></td>
351−<td><p>images</p></td>
352−<td><p>y</p></td>
353−<td><p>y</p></td>
354−<td></td>
355−<td></td>
356−<td><p>y</p></td>
357−<td></td>
358−<td><p>1</p></td>
359−<td></td>
360−</tr>
361−<tr class="row-even"><th class="stub"><p>ddg definitions</p></th>
362−<th class="stub"><p>!ddd</p></th>
363−<td><p>duckduckgo_definitions</p></td>
364−<td><p>2.0</p></td>
365−<td><p>general</p></td>
366−<td></td>
367−<td><p>y</p></td>
368−<td></td>
369−<td><p>y</p></td>
370−<td></td>
371−<td></td>
372−<td><p>2</p></td>
373−<td><p>y</p></td>
374−</tr>
375−<tr class="row-odd"><th class="stub"><p>digg</p></th>
376−<th class="stub"><p>!dg</p></th>
377−<td><p>digg</p></td>
378−<td><p>2.0</p></td>
379−<td><p>news, social media</p></td>
380−<td><p>y</p></td>
381−<td><p>y</p></td>
382−<td></td>
383−<td></td>
384−<td></td>
385−<td></td>
386−<td><p>1</p></td>
387−<td></td>
388−</tr>
389−<tr class="row-even"><th class="stub"><p>erowid</p></th>
390−<th class="stub"><p>!ew</p></th>
391−<td><p>xpath</p></td>
392−<td><p>2.0</p></td>
393−<td><p>general</p></td>
394−<td><p>y</p></td>
395−<td><p>y</p></td>
396−<td></td>
397−<td><p>y</p></td>
398−<td></td>
399−<td></td>
400−<td><p>1</p></td>
401−<td><p>y</p></td>
402−</tr>
403−<tr class="row-odd"><th class="stub"><p>wikidata</p></th>
404−<th class="stub"><p>!wd</p></th>
405−<td><p>wikidata</p></td>
406−<td><p>3.0</p></td>
407−<td><p>general</p></td>
408−<td></td>
409−<td><p>y</p></td>
410−<td></td>
411−<td></td>
412−<td></td>
413−<td></td>
414−<td><p>2</p></td>
415−<td></td>
416−</tr>
417−<tr class="row-even"><th class="stub"><p>duckduckgo</p></th>
418−<th class="stub"><p>!ddg</p></th>
419−<td><p>duckduckgo</p></td>
420−<td><p>2.0</p></td>
421−<td><p>general</p></td>
422−<td><p>y</p></td>
423−<td><p>y</p></td>
424−<td></td>
425−<td><p>y</p></td>
426−<td><p>y</p></td>
427−<td></td>
428−<td><p>1</p></td>
429−<td><p>y</p></td>
430−</tr>
431−<tr class="row-odd"><th class="stub"><p>duckduckgo images</p></th>
432−<th class="stub"><p>!ddi</p></th>
433−<td><p>duckduckgo_images</p></td>
434−<td><p>3.0</p></td>
435−<td><p>images</p></td>
436−<td><p>y</p></td>
437−<td><p>y</p></td>
438−<td><p>y</p></td>
439−<td><p>y</p></td>
440−<td></td>
441−<td></td>
442−<td><p>1</p></td>
443−<td><p>y</p></td>
444−</tr>
445−<tr class="row-even"><th class="stub"><p>etools</p></th>
446−<th class="stub"><p>!eto</p></th>
447−<td><p>etools</p></td>
448−<td><p>2.0</p></td>
449−<td><p>general</p></td>
450−<td></td>
451−<td></td>
452−<td><p>y</p></td>
453−<td><p>y</p></td>
454−<td></td>
455−<td></td>
456−<td><p>1</p></td>
457−<td><p>y</p></td>
458−</tr>
459−<tr class="row-odd"><th class="stub"><p>etymonline</p></th>
460−<th class="stub"><p>!et</p></th>
461−<td><p>xpath</p></td>
462−<td><p>2.0</p></td>
463−<td><p>general</p></td>
464−<td><p>y</p></td>
465−<td><p>y</p></td>
466−<td></td>
467−<td><p>y</p></td>
468−<td></td>
469−<td></td>
470−<td><p>1</p></td>
471−<td><p>y</p></td>
472−</tr>
473−<tr class="row-even"><th class="stub"><p>faroo</p></th>
474−<th class="stub"><p>!fa</p></th>
475−<td><p>faroo</p></td>
476−<td><p>2.0</p></td>
477−<td><p>general, news</p></td>
478−<td><p>y</p></td>
479−<td><p>y</p></td>
480−<td></td>
481−<td><p>y</p></td>
482−<td></td>
483−<td></td>
484−<td><p>1</p></td>
485−<td><p>y</p></td>
486−</tr>
487−<tr class="row-odd"><th class="stub"><p>1x</p></th>
488−<th class="stub"><p>!1x</p></th>
489−<td><p>www1x</p></td>
490−<td><p>2.0</p></td>
491−<td><p>images</p></td>
492−<td></td>
493−<td><p>y</p></td>
494−<td></td>
495−<td><p>y</p></td>
496−<td></td>
497−<td></td>
498−<td><p>1</p></td>
499−<td><p>y</p></td>
500−</tr>
501−<tr class="row-even"><th class="stub"><p>fdroid</p></th>
502−<th class="stub"><p>!fd</p></th>
503−<td><p>fdroid</p></td>
504−<td><p>2.0</p></td>
505−<td><p>files</p></td>
506−<td><p>y</p></td>
507−<td><p>y</p></td>
508−<td></td>
509−<td><p>y</p></td>
510−<td></td>
511−<td></td>
512−<td><p>1</p></td>
513−<td><p>y</p></td>
514−</tr>
515−<tr class="row-odd"><th class="stub"><p>flickr</p></th>
516−<th class="stub"><p>!fl</p></th>
517−<td><p>flickr_noapi</p></td>
518−<td><p>2.0</p></td>
519−<td><p>images</p></td>
520−<td><p>y</p></td>
521−<td><p>y</p></td>
522−<td></td>
523−<td></td>
524−<td><p>y</p></td>
525−<td></td>
526−<td><p>1</p></td>
527−<td></td>
528−</tr>
529−<tr class="row-even"><th class="stub"><p>free software directory</p></th>
530−<th class="stub"><p>!fsd</p></th>
531−<td><p>mediawiki</p></td>
532−<td><p>5.0</p></td>
533−<td><p>it</p></td>
534−<td><p>y</p></td>
535−<td><p>y</p></td>
536−<td></td>
537−<td><p>y</p></td>
538−<td></td>
539−<td></td>
540−<td><p>1</p></td>
541−<td><p>y</p></td>
542−</tr>
543−<tr class="row-odd"><th class="stub"><p>frinkiac</p></th>
544−<th class="stub"><p>!frk</p></th>
545−<td><p>frinkiac</p></td>
546−<td><p>2.0</p></td>
547−<td><p>images</p></td>
548−<td></td>
549−<td><p>y</p></td>
550−<td></td>
551−<td><p>y</p></td>
552−<td></td>
553−<td></td>
554−<td><p>1</p></td>
555−<td><p>y</p></td>
556−</tr>
557−<tr class="row-even"><th class="stub"><p>genius</p></th>
558−<th class="stub"><p>!gen</p></th>
559−<td><p>genius</p></td>
560−<td><p>2.0</p></td>
561−<td><p>music</p></td>
562−<td><p>y</p></td>
563−<td></td>
564−<td></td>
565−<td></td>
566−<td></td>
567−<td></td>
568−<td><p>1</p></td>
569−<td></td>
570−</tr>
571−<tr class="row-odd"><th class="stub"><p>gigablast</p></th>
572−<th class="stub"><p>!gb</p></th>
573−<td><p>gigablast</p></td>
574−<td><p>3.0</p></td>
575−<td><p>general</p></td>
576−<td><p>y</p></td>
577−<td><p>y</p></td>
578−<td><p>y</p></td>
579−<td><p>y</p></td>
580−<td></td>
581−<td></td>
582−<td><p>1</p></td>
583−<td><p>y</p></td>
584−</tr>
585−<tr class="row-even"><th class="stub"><p>gentoo</p></th>
586−<th class="stub"><p>!ge</p></th>
587−<td><p>gentoo</p></td>
588−<td><p>2.0</p></td>
589−<td><p>it</p></td>
590−<td><p>y</p></td>
591−<td><p>y</p></td>
592−<td></td>
593−<td></td>
594−<td></td>
595−<td></td>
596−<td><p>1</p></td>
597−<td></td>
598−</tr>
599−<tr class="row-odd"><th class="stub"><p>gitlab</p></th>
600−<th class="stub"><p>!gl</p></th>
601−<td><p>json_engine</p></td>
602−<td><p>10.0</p></td>
603−<td><p>it</p></td>
604−<td><p>y</p></td>
605−<td><p>y</p></td>
606−<td></td>
607−<td><p>y</p></td>
608−<td></td>
609−<td></td>
610−<td><p>1</p></td>
611−<td><p>y</p></td>
612−</tr>
613−<tr class="row-even"><th class="stub"><p>github</p></th>
614−<th class="stub"><p>!gh</p></th>
615−<td><p>github</p></td>
616−<td><p>2.0</p></td>
617−<td><p>it</p></td>
618−<td></td>
619−<td><p>y</p></td>
620−<td></td>
621−<td></td>
622−<td></td>
623−<td></td>
624−<td><p>1</p></td>
625−<td></td>
626−</tr>
627−<tr class="row-odd"><th class="stub"><p>google</p></th>
628−<th class="stub"><p>!go</p></th>
629−<td><p>google</p></td>
630−<td><p>2.0</p></td>
631−<td><p>general</p></td>
632−<td><p>y</p></td>
633−<td><p>y</p></td>
634−<td></td>
635−<td></td>
636−<td><p>y</p></td>
637−<td></td>
638−<td><p>1</p></td>
639−<td></td>
640−</tr>
641−<tr class="row-even"><th class="stub"><p>google images</p></th>
642−<th class="stub"><p>!goi</p></th>
643−<td><p>google_images</p></td>
644−<td><p>2.0</p></td>
645−<td><p>images</p></td>
646−<td><p>y</p></td>
647−<td><p>y</p></td>
648−<td><p>y</p></td>
649−<td></td>
650−<td><p>y</p></td>
651−<td></td>
652−<td><p>1</p></td>
653−<td></td>
654−</tr>
655−<tr class="row-odd"><th class="stub"><p>google news</p></th>
656−<th class="stub"><p>!gon</p></th>
657−<td><p>google_news</p></td>
658−<td><p>2.0</p></td>
659−<td><p>news</p></td>
660−<td><p>y</p></td>
661−<td><p>y</p></td>
662−<td><p>y</p></td>
663−<td></td>
664−<td><p>y</p></td>
665−<td></td>
666−<td><p>1</p></td>
667−<td></td>
668−</tr>
669−<tr class="row-even"><th class="stub"><p>google videos</p></th>
670−<th class="stub"><p>!gov</p></th>
671−<td><p>google_videos</p></td>
672−<td><p>2.0</p></td>
673−<td><p>videos</p></td>
674−<td><p>y</p></td>
675−<td><p>y</p></td>
676−<td><p>y</p></td>
677−<td></td>
678−<td><p>y</p></td>
679−<td></td>
680−<td><p>1</p></td>
681−<td></td>
682−</tr>
683−<tr class="row-odd"><th class="stub"><p>google scholar</p></th>
684−<th class="stub"><p>!gos</p></th>
685−<td><p>xpath</p></td>
686−<td><p>2.0</p></td>
687−<td><p>science</p></td>
688−<td><p>y</p></td>
689−<td><p>y</p></td>
690−<td></td>
691−<td></td>
692−<td></td>
693−<td></td>
694−<td><p>1</p></td>
695−<td></td>
696−</tr>
697−<tr class="row-even"><th class="stub"><p>google play apps</p></th>
698−<th class="stub"><p>!gpa</p></th>
699−<td><p>xpath</p></td>
700−<td><p>2.0</p></td>
701−<td><p>files</p></td>
702−<td></td>
703−<td><p>y</p></td>
704−<td></td>
705−<td><p>y</p></td>
706−<td></td>
707−<td></td>
708−<td><p>1</p></td>
709−<td><p>y</p></td>
710−</tr>
711−<tr class="row-odd"><th class="stub"><p>google play movies</p></th>
712−<th class="stub"><p>!gpm</p></th>
713−<td><p>xpath</p></td>
714−<td><p>2.0</p></td>
715−<td><p>videos</p></td>
716−<td></td>
717−<td><p>y</p></td>
718−<td></td>
719−<td><p>y</p></td>
720−<td></td>
721−<td></td>
722−<td><p>1</p></td>
723−<td><p>y</p></td>
724−</tr>
725−<tr class="row-even"><th class="stub"><p>google play music</p></th>
726−<th class="stub"><p>!gps</p></th>
727−<td><p>xpath</p></td>
728−<td><p>2.0</p></td>
729−<td><p>music</p></td>
730−<td></td>
731−<td><p>y</p></td>
732−<td></td>
733−<td><p>y</p></td>
734−<td></td>
735−<td></td>
736−<td><p>1</p></td>
737−<td><p>y</p></td>
738−</tr>
739−<tr class="row-odd"><th class="stub"><p>geektimes</p></th>
740−<th class="stub"><p>!gt</p></th>
741−<td><p>xpath</p></td>
742−<td><p>4.0</p></td>
743−<td><p>it</p></td>
744−<td><p>y</p></td>
745−<td><p>y</p></td>
746−<td></td>
747−<td><p>y</p></td>
748−<td></td>
749−<td></td>
750−<td><p>1</p></td>
751−<td><p>y</p></td>
752−</tr>
753−<tr class="row-even"><th class="stub"><p>habrahabr</p></th>
754−<th class="stub"><p>!habr</p></th>
755−<td><p>xpath</p></td>
756−<td><p>4.0</p></td>
757−<td><p>it</p></td>
758−<td><p>y</p></td>
759−<td><p>y</p></td>
760−<td></td>
761−<td><p>y</p></td>
762−<td></td>
763−<td></td>
764−<td><p>1</p></td>
765−<td><p>y</p></td>
766−</tr>
767−<tr class="row-odd"><th class="stub"><p>hoogle</p></th>
768−<th class="stub"><p>!ho</p></th>
769−<td><p>json_engine</p></td>
770−<td><p>2.0</p></td>
771−<td><p>it</p></td>
772−<td><p>y</p></td>
773−<td><p>y</p></td>
774−<td></td>
775−<td></td>
776−<td></td>
777−<td></td>
778−<td><p>1</p></td>
779−<td></td>
780−</tr>
781−<tr class="row-even"><th class="stub"><p>ina</p></th>
782−<th class="stub"><p>!in</p></th>
783−<td><p>ina</p></td>
784−<td><p>6.0</p></td>
785−<td><p>videos</p></td>
786−<td><p>y</p></td>
787−<td><p>y</p></td>
788−<td></td>
789−<td><p>y</p></td>
790−<td></td>
791−<td></td>
792−<td><p>1</p></td>
793−<td><p>y</p></td>
794−</tr>
795−<tr class="row-odd"><th class="stub"><p>invidious</p></th>
796−<th class="stub"><p>!iv</p></th>
797−<td><p>invidious</p></td>
798−<td><p>5.0</p></td>
799−<td><p>videos, music</p></td>
800−<td><p>y</p></td>
801−<td><p>y</p></td>
802−<td></td>
803−<td></td>
804−<td><p>y</p></td>
805−<td></td>
806−<td><p>1</p></td>
807−<td></td>
808−</tr>
809−<tr class="row-even"><th class="stub"><p>kickass</p></th>
810−<th class="stub"><p>!kc</p></th>
811−<td><p>kickass</p></td>
812−<td><p>4.0</p></td>
813−<td><p>videos, music, files</p></td>
814−<td><p>y</p></td>
815−<td><p>y</p></td>
816−<td></td>
817−<td><p>y</p></td>
818−<td></td>
819−<td></td>
820−<td><p>1</p></td>
821−<td><p>y</p></td>
822−</tr>
823−<tr class="row-odd"><th class="stub"><p>library genesis</p></th>
824−<th class="stub"><p>!lg</p></th>
825−<td><p>xpath</p></td>
826−<td><p>7.0</p></td>
827−<td><p>general</p></td>
828−<td></td>
829−<td><p>y</p></td>
830−<td></td>
831−<td><p>y</p></td>
832−<td></td>
833−<td></td>
834−<td><p>1</p></td>
835−<td><p>y</p></td>
836−</tr>
837−<tr class="row-even"><th class="stub"><p>lobste.rs</p></th>
838−<th class="stub"><p>!lo</p></th>
839−<td><p>xpath</p></td>
840−<td><p>2.0</p></td>
841−<td><p>it</p></td>
842−<td></td>
843−<td><p>y</p></td>
844−<td></td>
845−<td></td>
846−<td></td>
847−<td></td>
848−<td><p>1</p></td>
849−<td></td>
850−</tr>
851−<tr class="row-odd"><th class="stub"><p>microsoft academic</p></th>
852−<th class="stub"><p>!ma</p></th>
853−<td><p>microsoft_academic</p></td>
854−<td><p>2.0</p></td>
855−<td><p>science</p></td>
856−<td><p>y</p></td>
857−<td><p>y</p></td>
858−<td></td>
859−<td></td>
860−<td></td>
861−<td></td>
862−<td><p>1</p></td>
863−<td></td>
864−</tr>
865−<tr class="row-even"><th class="stub"><p>mixcloud</p></th>
866−<th class="stub"><p>!mc</p></th>
867−<td><p>mixcloud</p></td>
868−<td><p>2.0</p></td>
869−<td><p>music</p></td>
870−<td><p>y</p></td>
871−<td><p>y</p></td>
872−<td></td>
873−<td></td>
874−<td></td>
875−<td></td>
876−<td><p>1</p></td>
877−<td></td>
878−</tr>
879−<tr class="row-odd"><th class="stub"><p>npm</p></th>
880−<th class="stub"><p>!npm</p></th>
881−<td><p>json_engine</p></td>
882−<td><p>5.0</p></td>
883−<td><p>it</p></td>
884−<td><p>y</p></td>
885−<td><p>y</p></td>
886−<td></td>
887−<td><p>y</p></td>
888−<td></td>
889−<td></td>
890−<td><p>1</p></td>
891−<td><p>y</p></td>
892−</tr>
893−<tr class="row-even"><th class="stub"><p>nyaa</p></th>
894−<th class="stub"><p>!nt</p></th>
895−<td><p>nyaa</p></td>
896−<td><p>2.0</p></td>
897−<td><p>files, images, videos, music</p></td>
898−<td><p>y</p></td>
899−<td><p>y</p></td>
900−<td></td>
901−<td><p>y</p></td>
902−<td></td>
903−<td></td>
904−<td><p>1</p></td>
905−<td><p>y</p></td>
906−</tr>
907−<tr class="row-odd"><th class="stub"><p>acgsou</p></th>
908−<th class="stub"><p>!acg</p></th>
909−<td><p>acgsou</p></td>
910−<td><p>5.0</p></td>
911−<td><p>files, images, videos, music</p></td>
912−<td><p>y</p></td>
913−<td><p>y</p></td>
914−<td></td>
915−<td><p>y</p></td>
916−<td></td>
917−<td></td>
918−<td><p>1</p></td>
919−<td><p>y</p></td>
920−</tr>
921−<tr class="row-even"><th class="stub"><p>openairedatasets</p></th>
922−<th class="stub"><p>!oad</p></th>
923−<td><p>json_engine</p></td>
924−<td><p>5.0</p></td>
925−<td><p>science</p></td>
926−<td><p>y</p></td>
927−<td><p>y</p></td>
928−<td></td>
929−<td></td>
930−<td></td>
931−<td></td>
932−<td><p>1</p></td>
933−<td></td>
934−</tr>
935−<tr class="row-odd"><th class="stub"><p>openairepublications</p></th>
936−<th class="stub"><p>!oap</p></th>
937−<td><p>json_engine</p></td>
938−<td><p>5.0</p></td>
939−<td><p>science</p></td>
940−<td><p>y</p></td>
941−<td><p>y</p></td>
942−<td></td>
943−<td></td>
944−<td></td>
945−<td></td>
946−<td><p>1</p></td>
947−<td></td>
948−</tr>
949−<tr class="row-even"><th class="stub"><p>openstreetmap</p></th>
950−<th class="stub"><p>!osm</p></th>
951−<td><p>openstreetmap</p></td>
952−<td><p>2.0</p></td>
953−<td><p>map</p></td>
954−<td></td>
955−<td><p>y</p></td>
956−<td></td>
957−<td></td>
958−<td></td>
959−<td></td>
960−<td><p>1</p></td>
961−<td></td>
962−</tr>
963−<tr class="row-odd"><th class="stub"><p>openrepos</p></th>
964−<th class="stub"><p>!or</p></th>
965−<td><p>xpath</p></td>
966−<td><p>4.0</p></td>
967−<td><p>files</p></td>
968−<td><p>y</p></td>
969−<td><p>y</p></td>
970−<td></td>
971−<td><p>y</p></td>
972−<td></td>
973−<td></td>
974−<td><p>1</p></td>
975−<td><p>y</p></td>
976−</tr>
977−<tr class="row-even"><th class="stub"><p>pdbe</p></th>
978−<th class="stub"><p>!pdb</p></th>
979−<td><p>pdbe</p></td>
980−<td><p>2.0</p></td>
981−<td><p>science</p></td>
982−<td></td>
983−<td><p>y</p></td>
984−<td></td>
985−<td></td>
986−<td></td>
987−<td></td>
988−<td><p>1</p></td>
989−<td></td>
990−</tr>
991−<tr class="row-odd"><th class="stub"><p>photon</p></th>
992−<th class="stub"><p>!ph</p></th>
993−<td><p>photon</p></td>
994−<td><p>2.0</p></td>
995−<td><p>map</p></td>
996−<td></td>
997−<td><p>y</p></td>
998−<td></td>
999−<td></td>
1000−<td></td>
1001−<td></td>
1002−<td><p>1</p></td>
1003−<td></td>
1004−</tr>
1005−<tr class="row-even"><th class="stub"><p>piratebay</p></th>
1006−<th class="stub"><p>!tpb</p></th>
1007−<td><p>piratebay</p></td>
1008−<td><p>3.0</p></td>
1009−<td><p>videos, music, files</p></td>
1010−<td><p>y</p></td>
1011−<td><p>y</p></td>
1012−<td></td>
1013−<td></td>
1014−<td></td>
1015−<td></td>
1016−<td><p>1</p></td>
1017−<td></td>
1018−</tr>
1019−<tr class="row-odd"><th class="stub"><p>pubmed</p></th>
1020−<th class="stub"><p>!pub</p></th>
1021−<td><p>pubmed</p></td>
1022−<td><p>3.0</p></td>
1023−<td><p>science</p></td>
1024−<td></td>
1025−<td><p>y</p></td>
1026−<td></td>
1027−<td></td>
1028−<td></td>
1029−<td></td>
1030−<td><p>1</p></td>
1031−<td></td>
1032−</tr>
1033−<tr class="row-even"><th class="stub"><p>qwant</p></th>
1034−<th class="stub"><p>!qw</p></th>
1035−<td><p>qwant</p></td>
1036−<td><p>2.0</p></td>
1037−<td><p>general</p></td>
1038−<td><p>y</p></td>
1039−<td><p>y</p></td>
1040−<td></td>
1041−<td><p>y</p></td>
1042−<td></td>
1043−<td></td>
1044−<td><p>1</p></td>
1045−<td><p>y</p></td>
1046−</tr>
1047−<tr class="row-odd"><th class="stub"><p>qwant images</p></th>
1048−<th class="stub"><p>!qwi</p></th>
1049−<td><p>qwant</p></td>
1050−<td><p>2.0</p></td>
1051−<td><p>images</p></td>
1052−<td><p>y</p></td>
1053−<td><p>y</p></td>
1054−<td></td>
1055−<td></td>
1056−<td></td>
1057−<td></td>
1058−<td><p>1</p></td>
1059−<td></td>
1060−</tr>
1061−<tr class="row-even"><th class="stub"><p>qwant news</p></th>
1062−<th class="stub"><p>!qwn</p></th>
1063−<td><p>qwant</p></td>
1064−<td><p>2.0</p></td>
1065−<td><p>news</p></td>
1066−<td><p>y</p></td>
1067−<td><p>y</p></td>
1068−<td></td>
1069−<td></td>
1070−<td></td>
1071−<td></td>
1072−<td><p>1</p></td>
1073−<td></td>
1074−</tr>
1075−<tr class="row-odd"><th class="stub"><p>qwant social</p></th>
1076−<th class="stub"><p>!qws</p></th>
1077−<td><p>qwant</p></td>
1078−<td><p>2.0</p></td>
1079−<td><p>social media</p></td>
1080−<td><p>y</p></td>
1081−<td><p>y</p></td>
1082−<td></td>
1083−<td></td>
1084−<td></td>
1085−<td></td>
1086−<td><p>1</p></td>
1087−<td></td>
1088−</tr>
1089−<tr class="row-even"><th class="stub"><p>reddit</p></th>
1090−<th class="stub"><p>!re</p></th>
1091−<td><p>reddit</p></td>
1092−<td><p>10.0</p></td>
1093−<td><p>general, images, news, social media</p></td>
1094−<td></td>
1095−<td><p>y</p></td>
1096−<td></td>
1097−<td><p>y</p></td>
1098−<td></td>
1099−<td></td>
1100−<td><p>1</p></td>
1101−<td><p>y</p></td>
1102−</tr>
1103−<tr class="row-odd"><th class="stub"><p>soundcloud</p></th>
1104−<th class="stub"><p>!sc</p></th>
1105−<td><p>soundcloud</p></td>
1106−<td><p>2.0</p></td>
1107−<td><p>music</p></td>
1108−<td><p>y</p></td>
1109−<td><p>y</p></td>
1110−<td></td>
1111−<td></td>
1112−<td></td>
1113−<td></td>
1114−<td><p>1</p></td>
1115−<td></td>
1116−</tr>
1117−<tr class="row-even"><th class="stub"><p>stackoverflow</p></th>
1118−<th class="stub"><p>!st</p></th>
1119−<td><p>stackoverflow</p></td>
1120−<td><p>2.0</p></td>
1121−<td><p>it</p></td>
1122−<td><p>y</p></td>
1123−<td><p>y</p></td>
1124−<td></td>
1125−<td></td>
1126−<td></td>
1127−<td></td>
1128−<td><p>1</p></td>
1129−<td></td>
1130−</tr>
1131−<tr class="row-odd"><th class="stub"><p>searchcode doc</p></th>
1132−<th class="stub"><p>!scd</p></th>
1133−<td><p>searchcode_doc</p></td>
1134−<td><p>2.0</p></td>
1135−<td><p>it</p></td>
1136−<td><p>y</p></td>
1137−<td><p>y</p></td>
1138−<td></td>
1139−<td></td>
1140−<td></td>
1141−<td></td>
1142−<td><p>1</p></td>
1143−<td></td>
1144−</tr>
1145−<tr class="row-even"><th class="stub"><p>searchcode code</p></th>
1146−<th class="stub"><p>!scc</p></th>
1147−<td><p>searchcode_code</p></td>
1148−<td><p>2.0</p></td>
1149−<td><p>it</p></td>
1150−<td><p>y</p></td>
1151−<td><p>y</p></td>
1152−<td></td>
1153−<td><p>y</p></td>
1154−<td></td>
1155−<td></td>
1156−<td><p>1</p></td>
1157−<td><p>y</p></td>
1158−</tr>
1159−<tr class="row-odd"><th class="stub"><p>framalibre</p></th>
1160−<th class="stub"><p>!frl</p></th>
1161−<td><p>framalibre</p></td>
1162−<td><p>2.0</p></td>
1163−<td><p>it</p></td>
1164−<td><p>y</p></td>
1165−<td><p>y</p></td>
1166−<td></td>
1167−<td><p>y</p></td>
1168−<td></td>
1169−<td></td>
1170−<td><p>1</p></td>
1171−<td><p>y</p></td>
1172−</tr>
1173−<tr class="row-even"><th class="stub"><p>semantic scholar</p></th>
1174−<th class="stub"><p>!se</p></th>
1175−<td><p>xpath</p></td>
1176−<td><p>2.0</p></td>
1177−<td><p>science</p></td>
1178−<td><p>y</p></td>
1179−<td><p>y</p></td>
1180−<td></td>
1181−<td></td>
1182−<td></td>
1183−<td></td>
1184−<td><p>1</p></td>
1185−<td></td>
1186−</tr>
1187−<tr class="row-odd"><th class="stub"><p>startpage</p></th>
1188−<th class="stub"><p>!sp</p></th>
1189−<td><p>startpage</p></td>
1190−<td><p>6.0</p></td>
1191−<td><p>general</p></td>
1192−<td><p>y</p></td>
1193−<td><p>y</p></td>
1194−<td></td>
1195−<td><p>y</p></td>
1196−<td></td>
1197−<td></td>
1198−<td><p>1</p></td>
1199−<td><p>y</p></td>
1200−</tr>
1201−<tr class="row-even"><th class="stub"><p>tokyotoshokan</p></th>
1202−<th class="stub"><p>!tt</p></th>
1203−<td><p>tokyotoshokan</p></td>
1204−<td><p>6.0</p></td>
1205−<td><p>files, videos, music</p></td>
1206−<td><p>y</p></td>
1207−<td><p>y</p></td>
1208−<td></td>
1209−<td><p>y</p></td>
1210−<td></td>
1211−<td></td>
1212−<td><p>1</p></td>
1213−<td><p>y</p></td>
1214−</tr>
1215−<tr class="row-odd"><th class="stub"><p>torrentz</p></th>
1216−<th class="stub"><p>!tor</p></th>
1217−<td><p>torrentz</p></td>
1218−<td><p>3.0</p></td>
1219−<td><p>files, videos, music</p></td>
1220−<td><p>y</p></td>
1221−<td><p>y</p></td>
1222−<td></td>
1223−<td></td>
1224−<td></td>
1225−<td></td>
1226−<td><p>1</p></td>
1227−<td></td>
1228−</tr>
1229−<tr class="row-even"><th class="stub"><p>twitter</p></th>
1230−<th class="stub"><p>!tw</p></th>
1231−<td><p>twitter</p></td>
1232−<td><p>2.0</p></td>
1233−<td><p>social media</p></td>
1234−<td></td>
1235−<td><p>y</p></td>
1236−<td></td>
1237−<td></td>
1238−<td></td>
1239−<td></td>
1240−<td><p>1</p></td>
1241−<td></td>
1242−</tr>
1243−<tr class="row-odd"><th class="stub"><p>unsplash</p></th>
1244−<th class="stub"><p>!us</p></th>
1245−<td><p>unsplash</p></td>
1246−<td><p>2.0</p></td>
1247−<td><p>images</p></td>
1248−<td><p>y</p></td>
1249−<td><p>y</p></td>
1250−<td></td>
1251−<td><p>y</p></td>
1252−<td></td>
1253−<td></td>
1254−<td><p>1</p></td>
1255−<td><p>y</p></td>
1256−</tr>
1257−<tr class="row-even"><th class="stub"><p>yahoo</p></th>
1258−<th class="stub"><p>!yh</p></th>
1259−<td><p>yahoo</p></td>
1260−<td><p>2.0</p></td>
1261−<td><p>general</p></td>
1262−<td><p>y</p></td>
1263−<td><p>y</p></td>
1264−<td></td>
1265−<td><p>y</p></td>
1266−<td><p>y</p></td>
1267−<td></td>
1268−<td><p>1</p></td>
1269−<td><p>y</p></td>
1270−</tr>
1271−<tr class="row-odd"><th class="stub"><p>yandex</p></th>
1272−<th class="stub"><p>!yn</p></th>
1273−<td><p>yandex</p></td>
1274−<td><p>2.0</p></td>
1275−<td><p>general</p></td>
1276−<td><p>y</p></td>
1277−<td><p>y</p></td>
1278−<td></td>
1279−<td><p>y</p></td>
1280−<td></td>
1281−<td></td>
1282−<td><p>1</p></td>
1283−<td><p>y</p></td>
1284−</tr>
1285−<tr class="row-even"><th class="stub"><p>yahoo news</p></th>
1286−<th class="stub"><p>!yhn</p></th>
1287−<td><p>yahoo_news</p></td>
1288−<td><p>2.0</p></td>
1289−<td><p>news</p></td>
1290−<td><p>y</p></td>
1291−<td><p>y</p></td>
1292−<td></td>
1293−<td></td>
1294−<td></td>
1295−<td></td>
1296−<td><p>1</p></td>
1297−<td></td>
1298−</tr>
1299−<tr class="row-odd"><th class="stub"><p>youtube</p></th>
1300−<th class="stub"><p>!yt</p></th>
1301−<td><p>youtube_noapi</p></td>
1302−<td><p>2.0</p></td>
1303−<td><p>videos, music</p></td>
1304−<td><p>y</p></td>
1305−<td></td>
1306−<td></td>
1307−<td></td>
1308−<td><p>y</p></td>
1309−<td></td>
1310−<td><p>1</p></td>
1311−<td></td>
1312−</tr>
1313−<tr class="row-even"><th class="stub"><p>dailymotion</p></th>
1314−<th class="stub"><p>!dm</p></th>
1315−<td><p>dailymotion</p></td>
1316−<td><p>2.0</p></td>
1317−<td><p>videos</p></td>
1318−<td><p>y</p></td>
1319−<td><p>y</p></td>
1320−<td></td>
1321−<td></td>
1322−<td></td>
1323−<td></td>
1324−<td><p>1</p></td>
1325−<td></td>
1326−</tr>
1327−<tr class="row-odd"><th class="stub"><p>vimeo</p></th>
1328−<th class="stub"><p>!vm</p></th>
1329−<td><p>vimeo</p></td>
1330−<td><p>2.0</p></td>
1331−<td><p>videos</p></td>
1332−<td><p>y</p></td>
1333−<td><p>y</p></td>
1334−<td></td>
1335−<td></td>
1336−<td></td>
1337−<td></td>
1338−<td><p>1</p></td>
1339−<td></td>
1340−</tr>
1341−<tr class="row-even"><th class="stub"><p>wolframalpha</p></th>
1342−<th class="stub"><p>!wa</p></th>
1343−<td><p>wolframalpha_noapi</p></td>
1344−<td><p>6.0</p></td>
1345−<td><p>science</p></td>
1346−<td></td>
1347−<td><p>y</p></td>
1348−<td></td>
1349−<td></td>
1350−<td></td>
1351−<td></td>
1352−<td><p>1</p></td>
1353−<td></td>
1354−</tr>
1355−<tr class="row-odd"><th class="stub"><p>dictzone</p></th>
1356−<th class="stub"><p>!dc</p></th>
1357−<td><p>dictzone</p></td>
1358−<td><p>2.0</p></td>
1359−<td><p>general</p></td>
1360−<td></td>
1361−<td><p>y</p></td>
1362−<td></td>
1363−<td></td>
1364−<td></td>
1365−<td></td>
1366−<td><p>100</p></td>
1367−<td></td>
1368−</tr>
1369−<tr class="row-even"><th class="stub"><p>mymemory translated</p></th>
1370−<th class="stub"><p>!tl</p></th>
1371−<td><p>translated</p></td>
1372−<td><p>5.0</p></td>
1373−<td><p>general</p></td>
1374−<td></td>
1375−<td><p>y</p></td>
1376−<td></td>
1377−<td><p>y</p></td>
1378−<td></td>
1379−<td></td>
1380−<td><p>100</p></td>
1381−<td><p>y</p></td>
1382−</tr>
1383−<tr class="row-odd"><th class="stub"><p>voat</p></th>
1384−<th class="stub"><p>!vo</p></th>
1385−<td><p>xpath</p></td>
1386−<td><p>10.0</p></td>
1387−<td><p>social media</p></td>
1388−<td></td>
1389−<td><p>y</p></td>
1390−<td></td>
1391−<td><p>y</p></td>
1392−<td></td>
1393−<td></td>
1394−<td><p>1</p></td>
1395−<td><p>y</p></td>
1396−</tr>
1397−<tr class="row-even"><th class="stub"><p>1337x</p></th>
1398−<th class="stub"><p>!1337x</p></th>
1399−<td><p>1337x</p></td>
1400−<td><p>2.0</p></td>
1401−<td><p>videos</p></td>
1402−<td><p>y</p></td>
1403−<td><p>y</p></td>
1404−<td></td>
1405−<td><p>y</p></td>
1406−<td></td>
1407−<td></td>
1408−<td><p>1</p></td>
1409−<td><p>y</p></td>
1410−</tr>
1411−<tr class="row-odd"><th class="stub"><p>duden</p></th>
1412−<th class="stub"><p>!du</p></th>
1413−<td><p>duden</p></td>
1414−<td><p>2.0</p></td>
1415−<td><p>general</p></td>
1416−<td><p>y</p></td>
1417−<td></td>
1418−<td></td>
1419−<td><p>y</p></td>
1420−<td></td>
1421−<td></td>
1422−<td><p>1</p></td>
1423−<td><p>y</p></td>
1424−</tr>
1425−<tr class="row-even"><th class="stub"><p>seznam</p></th>
1426−<th class="stub"><p>!szn</p></th>
1427−<td><p>xpath</p></td>
1428−<td><p>2.0</p></td>
1429−<td><p>general</p></td>
1430−<td><p>y</p></td>
1431−<td><p>y</p></td>
1432−<td></td>
1433−<td><p>y</p></td>
1434−<td></td>
1435−<td></td>
1436−<td><p>1</p></td>
1437−<td><p>y</p></td>
1438−</tr>
1439−<tr class="row-odd"><th class="stub"><p>mojeek</p></th>
1440−<th class="stub"><p>!mjk</p></th>
1441−<td><p>xpath</p></td>
1442−<td><p>2.0</p></td>
1443−<td><p>general</p></td>
1444−<td><p>y</p></td>
1445−<td><p>y</p></td>
1446−<td></td>
1447−<td><p>y</p></td>
1448−<td></td>
1449−<td></td>
1450−<td><p>1</p></td>
1451−<td><p>y</p></td>
1452−</tr>
1453−<tr class="row-even"><th class="stub"><p>seedpeer</p></th>
1454−<th class="stub"><p>!speu</p></th>
1455−<td><p>seedpeer</p></td>
1456−<td><p>2.0</p></td>
1457−<td><p>files, music, videos</p></td>
1458−<td></td>
1459−<td><p>y</p></td>
1460−<td></td>
1461−<td></td>
1462−<td></td>
1463−<td></td>
1464−<td><p>1</p></td>
1465−<td></td>
1466−</tr>
1467137</tbody>
1468138</table>
1469139</div>
@@ -1520,7 +190,7 @@
1520190
1521191 <div class="footer" role="contentinfo">
1522192 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
1523− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
193+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
1524194 </div>
1525195 <script src="../_static/version_warning_offset.js"></script>
1526196
admin/filtron.html+138−91
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -43,13 +43,42 @@
4343 <div class="body" role="main">
4444
4545 <div class="section" id="how-to-protect-an-instance">
46−<h1>How to protect an instance<a class="headerlink" href="#how-to-protect-an-instance" title="Permalink to this headline">¶</a></h1>
47−<p>Searx depens on external search services. To avoid the abuse of these services
46+<span id="searx-filtron"></span><h1>How to protect an instance<a class="headerlink" href="#how-to-protect-an-instance" title="Permalink to this headline">¶</a></h1>
47+<div class="sidebar">
48+<p class="sidebar-title">further reading</p>
49+<ul class="simple">
50+<li><p><a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">utils/filtron.sh</span></a></p></li>
51+<li><p><a class="reference internal" href="installation-nginx.html#nginx-searx-site"><span class="std std-ref">A nginx searx site</span></a></p></li>
52+</ul>
53+</div>
54+<div class="contents local topic" id="contents">
55+<p class="topic-title">Contents</p>
56+<ul class="simple">
57+<li><p><a class="reference internal" href="#filtron-go" id="id2">filtron &amp; go</a></p></li>
58+<li><p><a class="reference internal" href="#sample-configuration-of-filtron" id="id3">Sample configuration of filtron</a></p></li>
59+<li><p><a class="reference internal" href="#route-request-through-filtron" id="id4">Route request through filtron</a></p></li>
60+</ul>
61+</div>
62+<p>Searx depends on external search services. To avoid the abuse of these services
4863it is advised to limit the number of requests processed by searx.</p>
49−<p>An application firewall, <code class="docutils literal notranslate"><span class="pre">filtron</span></code> solves exactly this problem. Information
50−on how to install it can be found at the <a class="reference external" href="https://github.com/asciimoo/filtron">project page of filtron</a>.</p>
64+<p>An application firewall, <a class="reference external" href="https://github.com/asciimoo/filtron">filtron</a> solves exactly this problem. Filtron is just
65+a middleware between your web server (nginx, apache, …) and searx, we describe
66+such infratructures in chapter: <a class="reference internal" href="architecture.html#architecture"><span class="std std-ref">Architecture</span></a>.</p>
67+<div class="section" id="filtron-go">
68+<h2><a class="toc-backref" href="#id2">filtron &amp; go</a><a class="headerlink" href="#filtron-go" title="Permalink to this headline">¶</a></h2>
69+<p>Filtron needs <a class="reference external" href="https://golang.org/">Go</a> installed. If <a class="reference external" href="https://golang.org/">Go</a> is preinstalled, <a class="reference external" href="https://github.com/asciimoo/filtron">filtron</a> is simply
70+installed by <code class="docutils literal notranslate"><span class="pre">go</span> <span class="pre">get</span></code> package management (see <a class="reference external" href="https://github.com/asciimoo/filtron/blob/master/README.md">filtron README</a>). If you use
71+filtron as middleware, a more isolated setup is recommended. To simplify such
72+an installation and the maintenance of, use our script <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">utils/filtron.sh</span></a>.</p>
73+</div>
5174<div class="section" id="sample-configuration-of-filtron">
52−<h2>Sample configuration of filtron<a class="headerlink" href="#sample-configuration-of-filtron" title="Permalink to this headline">¶</a></h2>
75+<span id="id1"></span><h2><a class="toc-backref" href="#id3">Sample configuration of filtron</a><a class="headerlink" href="#sample-configuration-of-filtron" title="Permalink to this headline">¶</a></h2>
76+<div class="sidebar">
77+<p class="sidebar-title">Tooling box</p>
78+<ul class="simple">
79+<li><p><a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/templates/etc/filtron/rules.json">/etc/filtron/rules.json</a></p></li>
80+</ul>
81+</div>
5382<p>An example configuration can be find below. This configuration limits the access
5483of:</p>
5584<ul class="simple">
@@ -59,104 +88,113 @@ of:</p>
5988<li><p>too many json, csv, etc. requests (rss/json limit)</p></li>
6089<li><p>the same UserAgent of if too many requests (useragent limit)</p></li>
6190</ul>
62−<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">[{</span>
63− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;search request&quot;</span><span class="p">,</span>
64− <span class="nt">&quot;filters&quot;</span><span class="p">:[</span>
91+<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">[</span>
92+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;search request&quot;</span><span class="p">,</span>
93+ <span class="nt">&quot;filters&quot;</span><span class="p">:</span> <span class="p">[</span>
6594 <span class="s2">&quot;Param:q&quot;</span><span class="p">,</span>
6695 <span class="s2">&quot;Path=^(/|/search)$&quot;</span>
67− <span class="p">],</span>
68− <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
69− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
70− <span class="nt">&quot;subrules&quot;</span><span class="p">:[</span>
96+ <span class="p">],</span>
97+ <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
98+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
99+ <span class="nt">&quot;subrules&quot;</span><span class="p">:</span> <span class="p">[</span>
71100 <span class="p">{</span>
72− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;roboagent limit&quot;</span><span class="p">,</span>
73− <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
74− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
75− <span class="nt">&quot;filters&quot;</span><span class="p">:[</span>
76− <span class="s2">&quot;Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)&quot;</span>
77− <span class="p">],</span>
78− <span class="nt">&quot;actions&quot;</span><span class="p">:[</span>
79− <span class="p">{</span>
80− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;block&quot;</span><span class="p">,</span>
81− <span class="nt">&quot;params&quot;</span><span class="p">:{</span>
82− <span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Rate limit exceeded&quot;</span>
83− <span class="p">}</span>
101+ <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;roboagent limit&quot;</span><span class="p">,</span>
102+ <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
103+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
104+ <span class="nt">&quot;filters&quot;</span><span class="p">:</span> <span class="p">[</span>
105+ <span class="s2">&quot;Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)&quot;</span>
106+ <span class="p">],</span>
107+ <span class="nt">&quot;actions&quot;</span><span class="p">:</span> <span class="p">[</span>
108+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;log&quot;</span><span class="p">},</span>
109+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;block&quot;</span><span class="p">,</span>
110+ <span class="nt">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span>
111+ <span class="nt">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Rate limit exceeded&quot;</span>
84112 <span class="p">}</span>
85− <span class="p">]</span>
113+ <span class="p">}</span>
114+ <span class="p">]</span>
86115 <span class="p">},</span>
87116 <span class="p">{</span>
88− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;botlimit&quot;</span><span class="p">,</span>
89− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
90− <span class="nt">&quot;stop&quot;</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span>
91− <span class="nt">&quot;filters&quot;</span><span class="p">:[</span>
92− <span class="s2">&quot;Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)&quot;</span>
93− <span class="p">],</span>
94− <span class="nt">&quot;actions&quot;</span><span class="p">:[</span>
95− <span class="p">{</span>
96− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;block&quot;</span><span class="p">,</span>
97− <span class="nt">&quot;params&quot;</span><span class="p">:{</span>
98− <span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Rate limit exceeded&quot;</span>
99− <span class="p">}</span>
117+ <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;botlimit&quot;</span><span class="p">,</span>
118+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
119+ <span class="nt">&quot;stop&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
120+ <span class="nt">&quot;filters&quot;</span><span class="p">:</span> <span class="p">[</span>
121+ <span class="s2">&quot;Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)&quot;</span>
122+ <span class="p">],</span>
123+ <span class="nt">&quot;actions&quot;</span><span class="p">:</span> <span class="p">[</span>
124+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;log&quot;</span><span class="p">},</span>
125+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;block&quot;</span><span class="p">,</span>
126+ <span class="nt">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span>
127+ <span class="nt">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Rate limit exceeded&quot;</span>
100128 <span class="p">}</span>
101− <span class="p">]</span>
129+ <span class="p">}</span>
130+ <span class="p">]</span>
102131 <span class="p">},</span>
103132 <span class="p">{</span>
104− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;IP limit&quot;</span><span class="p">,</span>
105− <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
106− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
107− <span class="nt">&quot;stop&quot;</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span>
108− <span class="nt">&quot;aggregations&quot;</span><span class="p">:[</span>
109− <span class="s2">&quot;Header:X-Forwarded-For&quot;</span>
110− <span class="p">],</span>
111− <span class="nt">&quot;actions&quot;</span><span class="p">:[</span>
112− <span class="p">{</span>
113− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;block&quot;</span><span class="p">,</span>
114− <span class="nt">&quot;params&quot;</span><span class="p">:{</span>
115− <span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Rate limit exceeded&quot;</span>
116− <span class="p">}</span>
133+ <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;IP limit&quot;</span><span class="p">,</span>
134+ <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
135+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
136+ <span class="nt">&quot;stop&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
137+ <span class="nt">&quot;aggregations&quot;</span><span class="p">:</span> <span class="p">[</span>
138+ <span class="s2">&quot;Header:X-Forwarded-For&quot;</span>
139+ <span class="p">],</span>
140+ <span class="nt">&quot;actions&quot;</span><span class="p">:</span> <span class="p">[</span>
141+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;log&quot;</span><span class="p">},</span>
142+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;block&quot;</span><span class="p">,</span>
143+ <span class="nt">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span>
144+ <span class="nt">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Rate limit exceeded&quot;</span>
117145 <span class="p">}</span>
118− <span class="p">]</span>
146+ <span class="p">}</span>
147+ <span class="p">]</span>
119148 <span class="p">},</span>
120149 <span class="p">{</span>
121− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;rss/json limit&quot;</span><span class="p">,</span>
122− <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
123− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
124− <span class="nt">&quot;stop&quot;</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span>
125− <span class="nt">&quot;filters&quot;</span><span class="p">:[</span>
126− <span class="s2">&quot;Param:format=(csv|json|rss)&quot;</span>
127− <span class="p">],</span>
128− <span class="nt">&quot;actions&quot;</span><span class="p">:[</span>
129− <span class="p">{</span>
130− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;block&quot;</span><span class="p">,</span>
131− <span class="nt">&quot;params&quot;</span><span class="p">:{</span>
132− <span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Rate limit exceeded&quot;</span>
133− <span class="p">}</span>
150+ <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;rss/json limit&quot;</span><span class="p">,</span>
151+ <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
152+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
153+ <span class="nt">&quot;stop&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
154+ <span class="nt">&quot;filters&quot;</span><span class="p">:</span> <span class="p">[</span>
155+ <span class="s2">&quot;Param:format=(csv|json|rss)&quot;</span>
156+ <span class="p">],</span>
157+ <span class="nt">&quot;actions&quot;</span><span class="p">:</span> <span class="p">[</span>
158+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;log&quot;</span><span class="p">},</span>
159+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;block&quot;</span><span class="p">,</span>
160+ <span class="nt">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span>
161+ <span class="nt">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Rate limit exceeded&quot;</span>
134162 <span class="p">}</span>
135− <span class="p">]</span>
163+ <span class="p">}</span>
164+ <span class="p">]</span>
136165 <span class="p">},</span>
137166 <span class="p">{</span>
138− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;useragent limit&quot;</span><span class="p">,</span>
139− <span class="nt">&quot;interval&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
140− <span class="nt">&quot;limit&quot;</span><span class="p">:</span><span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
141− <span class="nt">&quot;aggregations&quot;</span><span class="p">:[</span>
142− <span class="s2">&quot;Header:User-Agent&quot;</span>
143− <span class="p">],</span>
144− <span class="nt">&quot;actions&quot;</span><span class="p">:[</span>
145− <span class="p">{</span>
146− <span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;block&quot;</span><span class="p">,</span>
147− <span class="nt">&quot;params&quot;</span><span class="p">:{</span>
148− <span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Rate limit exceeded&quot;</span>
149− <span class="p">}</span>
167+ <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;useragent limit&quot;</span><span class="p">,</span>
168+ <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;time-interval-in-sec (int)&gt;&quot;</span><span class="p">,</span>
169+ <span class="nt">&quot;limit&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;max-request-number-in-interval (int)&gt;&quot;</span><span class="p">,</span>
170+ <span class="nt">&quot;aggregations&quot;</span><span class="p">:</span> <span class="p">[</span>
171+ <span class="s2">&quot;Header:User-Agent&quot;</span>
172+ <span class="p">],</span>
173+ <span class="nt">&quot;actions&quot;</span><span class="p">:</span> <span class="p">[</span>
174+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;log&quot;</span><span class="p">},</span>
175+ <span class="p">{</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;block&quot;</span><span class="p">,</span>
176+ <span class="nt">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span>
177+ <span class="nt">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Rate limit exceeded&quot;</span>
150178 <span class="p">}</span>
151− <span class="p">]</span>
179+ <span class="p">}</span>
180+ <span class="p">]</span>
152181 <span class="p">}</span>
153− <span class="p">]</span>
154−<span class="p">}]</span>
182+ <span class="p">]</span>
183+ <span class="p">}</span>
184+<span class="p">]</span>
155185</pre></div>
156186</div>
157187</div>
158188<div class="section" id="route-request-through-filtron">
159−<h2>Route request through filtron<a class="headerlink" href="#route-request-through-filtron" title="Permalink to this headline">¶</a></h2>
189+<span id="filtron-route-request"></span><h2><a class="toc-backref" href="#id4">Route request through filtron</a><a class="headerlink" href="#route-request-through-filtron" title="Permalink to this headline">¶</a></h2>
190+<div class="sidebar">
191+<p class="sidebar-title">further reading</p>
192+<ul class="simple">
193+<li><p><a class="reference internal" href="../utils/filtron.sh.html#filtron-sh-overview"><span class="std std-ref">Overview</span></a></p></li>
194+<li><p><a class="reference internal" href="installation-nginx.html#installation-nginx"><span class="std std-ref">Install with nginx</span></a></p></li>
195+<li><p><a class="reference internal" href="installation-apache.html#installation-apache"><span class="std std-ref">Install with apache</span></a></p></li>
196+</ul>
197+</div>
160198<p>Filtron can be started using the following command:</p>
161199<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ filtron -rules rules.json
162200</pre></div>
@@ -164,17 +202,26 @@ of:</p>
164202<p>It listens on <code class="docutils literal notranslate"><span class="pre">127.0.0.1:4004</span></code> and forwards filtered requests to
165203<code class="docutils literal notranslate"><span class="pre">127.0.0.1:8888</span></code> by default.</p>
166204<p>Use it along with <code class="docutils literal notranslate"><span class="pre">nginx</span></code> with the following example configuration.</p>
167−<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">location</span> <span class="s">/</span> <span class="p">{</span>
168− <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$http_host</span><span class="p">;</span>
169− <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span>
170− <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
171− <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
172− <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:4004/</span><span class="p">;</span>
205+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://example.org/searx</span>
206+
207+<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
208+ <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:4004/</span><span class="p">;</span>
209+
210+ <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$http_host</span><span class="p">;</span>
211+ <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="nv">$http_connection</span><span class="p">;</span>
212+ <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span>
213+ <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
214+ <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
215+ <span class="kn">proxy_set_header</span> <span class="s">X-Script-Name</span> <span class="s">/searx</span><span class="p">;</span>
216+<span class="p">}</span>
217+
218+<span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
219+ <span class="kn">/usr/local/searx/searx-src/searx/static</span><span class="p">;</span>
173220<span class="p">}</span>
174221</pre></div>
175222</div>
176223<p>Requests are coming from port 4004 going through filtron and then forwarded to
177−port 8888 where a searx is being run.</p>
224+port 8888 where a searx is being run. For a complete setup see: <a class="reference internal" href="installation-nginx.html#nginx-searx-site"><span class="std std-ref">A nginx searx site</span></a>.</p>
178225</div>
179226</div>
180227
@@ -230,7 +277,7 @@ port 8888 where a searx is being run.</p>
230277
231278 <div class="footer" role="contentinfo">
232279 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
233− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
280+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
234281 </div>
235282 <script src="../_static/version_warning_offset.js"></script>
236283
admin/index.html+59−7
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,16 +44,68 @@
4444 <div class="section" id="administrator-documentation">
4545<h1>Administrator documentation<a class="headerlink" href="#administrator-documentation" title="Permalink to this headline">¶</a></h1>
4646<div class="toctree-wrapper compound">
47+<p class="caption"><span class="caption-text">Contents</span></p>
4748<ul>
48−<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
49−<li class="toctree-l1"><a class="reference internal" href="settings.html"><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code></a></li>
50−<li class="toctree-l1"><a class="reference internal" href="api.html">Administration API</a></li>
49+<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul>
50+<li class="toctree-l2"><a class="reference internal" href="installation.html#installation-scripts">Installation scripts</a></li>
51+</ul>
52+</li>
53+<li class="toctree-l1"><a class="reference internal" href="installation-searx.html">Step by step installation</a><ul>
54+<li class="toctree-l2"><a class="reference internal" href="installation-searx.html#install-packages">Install packages</a></li>
55+<li class="toctree-l2"><a class="reference internal" href="installation-searx.html#create-user">Create user</a></li>
56+<li class="toctree-l2"><a class="reference internal" href="installation-searx.html#install-searx-dependencies">install searx &amp; dependencies</a></li>
57+<li class="toctree-l2"><a class="reference internal" href="installation-searx.html#configuration">Configuration</a></li>
58+<li class="toctree-l2"><a class="reference internal" href="installation-searx.html#check">Check</a></li>
59+</ul>
60+</li>
61+<li class="toctree-l1"><a class="reference internal" href="installation-uwsgi.html">uwsgi</a><ul>
62+<li class="toctree-l2"><a class="reference internal" href="installation-uwsgi.html#origin-uwsgi">Origin uWSGI</a></li>
63+<li class="toctree-l2"><a class="reference internal" href="installation-uwsgi.html#distributors">Distributors</a></li>
64+<li class="toctree-l2"><a class="reference internal" href="installation-uwsgi.html#alltogether">Alltogether</a></li>
65+</ul>
66+</li>
67+<li class="toctree-l1"><a class="reference internal" href="installation-nginx.html">Install with nginx</a><ul>
68+<li class="toctree-l2"><a class="reference internal" href="installation-nginx.html#the-nginx-http-server">The nginx HTTP server</a></li>
69+<li class="toctree-l2"><a class="reference internal" href="installation-nginx.html#a-nginx-searx-site">A nginx searx site</a></li>
70+<li class="toctree-l2"><a class="reference internal" href="installation-nginx.html#disable-logs">Disable logs</a></li>
71+</ul>
72+</li>
73+<li class="toctree-l1"><a class="reference internal" href="installation-apache.html">Install with apache</a><ul>
74+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#the-apache-http-server">The apache HTTP server</a></li>
75+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#apache-reverse-proxy">Apache Reverse Proxy</a></li>
76+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#uwsgi-support">uWSGI support</a></li>
77+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#restart-service">Restart service</a></li>
78+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#disable-logs">disable logs</a></li>
79+<li class="toctree-l2"><a class="reference internal" href="installation-apache.html#the-debian-layout">The Debian Layout</a></li>
80+</ul>
81+</li>
82+<li class="toctree-l1"><a class="reference internal" href="installation-docker.html">Docker installation</a></li>
83+<li class="toctree-l1"><a class="reference internal" href="update-searx.html">How to update</a></li>
84+<li class="toctree-l1"><a class="reference internal" href="settings.html"><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code></a><ul>
85+<li class="toctree-l2"><a class="reference internal" href="settings.html#global-settings">Global Settings</a></li>
86+<li class="toctree-l2"><a class="reference internal" href="settings.html#engine-settings">Engine settings</a></li>
87+</ul>
88+</li>
89+<li class="toctree-l1"><a class="reference internal" href="api.html">Administration API</a><ul>
90+<li class="toctree-l2"><a class="reference internal" href="api.html#get-configuration-data">Get configuration data</a></li>
91+<li class="toctree-l2"><a class="reference internal" href="api.html#embed-search-bar">Embed search bar</a></li>
92+</ul>
93+</li>
5194<li class="toctree-l1"><a class="reference internal" href="architecture.html">Architecture</a></li>
52−<li class="toctree-l1"><a class="reference internal" href="filtron.html">How to protect an instance</a></li>
95+<li class="toctree-l1"><a class="reference internal" href="filtron.html">How to protect an instance</a><ul>
96+<li class="toctree-l2"><a class="reference internal" href="filtron.html#filtron-go">filtron &amp; go</a></li>
97+<li class="toctree-l2"><a class="reference internal" href="filtron.html#sample-configuration-of-filtron">Sample configuration of filtron</a></li>
98+<li class="toctree-l2"><a class="reference internal" href="filtron.html#route-request-through-filtron">Route request through filtron</a></li>
99+</ul>
100+</li>
53101<li class="toctree-l1"><a class="reference internal" href="morty.html">How to setup result proxy</a></li>
54102<li class="toctree-l1"><a class="reference internal" href="engines.html">Engines</a></li>
55103<li class="toctree-l1"><a class="reference internal" href="plugins.html">Plugins builtin</a></li>
56−<li class="toctree-l1"><a class="reference internal" href="buildhosts.html">Buildhosts</a></li>
104+<li class="toctree-l1"><a class="reference internal" href="buildhosts.html">Buildhosts</a><ul>
105+<li class="toctree-l2"><a class="reference internal" href="buildhosts.html#build-docs">Build docs</a></li>
106+<li class="toctree-l2"><a class="reference internal" href="buildhosts.html#lint-shell-scripts">Lint shell scripts</a></li>
107+</ul>
108+</li>
57109</ul>
58110</div>
59111</div>
@@ -107,7 +159,7 @@
107159
108160 <div class="footer" role="contentinfo">
109161 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
110− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
162+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
111163 </div>
112164 <script src="../_static/version_warning_offset.js"></script>
113165
admin/installation-apache.htmlnew file+648
@@ -0,0 +1,648 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>Install with apache &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="Docker installation" href="installation-docker.html" />
25+ <link rel="prev" title="Install with nginx" href="installation-nginx.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="installation-docker.html" title="Docker installation"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="installation-nginx.html" title="Install with nginx"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="install-with-apache">
52+<span id="installation-apache"></span><h1>Install with apache<a class="headerlink" href="#install-with-apache" title="Permalink to this headline">¶</a></h1>
53+<div class="sidebar">
54+<p class="sidebar-title">further read</p>
55+<ul class="simple">
56+<li><p><a class="reference external" href="https://wiki.archlinux.org/index.php/Apache_HTTP_Server">Apache Arch Linux</a></p></li>
57+<li><p><a class="reference external" href="https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout#DistrosDefaultLayout-Debian,Ubuntu(Apachehttpd2.x):">Apache Debian</a> and <a class="reference external" href="https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian">README.Debian</a></p></li>
58+<li><p><a class="reference external" href="https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html">Apache Fedora</a></p></li>
59+<li><p><a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/directives.html">Apache directives</a></p></li>
60+</ul>
61+</div>
62+<div class="contents local topic" id="contents">
63+<p class="topic-title">Contents</p>
64+<ul class="simple">
65+<li><p><a class="reference internal" href="#the-apache-http-server" id="id2">The apache HTTP server</a></p></li>
66+<li><p><a class="reference internal" href="#apache-reverse-proxy" id="id3">Apache Reverse Proxy</a></p></li>
67+<li><p><a class="reference internal" href="#uwsgi-support" id="id4">uWSGI support</a></p></li>
68+<li><p><a class="reference internal" href="#restart-service" id="id5">Restart service</a></p></li>
69+<li><p><a class="reference internal" href="#disable-logs" id="id6">disable logs</a></p></li>
70+<li><p><a class="reference internal" href="#the-debian-layout" id="id7">The Debian Layout</a></p></li>
71+</ul>
72+</div>
73+<hr class="docutils" />
74+<p><strong>Install</strong> <a class="reference internal" href="#apache-searx-site"><span class="std std-ref">Apache Reverse Proxy</span></a> using <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh-overview"><span class="std std-ref">filtron.sh</span></a></p>
75+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/filtron.sh apache install
76+</pre></div>
77+</div>
78+<p><strong>Install</strong> <a class="reference internal" href="#apache-searx-site"><span class="std std-ref">Apache Reverse Proxy</span></a> using <a class="reference internal" href="../utils/morty.sh.html#morty-sh-overview"><span class="std std-ref">morty.sh</span></a></p>
79+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/morty.sh apache install
80+</pre></div>
81+</div>
82+<hr class="docutils" />
83+<div class="section" id="the-apache-http-server">
84+<h2><a class="toc-backref" href="#id2">The apache HTTP server</a><a class="headerlink" href="#the-apache-http-server" title="Permalink to this headline">¶</a></h2>
85+<p>If <a class="reference external" href="https://httpd.apache.org/">Apache</a> is not installed, install it now. If <a class="reference external" href="https://httpd.apache.org/">apache</a> is new to you, the
86+<a class="reference external" href="https://httpd.apache.org/docs/current/en/getting-started.html">Getting Started</a>, <a class="reference external" href="https://httpd.apache.org/docs/current/en/configuring.html">Configuration Files</a> and <a class="reference external" href="https://httpd.apache.org/docs/current/en/mod/directive-dict.html">Terms Used to Describe
87+Directives</a> documentation gives first orientation. There is also a list of
88+<a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/directives.html">Apache directives</a> <em>to keep in the pocket</em>.</p>
89+<div class="sphinx-tabs docutils container">
90+<div class="ui top attached tabular menu sphinx-menu docutils container">
91+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
92+<div class="docutils container">
93+<p>Ubuntu / debian</p>
94+</div>
95+</div>
96+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
97+<div class="docutils container">
98+<p>Arch Linux</p>
99+</div>
100+</div>
101+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
102+<div class="docutils container">
103+<p>Fedora / RHEL</p>
104+</div>
105+</div>
106+</div>
107+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
108+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install apache2
109+</pre></div>
110+</div>
111+</div>
112+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
113+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H pacman -S apache
114+sudo -H systemctl <span class="nb">enable</span> httpd
115+sudo -H systemctl start http
116+</pre></div>
117+</div>
118+</div>
119+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
120+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H dnf install httpd
121+sudo -H systemctl <span class="nb">enable</span> httpd
122+sudo -H systemctl start httpd
123+</pre></div>
124+</div>
125+</div>
126+</div>
127+<p>Now at <a class="reference external" href="http://localhost">http://localhost</a> you should see any kind of <em>Welcome</em> or <em>Test</em> page.
128+How this default intro site is configured, depends on the linux distribution
129+(compare <a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/directives.html">Apache directives</a>).</p>
130+<div class="sphinx-tabs docutils container">
131+<div class="ui top attached tabular menu sphinx-menu docutils container">
132+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
133+<div class="docutils container">
134+<p>Ubuntu / debian</p>
135+</div>
136+</div>
137+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
138+<div class="docutils container">
139+<p>Arch Linux</p>
140+</div>
141+</div>
142+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
143+<div class="docutils container">
144+<p>Fedora / RHEL</p>
145+</div>
146+</div>
147+</div>
148+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
149+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/apache2/sites-enabled/000-default.conf
150+</pre></div>
151+</div>
152+<p>In this file, there is a line setting the <a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/core.html#documentroot">DocumentRoot</a> directive:</p>
153+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">DocumentRoot</span> <span class="sx">/var/www/html</span>
154+</pre></div>
155+</div>
156+<p>And the <em>welcome</em> page is the HTML file at <code class="docutils literal notranslate"><span class="pre">/var/www/html/index.html</span></code>.</p>
157+</div>
158+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
159+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/httpd/conf/httpd.conf
160+</pre></div>
161+</div>
162+<p>In this file, there is a line setting the <a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/core.html#documentroot">DocumentRoot</a> directive:</p>
163+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">DocumentRoot</span> <span class="s2">&quot;/srv/http&quot;</span>
164+<span class="nt">&lt;Directory</span> <span class="s">&quot;/srv/http&quot;</span><span class="nt">&gt;</span>
165+ <span class="nb">Options</span> Indexes FollowSymLinks
166+ <span class="nb">AllowOverride</span> <span class="k">None</span>
167+ <span class="nb">Require</span> <span class="k">all</span> granted
168+<span class="nt">&lt;/Directory&gt;</span>
169+</pre></div>
170+</div>
171+<p>The <em>welcome</em> page of Arch Linux is a page showing directory located at
172+<code class="docutils literal notranslate"><span class="pre">DocumentRoot</span></code>. This is <em>directory</em> page is generated by the Module
173+<a class="reference external" href="https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html">mod_autoindex</a>:</p>
174+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">LoadModule</span> autoindex_module modules/mod_autoindex.so
175+...
176+<span class="nb">Include</span> conf/extra/httpd-autoindex.conf
177+</pre></div>
178+</div>
179+</div>
180+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
181+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/httpd/conf/httpd.conf
182+</pre></div>
183+</div>
184+<p>In this file, there is a line setting the <code class="docutils literal notranslate"><span class="pre">DocumentRoot</span></code> directive:</p>
185+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">DocumentRoot</span> <span class="s2">&quot;/var/www/html&quot;</span>
186+...
187+<span class="nt">&lt;Directory</span> <span class="s">&quot;/var/www&quot;</span><span class="nt">&gt;</span>
188+ <span class="nb">AllowOverride</span> <span class="k">None</span>
189+ <span class="c"># Allow open access:</span>
190+ <span class="nb">Require</span> <span class="k">all</span> granted
191+<span class="nt">&lt;/Directory&gt;</span>
192+</pre></div>
193+</div>
194+<p>On fresh installations, the <code class="docutils literal notranslate"><span class="pre">/var/www</span></code> is empty and the <em>default
195+welcome page</em> is shown, the configuration is located at:</p>
196+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>less /etc/httpd/conf.d/welcome.conf
197+</pre></div>
198+</div>
199+</div>
200+</div>
201+</div>
202+<div class="section" id="apache-reverse-proxy">
203+<span id="apache-searx-site"></span><h2><a class="toc-backref" href="#id3">Apache Reverse Proxy</a><a class="headerlink" href="#apache-reverse-proxy" title="Permalink to this headline">¶</a></h2>
204+<div class="sidebar">
205+<p class="sidebar-title">public to the internet?</p>
206+<p>If your searx instance is public, stop here and first install <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron
207+reverse proxy</span></a> and <a class="reference internal" href="../utils/morty.sh.html#morty-sh"><span class="std std-ref">result proxy morty</span></a>, see
208+<a class="reference internal" href="installation.html#installation-scripts"><span class="std std-ref">Installation scripts</span></a>. If already done, follow setup: <em>searx via
209+filtron plus morty</em>.</p>
210+</div>
211+<p>To setup a Apache revers proxy you have to enable the <em>headers</em> and <em>proxy</em>
212+modules and create a <a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/core.html#location">Location</a> configuration for the searx site. In most
213+distributions you have to un-comment the lines in the main configuration file,
214+except in <a class="reference internal" href="#the-debian-layout"><span class="std std-ref">The Debian Layout</span></a>.</p>
215+<p>To pass the HTTP HOST header
216+With <a class="reference external" href="https://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypreservehost">ProxyPreserveHost</a> the incoming Host HTTP request header is passed to the
217+proxied host.</p>
218+<div class="sphinx-tabs docutils container">
219+<div class="ui top attached tabular menu sphinx-menu docutils container">
220+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
221+<div class="docutils container">
222+<p>Ubuntu / debian</p>
223+</div>
224+</div>
225+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
226+<div class="docutils container">
227+<p>Arch Linux</p>
228+</div>
229+</div>
230+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
231+<div class="docutils container">
232+<p>Fedora / RHEL</p>
233+</div>
234+</div>
235+</div>
236+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
237+<p>In the Apache setup, enable headers and proxy modules:</p>
238+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H a2enmod headers
239+sudo -H a2enmod proxy
240+sudo -H a2enmod proxy_http
241+</pre></div>
242+</div>
243+<p>In <a class="reference internal" href="#the-debian-layout"><span class="std std-ref">The Debian Layout</span></a> you create a <code class="docutils literal notranslate"><span class="pre">searx.conf</span></code> with the
244+<code class="docutils literal notranslate"><span class="pre">&lt;Location</span> <span class="pre">/searx</span> <span class="pre">&gt;</span></code> directive and save this file in the <em>sites
245+available</em> folder at <code class="docutils literal notranslate"><span class="pre">/etc/apache2/sites-available</span></code>. To enable the
246+<code class="docutils literal notranslate"><span class="pre">searx.conf</span></code> use <a class="reference external" href="https://manpages.debian.org/jump?q=a2ensite">a2ensite</a>:</p>
247+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H a2ensite searx.conf
248+</pre></div>
249+</div>
250+</div>
251+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
252+<p>In the <code class="docutils literal notranslate"><span class="pre">/etc/httpd/conf/httpd.conf</span></code> file, activate headers and proxy
253+modules (<a class="reference external" href="https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule">LoadModule</a>):</p>
254+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">FIXME</span> needs test
255+
256+<span class="nb">LoadModule</span> headers_module modules/mod_headers.so
257+<span class="nb">LoadModule</span> proxy_module modules/mod_proxy.so
258+<span class="nb">LoadModule</span> proxy_http_module modules/mod_proxy_http.so
259+</pre></div>
260+</div>
261+</div>
262+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
263+<p>In the <code class="docutils literal notranslate"><span class="pre">/etc/httpd/conf/httpd.conf</span></code> file, activate headers and proxy
264+modules (<a class="reference external" href="https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule">LoadModule</a>):</p>
265+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">FIXME</span> needs test
266+
267+<span class="nb">LoadModule</span> headers_module modules/mod_headers.so
268+<span class="nb">LoadModule</span> proxy_module modules/mod_proxy.so
269+<span class="nb">LoadModule</span> proxy_http_module modules/mod_proxy_http.so
270+</pre></div>
271+</div>
272+</div>
273+</div>
274+<div class="sphinx-tabs docutils container">
275+<div class="ui top attached tabular menu sphinx-menu docutils container">
276+<div class="active item sphinx-data-tab-c2VhcnggdmlhIGZpbHRyb24gcGx1cyBtb3J0eQ== docutils container">
277+<div class="docutils container">
278+<p>searx via filtron plus morty</p>
279+</div>
280+</div>
281+</div>
282+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-c2VhcnggdmlhIGZpbHRyb24gcGx1cyBtb3J0eQ== active docutils container">
283+<p>Use this setup, if your instance is public to the internet, compare
284+figure: <a class="reference internal" href="architecture.html#arch-public"><span class="std std-ref">architecture</span></a> and <a class="reference internal" href="installation.html#installation-scripts"><span class="std std-ref">Installation scripts</span></a>.</p>
285+<ol class="arabic simple">
286+<li><p>Configure a reverse proxy for <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron</span></a>, listening on
287+<em>localhost 4004</em> (<a class="reference internal" href="filtron.html#filtron-route-request"><span class="std std-ref">Route request through filtron</span></a>):</p></li>
288+</ol>
289+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Location</span> <span class="s">/searx </span><span class="nt">&gt;</span>
290+
291+ <span class="c"># SetEnvIf Request_URI &quot;/searx&quot; dontlog</span>
292+ <span class="c"># CustomLog /dev/null combined env=dontlog</span>
293+
294+ <span class="nb">Require</span> <span class="k">all</span> granted
295+
296+ <span class="nb">Order</span> deny,allow
297+ <span class="nb">Deny</span> from <span class="k">all</span>
298+ <span class="c">#Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
299+ <span class="nb">Allow</span> from <span class="k">all</span>
300+
301+ <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
302+ <span class="nb">ProxyPass</span> http://127.0.0.1:4004
303+ <span class="nb">RequestHeader</span> set X-Script-Name <span class="sx">/searx</span>
304+
305+<span class="nt">&lt;/Location&gt;</span>
306+</pre></div>
307+</div>
308+<p>2. Configure reverse proxy for <a class="reference internal" href="morty.html#searx-morty"><span class="std std-ref">morty</span></a>, listening on
309+<em>localhost 3000</em></p>
310+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
311+
312+<span class="nt">&lt;Location</span> <span class="s">/morty </span><span class="nt">&gt;</span>
313+
314+ <span class="c"># SetEnvIf Request_URI &quot;/morty&quot; dontlog</span>
315+ <span class="c"># CustomLog /dev/null combined env=dontlog</span>
316+
317+ <span class="nb">Require</span> <span class="k">all</span> granted
318+
319+ <span class="nb">Order</span> deny,allow
320+ <span class="nb">Deny</span> from <span class="k">all</span>
321+ <span class="c">#Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
322+ <span class="nb">Allow</span> from <span class="k">all</span>
323+
324+ <span class="nb">ProxyPass</span> http://127.0.0.1:3000
325+ <span class="nb">RequestHeader</span> set X-Script-Name <span class="sx">/morty</span>
326+
327+<span class="nt">&lt;/Location&gt;</span>
328+</pre></div>
329+</div>
330+<p>Note that reverse proxy advised to be used in case of single-user or
331+low-traffic instances. For a fully result proxification add <a class="reference internal" href="morty.html#searx-morty"><span class="std std-ref">morty’s</span></a> <strong>public URL</strong> to your <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a>:</p>
332+<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">result_proxy</span><span class="p p-Indicator">:</span>
333+ <span class="c1"># replace example.org with your server&#39;s public name</span>
334+ <span class="l l-Scalar l-Scalar-Plain">url</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">https://example.org/morty</span>
335+
336+<span class="l l-Scalar l-Scalar-Plain">server</span><span class="p p-Indicator">:</span>
337+ <span class="l l-Scalar l-Scalar-Plain">image_proxy</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">True</span>
338+</pre></div>
339+</div>
340+</div>
341+</div>
342+</div>
343+<div class="section" id="uwsgi-support">
344+<h2><a class="toc-backref" href="#id4">uWSGI support</a><a class="headerlink" href="#uwsgi-support" title="Permalink to this headline">¶</a></h2>
345+<p>Be warned, with this setup, your instance isn’t <a class="reference internal" href="filtron.html#searx-filtron"><span class="std std-ref">protected</span></a>, nevertheless it is good enough for intranet usage. In modern Linux
346+distributions, the <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi">mod_proxy_uwsgi</a> is compiled into the <em>normal</em> apache
347+package and you need to install only the <a class="reference internal" href="installation-uwsgi.html#searx-uwsgi"><span class="std std-ref">uWSGI</span></a> package:</p>
348+<div class="sphinx-tabs docutils container">
349+<div class="ui top attached tabular menu sphinx-menu docutils container">
350+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
351+<div class="docutils container">
352+<p>Ubuntu / debian</p>
353+</div>
354+</div>
355+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
356+<div class="docutils container">
357+<p>Arch Linux</p>
358+</div>
359+</div>
360+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
361+<div class="docutils container">
362+<p>Fedora / RHEL</p>
363+</div>
364+</div>
365+</div>
366+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
367+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install uwsgi
368+
369+<span class="c1"># Ubuntu =&lt; 18.04</span>
370+sudo -H apt-get install libapache2-mod-proxy-uwsgi
371+</pre></div>
372+</div>
373+</div>
374+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
375+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H pacman -S uwsgi
376+</pre></div>
377+</div>
378+</div>
379+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
380+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H dnf install uwsgi
381+</pre></div>
382+</div>
383+</div>
384+</div>
385+<p>The next example shows a configuration using the <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Apache.html">uWSGI Apache support</a> via
386+unix sockets and <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi">mod_proxy_uwsgi</a>.</p>
387+<p>For socket communication, you have to activate <code class="docutils literal notranslate"><span class="pre">socket</span> <span class="pre">=</span>
388+<span class="pre">/run/uwsgi/app/searx/socket</span></code> and comment out the <code class="docutils literal notranslate"><span class="pre">http</span> <span class="pre">=</span> <span class="pre">127.0.0.1:8888</span></code>
389+configuration in your <a class="reference internal" href="installation-uwsgi.html#uwsgi-configuration"><span class="std std-ref">uwsgi ini file</span></a>. If not
390+already exists, create a folder for the unix sockets, which can be used by the
391+searx account (see <a class="reference internal" href="installation-searx.html#create-searx-user"><span class="std std-ref">Create user</span></a>):</p>
392+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo -H mkdir -p /run/uwsgi/app/searx/
393+sudo -H chown -R searx:searx /run/uwsgi/app/searx/
394+</pre></div>
395+</div>
396+<p>If the server is public; to limit access to your intranet replace <code class="docutils literal notranslate"><span class="pre">Allow</span> <span class="pre">from</span>
397+<span class="pre">all</span></code> directive and replace <code class="docutils literal notranslate"><span class="pre">192.168.0.0/16</span></code> with your subnet IP/class.</p>
398+<div class="sphinx-tabs docutils container">
399+<div class="ui top attached tabular menu sphinx-menu docutils container">
400+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
401+<div class="docutils container">
402+<p>Ubuntu / debian</p>
403+</div>
404+</div>
405+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
406+<div class="docutils container">
407+<p>Arch Linux</p>
408+</div>
409+</div>
410+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
411+<div class="docutils container">
412+<p>Fedora / RHEL</p>
413+</div>
414+</div>
415+<div class="item sphinx-data-tab-b2xkIG1vZF93c2dp docutils container">
416+<div class="docutils container">
417+<p>old mod_wsgi</p>
418+</div>
419+</div>
420+</div>
421+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
422+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">LoadModule</span> headers_module <span class="sx">/usr/lib/apache2/mod_headers.so</span>
423+<span class="nb">LoadModule</span> proxy_module <span class="sx">/usr/lib/apache2/modules/mod_proxy.so</span>
424+<span class="nb">LoadModule</span> proxy_uwsgi_module <span class="sx">/usr/lib/apache2/modules/mod_proxy_uwsgi.so</span>
425+
426+<span class="c"># SetEnvIf Request_URI /searx dontlog</span>
427+<span class="c"># CustomLog /dev/null combined env=dontlog</span>
428+
429+<span class="nt">&lt;Location</span> <span class="s">/searx</span><span class="nt">&gt;</span>
430+
431+ <span class="nb">Require</span> <span class="k">all</span> granted
432+ <span class="nb">Order</span> deny,allow
433+ <span class="nb">Deny</span> from <span class="k">all</span>
434+ <span class="c"># Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
435+ <span class="nb">Allow</span> from <span class="k">all</span>
436+
437+ <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
438+ <span class="nb">ProxyPass</span> unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
439+
440+<span class="nt">&lt;/Location&gt;</span>
441+</pre></div>
442+</div>
443+</div>
444+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
445+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">FIXME</span> needs test
446+
447+<span class="nb">LoadModule</span> proxy_module modules/mod_proxy.so
448+<span class="nb">LoadModule</span> proxy_uwsgi_module modules/mod_proxy_uwsgi.so
449+
450+<span class="c"># SetEnvIf Request_URI /searx dontlog</span>
451+<span class="c"># CustomLog /dev/null combined env=dontlog</span>
452+
453+<span class="nt">&lt;Location</span> <span class="s">/searx</span><span class="nt">&gt;</span>
454+
455+ <span class="nb">Require</span> <span class="k">all</span> granted
456+ <span class="nb">Order</span> deny,allow
457+ <span class="nb">Deny</span> from <span class="k">all</span>
458+ <span class="c"># Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
459+ <span class="nb">Allow</span> from <span class="k">all</span>
460+
461+ <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
462+ <span class="nb">ProxyPass</span> unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
463+
464+<span class="nt">&lt;/Location&gt;</span>
465+</pre></div>
466+</div>
467+</div>
468+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
469+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">FIXME</span> needs test
470+
471+<span class="nb">LoadModule</span> proxy_module modules/mod_proxy.so
472+<span class="nb">LoadModule</span> proxy_uwsgi_module modules/mod_proxy_uwsgi.so
473+<span class="nt">&lt;IfModule</span> <span class="s">proxy_uwsgi_module</span><span class="nt">&gt;</span>
474+
475+ <span class="c"># SetEnvIf Request_URI /searx dontlog</span>
476+ <span class="c"># CustomLog /dev/null combined env=dontlog</span>
477+
478+ <span class="nt">&lt;Location</span> <span class="s">/searx</span><span class="nt">&gt;</span>
479+
480+ <span class="nb">Require</span> <span class="k">all</span> granted
481+ <span class="nb">Order</span> deny,allow
482+ <span class="nb">Deny</span> from <span class="k">all</span>
483+ <span class="c"># Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
484+ <span class="nb">Allow</span> from <span class="k">all</span>
485+
486+ <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
487+ <span class="nb">ProxyPass</span> unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
488+
489+ <span class="nt">&lt;/Location&gt;</span>
490+
491+<span class="nt">&lt;/IfModule&gt;</span>
492+</pre></div>
493+</div>
494+</div>
495+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-b2xkIG1vZF93c2dp docutils container">
496+<p>We show this only for historical reasons, DON’T USE <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-uwsgi">mod_uwsgi</a>.
497+ANYMORE!</p>
498+<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;IfModule</span> <span class="s">mod_uwsgi.c</span><span class="nt">&gt;</span>
499+
500+ <span class="c"># SetEnvIf Request_URI &quot;/searx&quot; dontlog</span>
501+ <span class="c"># CustomLog /dev/null combined env=dontlog</span>
502+
503+ <span class="nt">&lt;Location</span> <span class="s">/searx </span><span class="nt">&gt;</span>
504+
505+ <span class="nb">Require</span> <span class="k">all</span> granted
506+
507+ <span class="nb">Options</span> FollowSymLinks Indexes
508+ <span class="nb">SetHandler</span> uwsgi-handler
509+ <span class="nb">uWSGISocket</span> <span class="sx">/run/uwsgi/app/searx/socket</span>
510+
511+ <span class="nb">Order</span> deny,allow
512+ <span class="nb">Deny</span> from <span class="k">all</span>
513+ <span class="c"># Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1</span>
514+ <span class="nb">Allow</span> from <span class="k">all</span>
515+
516+ <span class="nt">&lt;/Location&gt;</span>
517+
518+<span class="nt">&lt;/IfModule&gt;</span>
519+</pre></div>
520+</div>
521+</div>
522+</div>
523+</div>
524+<div class="section" id="restart-service">
525+<span id="restart-apache"></span><h2><a class="toc-backref" href="#id5">Restart service</a><a class="headerlink" href="#restart-service" title="Permalink to this headline">¶</a></h2>
526+<div class="sphinx-tabs docutils container">
527+<div class="ui top attached tabular menu sphinx-menu docutils container">
528+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
529+<div class="docutils container">
530+<p>Ubuntu / debian</p>
531+</div>
532+</div>
533+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
534+<div class="docutils container">
535+<p>Arch Linux</p>
536+</div>
537+</div>
538+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
539+<div class="docutils container">
540+<p>Fedora / RHEL</p>
541+</div>
542+</div>
543+</div>
544+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
545+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart apache2
546+sudo -H service uwsgi restart searx
547+</pre></div>
548+</div>
549+</div>
550+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
551+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart httpd
552+sudo -H systemctl restart uwsgi@searx
553+</pre></div>
554+</div>
555+</div>
556+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
557+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart httpd
558+sudo -H touch /etc/uwsgi.d/searx.ini
559+</pre></div>
560+</div>
561+</div>
562+</div>
563+</div>
564+<div class="section" id="disable-logs">
565+<h2><a class="toc-backref" href="#id6">disable logs</a><a class="headerlink" href="#disable-logs" title="Permalink to this headline">¶</a></h2>
566+<p>For better privacy you can disable Apache logs. In the examples above activate
567+one of the lines and <a class="reference internal" href="#restart-apache">restart apache</a>:</p>
568+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span># SetEnvIf Request_URI &quot;/searx&quot; dontlog
569+# CustomLog /dev/null combined env=dontlog
570+</pre></div>
571+</div>
572+<p>The <code class="docutils literal notranslate"><span class="pre">CustomLog</span></code> directive disable logs for the whole (virtual) server, use it
573+when the URL of the service does not have a path component (<code class="docutils literal notranslate"><span class="pre">/searx</span></code>) / is
574+located at root (<code class="docutils literal notranslate"><span class="pre">/</span></code>).</p>
575+</div>
576+<div class="section" id="the-debian-layout">
577+<span id="id1"></span><h2><a class="toc-backref" href="#id7">The Debian Layout</a><a class="headerlink" href="#the-debian-layout" title="Permalink to this headline">¶</a></h2>
578+<p>Be aware that the Debian layout is quite different from the standard Apache
579+configuration. For details look at the <a class="reference external" href="https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian">README.Debian</a>
580+(<code class="docutils literal notranslate"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></code>). Some commands you should know on
581+Debian:</p>
582+<ul class="simple">
583+<li><p><a class="reference external" href="https://manpages.debian.org/jump?q=apache2ctl">apache2ctl</a>: Apache HTTP server control interface</p></li>
584+<li><p><a class="reference external" href="https://manpages.debian.org/jump?q=a2enmod">a2enmod</a>, <a class="reference external" href="https://manpages.debian.org/jump?q=a2dismod">a2dismod</a>: switch on/off modules</p></li>
585+<li><p><a class="reference external" href="https://manpages.debian.org/jump?q=a2enconf">a2enconf</a>, <a class="reference external" href="https://manpages.debian.org/jump?q=a2disconf">a2disconf</a>: switch on/off configurations</p></li>
586+<li><p><a class="reference external" href="https://manpages.debian.org/jump?q=a2ensite">a2ensite</a>, <a class="reference external" href="https://manpages.debian.org/jump?q=a2dissite">a2dissite</a>: switch on/off sites</p></li>
587+</ul>
588+</div>
589+</div>
590+
591+
592+ </div>
593+ </div>
594+ </div>
595+ <span id="sidebar-top"></span>
596+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
597+ <div class="sphinxsidebarwrapper">
598+
599+
600+ <p class="logo"><a href="../index.html">
601+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
602+ </a></p>
603+
604+
605+ <h3>Project Links</h3>
606+ <ul>
607+ <li><a href="https://github.com/asciimoo/searx">Source</a>
608+
609+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
610+
611+ <li><a href="https://searx.space/">Public instances</a>
612+
613+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
614+ </ul><h3>Navigation</h3>
615+<ul>
616+ <li><a href="../index.html">Overview</a>
617+ <ul>
618+ <li><a href="index.html">Administrator documentation</a>
619+ <ul>
620+ <li>Previous: <a href="installation-nginx.html" title="previous chapter">Install with nginx</a>
621+ <li>Next: <a href="installation-docker.html" title="next chapter">Docker installation</a></ul>
622+ </li>
623+ </ul>
624+ </li>
625+</ul>
626+<div id="searchbox" style="display: none" role="search">
627+ <h3 id="searchlabel">Quick search</h3>
628+ <div class="searchformwrapper">
629+ <form class="search" action="../search.html" method="get">
630+ <input type="text" name="q" aria-labelledby="searchlabel" />
631+ <input type="submit" value="Go" />
632+ </form>
633+ </div>
634+</div>
635+<script>$('#searchbox').show(0);</script>
636+ </div>
637+ </div>
638+ <div class="clearer"></div>
639+ </div>
640+
641+ <div class="footer" role="contentinfo">
642+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
643+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
644+ </div>
645+ <script src="../_static/version_warning_offset.js"></script>
646+
647+ </body>
648+</html>
user/public_instances.html → admin/installation-docker.htmlrenamed+36−6
@@ -1,11 +1,11 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
8− <title>&lt;no title&gt; &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
8+ <title>Docker installation &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
99 <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
1010 <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
1111 <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
@@ -15,6 +15,8 @@
1515 <script src="../_static/language_data.js"></script>
1616 <link rel="index" title="Index" href="../genindex.html" />
1717 <link rel="search" title="Search" href="../search.html" />
18+ <link rel="next" title="How to update" href="update-searx.html" />
19+ <link rel="prev" title="Install with apache" href="installation-apache.html" />
1820 <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
1921
2022 </head><body>
@@ -24,7 +26,14 @@
2426 <li class="right" style="margin-right: 10px">
2527 <a href="../genindex.html" title="General Index"
2628 accesskey="I">index</a></li>
27− <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
29+ <li class="right" >
30+ <a href="update-searx.html" title="How to update"
31+ accesskey="N">next</a> |</li>
32+ <li class="right" >
33+ <a href="installation-apache.html" title="Install with apache"
34+ accesskey="P">previous</a> |</li>
35+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
36+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
2837 </ul>
2938 </div>
3039
@@ -33,7 +42,22 @@
3342 <div class="bodywrapper">
3443 <div class="body" role="main">
3544
36− <p>This page page has been moved to <a class="reference external" href="https://searx.space/">searx.space</a></p>
45+ <div class="section" id="docker-installation">
46+<span id="installation-docker"></span><h1>Docker installation<a class="headerlink" href="#docker-installation" title="Permalink to this headline">¶</a></h1>
47+<p>Make sure you have installed Docker. For instance, you can deploy searx like this:</p>
48+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>docker pull wonderfall/searx
49+docker run -d --name searx -p <span class="nv">$PORT</span>:8888 wonderfall/searx
50+</pre></div>
51+</div>
52+<p>Go to <code class="docutils literal notranslate"><span class="pre">http://localhost:$PORT</span></code>.</p>
53+<p>See <a class="reference external" href="https://hub.docker.com/r/wonderfall/searx/">https://hub.docker.com/r/wonderfall/searx/</a> for more informations. It’s also
54+possible to build searx from the embedded Dockerfile.</p>
55+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/asciimoo/searx.git
56+<span class="nb">cd</span> searx
57+docker build -t whatever/searx .
58+</pre></div>
59+</div>
60+</div>
3761
3862
3963 </div>
@@ -61,7 +85,13 @@
6185 </ul><h3>Navigation</h3>
6286<ul>
6387 <li><a href="../index.html">Overview</a>
64−
88+ <ul>
89+ <li><a href="index.html">Administrator documentation</a>
90+ <ul>
91+ <li>Previous: <a href="installation-apache.html" title="previous chapter">Install with apache</a>
92+ <li>Next: <a href="update-searx.html" title="next chapter">How to update</a></ul>
93+ </li>
94+ </ul>
6595 </li>
6696</ul>
6797<div id="searchbox" style="display: none" role="search">
@@ -81,7 +111,7 @@
81111
82112 <div class="footer" role="contentinfo">
83113 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
84− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
114+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
85115 </div>
86116 <script src="../_static/version_warning_offset.js"></script>
87117
admin/installation-nginx.htmlnew file+505
@@ -0,0 +1,505 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>Install with nginx &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="Install with apache" href="installation-apache.html" />
25+ <link rel="prev" title="uwsgi" href="installation-uwsgi.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="installation-apache.html" title="Install with apache"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="installation-uwsgi.html" title="uwsgi"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="install-with-nginx">
52+<span id="installation-nginx"></span><h1>Install with nginx<a class="headerlink" href="#install-with-nginx" title="Permalink to this headline">¶</a></h1>
53+<div class="sidebar">
54+<p class="sidebar-title">further reading</p>
55+<ul class="simple">
56+<li><p><a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/">nginx</a></p></li>
57+<li><p><a class="reference external" href="http://nginx.org/en/docs/beginners_guide.html">nginx beginners guide</a></p></li>
58+<li><p><a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers">nginx server configuration</a></p></li>
59+<li><p><a class="reference external" href="https://www.nginx.com/resources/wiki/start/">Getting Started wiki</a></p></li>
60+<li><p><a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html">uWSGI support from nginx</a></p></li>
61+</ul>
62+</div>
63+<div class="contents local topic" id="contents">
64+<p class="topic-title">Contents</p>
65+<ul class="simple">
66+<li><p><a class="reference internal" href="#the-nginx-http-server" id="id1">The nginx HTTP server</a></p></li>
67+<li><p><a class="reference internal" href="#a-nginx-searx-site" id="id2">A nginx searx site</a></p></li>
68+<li><p><a class="reference internal" href="#disable-logs" id="id3">Disable logs</a></p></li>
69+</ul>
70+</div>
71+<hr class="docutils" />
72+<p><strong>Install</strong> <a class="reference internal" href="#nginx-searx-site"><span class="std std-ref">A nginx searx site</span></a> using <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh-overview"><span class="std std-ref">filtron.sh</span></a></p>
73+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/filtron.sh nginx install
74+</pre></div>
75+</div>
76+<p><strong>Install</strong> <a class="reference internal" href="#nginx-searx-site"><span class="std std-ref">A nginx searx site</span></a> using <a class="reference internal" href="../utils/morty.sh.html#morty-sh-overview"><span class="std std-ref">morty.sh</span></a></p>
77+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/morty.sh nginx install
78+</pre></div>
79+</div>
80+<hr class="docutils" />
81+<div class="section" id="the-nginx-http-server">
82+<h2><a class="toc-backref" href="#id1">The nginx HTTP server</a><a class="headerlink" href="#the-nginx-http-server" title="Permalink to this headline">¶</a></h2>
83+<p>If <a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/">nginx</a> is not installed (uwsgi will not work with the package nginx-light),
84+install it now.</p>
85+<div class="sphinx-tabs docutils container">
86+<div class="ui top attached tabular menu sphinx-menu docutils container">
87+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
88+<div class="docutils container">
89+<p>Ubuntu / debian</p>
90+</div>
91+</div>
92+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
93+<div class="docutils container">
94+<p>Arch Linux</p>
95+</div>
96+</div>
97+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
98+<div class="docutils container">
99+<p>Fedora / RHEL</p>
100+</div>
101+</div>
102+</div>
103+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
104+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install nginx
105+</pre></div>
106+</div>
107+</div>
108+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
109+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H pacman -S nginx-mainline
110+sudo -H systemctl <span class="nb">enable</span> nginx
111+sudo -H systemctl start nginx
112+</pre></div>
113+</div>
114+</div>
115+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
116+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H dnf install nginx
117+sudo -H systemctl <span class="nb">enable</span> nginx
118+sudo -H systemctl start nginx
119+</pre></div>
120+</div>
121+</div>
122+</div>
123+<p>Now at <a class="reference external" href="http://localhost">http://localhost</a> you should see a <em>Welcome to nginx!</em> page, on Fedora you
124+see a <em>Fedora Webserver - Test Page</em>. The test page comes from the default
125+<a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers">nginx server configuration</a>. How this default intro site is configured,
126+depends on the linux distribution:</p>
127+<div class="sphinx-tabs docutils container">
128+<div class="ui top attached tabular menu sphinx-menu docutils container">
129+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
130+<div class="docutils container">
131+<p>Ubuntu / debian</p>
132+</div>
133+</div>
134+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
135+<div class="docutils container">
136+<p>Arch Linux</p>
137+</div>
138+</div>
139+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
140+<div class="docutils container">
141+<p>Fedora / RHEL</p>
142+</div>
143+</div>
144+</div>
145+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
146+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/nginx/nginx.conf
147+</pre></div>
148+</div>
149+<p>there is a line including site configurations from:</p>
150+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">include</span> <span class="n">/etc/nginx/sites-enabled/*</span>;
151+</pre></div>
152+</div>
153+</div>
154+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
155+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/nginx/nginx.conf
156+</pre></div>
157+</div>
158+<p>in there is a configuration section named <code class="docutils literal notranslate"><span class="pre">server</span></code>:</p>
159+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">server</span> <span class="p">{</span>
160+ <span class="kn">listen</span> <span class="mi">80</span><span class="p">;</span>
161+ <span class="kn">server_name</span> <span class="s">localhost</span><span class="p">;</span>
162+ <span class="c1"># ...</span>
163+<span class="p">}</span>
164+</pre></div>
165+</div>
166+</div>
167+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
168+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>less /etc/nginx/nginx.conf
169+</pre></div>
170+</div>
171+<p>there is a line including site configurations from:</p>
172+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">include</span> <span class="n">/etc/nginx/conf.d/*.conf</span>;
173+</pre></div>
174+</div>
175+</div>
176+</div>
177+</div>
178+<div class="section" id="a-nginx-searx-site">
179+<span id="nginx-searx-site"></span><h2><a class="toc-backref" href="#id2">A nginx searx site</a><a class="headerlink" href="#a-nginx-searx-site" title="Permalink to this headline">¶</a></h2>
180+<div class="sidebar">
181+<p class="sidebar-title">public to the internet?</p>
182+<p>If your searx instance is public, stop here and first install <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron
183+reverse proxy</span></a> and <a class="reference internal" href="../utils/morty.sh.html#morty-sh"><span class="std std-ref">result proxy morty</span></a>, see
184+<a class="reference internal" href="installation.html#installation-scripts"><span class="std std-ref">Installation scripts</span></a>. If already done, follow setup: <em>searx via
185+filtron plus morty</em>.</p>
186+</div>
187+<p>Now you have to create a configuration for the searx site. If <a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/">nginx</a> is new to
188+you, the <a class="reference external" href="http://nginx.org/en/docs/beginners_guide.html">nginx beginners guide</a> is a good starting point and the <a class="reference external" href="https://www.nginx.com/resources/wiki/start/">Getting
189+Started wiki</a> is always a good resource <em>to keep in the pocket</em>.</p>
190+<div class="sphinx-tabs docutils container">
191+<div class="ui top attached tabular menu sphinx-menu docutils container">
192+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
193+<div class="docutils container">
194+<p>Ubuntu / debian</p>
195+</div>
196+</div>
197+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
198+<div class="docutils container">
199+<p>Arch Linux</p>
200+</div>
201+</div>
202+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
203+<div class="docutils container">
204+<p>Fedora / RHEL</p>
205+</div>
206+</div>
207+</div>
208+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
209+<p>Create configuration at <code class="docutils literal notranslate"><span class="pre">/etc/nginx/sites-available/searx</span></code> and place a
210+symlink to sites-enabled:</p>
211+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
212+</pre></div>
213+</div>
214+</div>
215+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
216+<p>In the <code class="docutils literal notranslate"><span class="pre">/etc/nginx/nginx.conf</span></code> file, replace the configuration section
217+named <code class="docutils literal notranslate"><span class="pre">server</span></code>.</p>
218+</div>
219+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
220+<p>Create configuration at <code class="docutils literal notranslate"><span class="pre">/etc/nginx/conf.d/searx</span></code> and place a
221+symlink to sites-enabled:</p>
222+</div>
223+</div>
224+<div class="sphinx-tabs docutils container">
225+<div class="ui top attached tabular menu sphinx-menu docutils container">
226+<div class="active item sphinx-data-tab-c2VhcnggdmlhIGZpbHRyb24gcGx1cyBtb3J0eQ== docutils container">
227+<div class="docutils container">
228+<p>searx via filtron plus morty</p>
229+</div>
230+</div>
231+<div class="item sphinx-data-tab-cHJveHkgb3IgdVdTR0k= docutils container">
232+<div class="docutils container">
233+<p>proxy or uWSGI</p>
234+</div>
235+</div>
236+<div class="item sphinx-data-tab-XC5cLiBhdCBzdWJkaXIgVVJM docutils container">
237+<div class="docutils container">
238+<p>.. at subdir URL</p>
239+</div>
240+</div>
241+</div>
242+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-c2VhcnggdmlhIGZpbHRyb24gcGx1cyBtb3J0eQ== active docutils container">
243+<p>Use this setup, if your instance is public to the internet, compare
244+figure: <a class="reference internal" href="architecture.html#arch-public"><span class="std std-ref">architecture</span></a> and <a class="reference internal" href="installation.html#installation-scripts"><span class="std std-ref">Installation scripts</span></a>.</p>
245+<ol class="arabic simple">
246+<li><p>Configure a reverse proxy for <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron</span></a>, listening on
247+<em>localhost 4004</em> (<a class="reference internal" href="filtron.html#filtron-route-request"><span class="std std-ref">Route request through filtron</span></a>):</p></li>
248+</ol>
249+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://example.org/searx</span>
250+
251+<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
252+ <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:4004/</span><span class="p">;</span>
253+
254+ <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$http_host</span><span class="p">;</span>
255+ <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="nv">$http_connection</span><span class="p">;</span>
256+ <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span>
257+ <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
258+ <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
259+ <span class="kn">proxy_set_header</span> <span class="s">X-Script-Name</span> <span class="s">/searx</span><span class="p">;</span>
260+<span class="p">}</span>
261+
262+<span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
263+ <span class="kn">/usr/local/searx/searx-src/searx/static</span><span class="p">;</span>
264+<span class="p">}</span>
265+</pre></div>
266+</div>
267+<ol class="arabic simple" start="2">
268+<li><p>Configure reverse proxy for <a class="reference internal" href="morty.html#searx-morty"><span class="std std-ref">morty</span></a>, listening on
269+<em>localhost 3000</em>:</p></li>
270+</ol>
271+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://example.org/morty</span>
272+
273+<span class="k">location</span> <span class="s">/morty</span> <span class="p">{</span>
274+ <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:3000/</span><span class="p">;</span>
275+
276+ <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$http_host</span><span class="p">;</span>
277+ <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="nv">$http_connection</span><span class="p">;</span>
278+ <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span>
279+ <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
280+ <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
281+<span class="p">}</span>
282+</pre></div>
283+</div>
284+<p>Note that reverse proxy advised to be used in case of single-user or
285+low-traffic instances. For a fully result proxification add <a class="reference internal" href="morty.html#searx-morty"><span class="std std-ref">morty’s</span></a> <strong>public URL</strong> to your <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a>:</p>
286+<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">result_proxy</span><span class="p p-Indicator">:</span>
287+ <span class="c1"># replace example.org with your server&#39;s public name</span>
288+ <span class="l l-Scalar l-Scalar-Plain">url</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">https://example.org/morty</span>
289+
290+<span class="l l-Scalar l-Scalar-Plain">server</span><span class="p p-Indicator">:</span>
291+ <span class="l l-Scalar l-Scalar-Plain">image_proxy</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">True</span>
292+</pre></div>
293+</div>
294+</div>
295+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-cHJveHkgb3IgdVdTR0k= docutils container">
296+<p>Be warned, with this setup, your instance isn’t <a class="reference internal" href="filtron.html#searx-filtron"><span class="std std-ref">protected</span></a>. Nevertheless it is good enough for intranet usage and it is a
297+excellent example of; <em>how different services can be set up</em>. The next
298+example shows a reverse proxy configuration wrapping the <a class="reference internal" href="installation-uwsgi.html#uwsgi-configuration"><span class="std std-ref">searx-uWSGI
299+application</span></a>, listening on <code class="docutils literal notranslate"><span class="pre">http</span> <span class="pre">=</span>
300+<span class="pre">127.0.0.1:8888</span></code>.</p>
301+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://hostname.local/</span>
302+
303+<span class="k">location</span> <span class="s">/</span> <span class="p">{</span>
304+ <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8888</span><span class="p">;</span>
305+
306+ <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span>
307+ <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="nv">$http_connection</span><span class="p">;</span>
308+ <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
309+ <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
310+ <span class="kn">proxy_buffering</span> <span class="no">off</span><span class="p">;</span>
311+<span class="p">}</span>
312+</pre></div>
313+</div>
314+<p>Alternatively you can use the <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html">uWSGI support from nginx</a> via unix
315+sockets. For socket communication, you have to activate <code class="docutils literal notranslate"><span class="pre">socket</span> <span class="pre">=</span>
316+<span class="pre">/run/uwsgi/app/searx/socket</span></code> and comment out the <code class="docutils literal notranslate"><span class="pre">http</span> <span class="pre">=</span>
317+<span class="pre">127.0.0.1:8888</span></code> configuration in your <a class="reference internal" href="installation-uwsgi.html#uwsgi-configuration"><span class="std std-ref">uwsgi ini file</span></a>.</p>
318+<p>The example shows a nginx virtual <code class="docutils literal notranslate"><span class="pre">server</span></code> configuration, listening on
319+port 80 (IPv4 and IPv6 <a class="reference external" href="http://[::]:80">http://[::]:80</a>). The uWSGI app is configured at
320+location <code class="docutils literal notranslate"><span class="pre">/</span></code> by importing the <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html#configuring-nginx">uwsgi_params</a> and passing requests to
321+the uWSGI socket (<code class="docutils literal notranslate"><span class="pre">uwsgi_pass</span></code>). The <code class="docutils literal notranslate"><span class="pre">server</span></code>’s root points to the
322+<a class="reference internal" href="installation-searx.html#searx-src"><span class="std std-ref">searx-src clone</span></a> and wraps directly the
323+<a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/static/">git://searx/static/</a> content at <code class="docutils literal notranslate"><span class="pre">location</span> <span class="pre">/static</span></code>.</p>
324+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">server</span> <span class="p">{</span>
325+ <span class="c1"># replace hostname.local with your server&#39;s name</span>
326+ <span class="kn">server_name</span> <span class="s">hostname.local</span><span class="p">;</span>
327+
328+ <span class="kn">listen</span> <span class="mi">80</span><span class="p">;</span>
329+ <span class="kn">listen</span> <span class="s">[::]:80</span><span class="p">;</span>
330+
331+ <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span>
332+ <span class="kn">include</span> <span class="s">uwsgi_params</span><span class="p">;</span>
333+ <span class="kn">uwsgi_pass</span> <span class="s">unix:/run/uwsgi/app/searx/socket</span><span class="p">;</span>
334+ <span class="p">}</span>
335+
336+ <span class="kn">root</span> <span class="s">/usr/local/searx/searx-src/searx</span><span class="p">;</span>
337+ <span class="kn">location</span> <span class="s">/static</span> <span class="p">{</span> <span class="p">}</span>
338+<span class="p">}</span>
339+</pre></div>
340+</div>
341+<p>If not already exists, create a folder for the unix sockets, which can be
342+used by the searx account:</p>
343+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir -p /run/uwsgi/app/searx/
344+sudo -H chown -R searx:searx /run/uwsgi/app/searx/
345+</pre></div>
346+</div>
347+</div>
348+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-XC5cLiBhdCBzdWJkaXIgVVJM docutils container">
349+<p>Be warned, with these setups, your instance isn’t <a class="reference internal" href="filtron.html#searx-filtron"><span class="std std-ref">protected</span></a>. The examples are just here to demonstrate how to export the
350+searx application from a subdirectory URL <code class="docutils literal notranslate"><span class="pre">https://example.org/searx/</span></code>.</p>
351+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://hostname.local/searx</span>
352+
353+<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
354+ <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8888</span><span class="p">;</span>
355+
356+ <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span>
357+ <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="nv">$http_connection</span><span class="p">;</span>
358+ <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
359+ <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
360+ <span class="kn">proxy_set_header</span> <span class="s">X-Script-Name</span> <span class="s">/searx</span><span class="p">;</span>
361+ <span class="kn">proxy_buffering</span> <span class="no">off</span><span class="p">;</span>
362+<span class="p">}</span>
363+
364+<span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
365+ <span class="kn">alias</span> <span class="s">/usr/local/searx/searx-src/searx/static</span><span class="p">;</span>
366+<span class="p">}</span>
367+</pre></div>
368+</div>
369+<p>The <code class="docutils literal notranslate"><span class="pre">X-Script-Name</span> <span class="pre">/searx</span></code> is needed by the searx implementation to
370+calculate relative URLs correct. The next example shows a uWSGI
371+configuration. Since there are no HTTP headers in a (u)WSGI protocol, the
372+value is shipped via the <a class="reference external" href="https://werkzeug.palletsprojects.com/en/1.0.x/wsgi/#werkzeug.wsgi.get_script_name">SCRIPT_NAME</a> in the WSGI environment.</p>
373+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="c1"># https://hostname.local/searx</span>
374+
375+<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
376+ <span class="kn">uwsgi_param</span> <span class="s">SCRIPT_NAME</span> <span class="s">/searx</span><span class="p">;</span>
377+ <span class="kn">include</span> <span class="s">uwsgi_params</span><span class="p">;</span>
378+ <span class="kn">uwsgi_pass</span> <span class="s">unix:/run/uwsgi/app/searx/socket</span><span class="p">;</span>
379+<span class="p">}</span>
380+
381+<span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
382+ <span class="kn">alias</span> <span class="s">/usr/local/searx/searx-src/searx</span><span class="p">;</span>
383+<span class="p">}</span>
384+</pre></div>
385+</div>
386+<p>For searx to work correctly the <code class="docutils literal notranslate"><span class="pre">base_url</span></code> must be set in the
387+<a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a>.</p>
388+<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">server</span><span class="p p-Indicator">:</span>
389+ <span class="c1"># replace example.org with your server&#39;s public name</span>
390+ <span class="l l-Scalar l-Scalar-Plain">base_url</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">https://example.org/searx/</span>
391+</pre></div>
392+</div>
393+</div>
394+</div>
395+<p>Restart service:</p>
396+<div class="sphinx-tabs docutils container">
397+<div class="ui top attached tabular menu sphinx-menu docutils container">
398+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
399+<div class="docutils container">
400+<p>Ubuntu / debian</p>
401+</div>
402+</div>
403+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
404+<div class="docutils container">
405+<p>Arch Linux</p>
406+</div>
407+</div>
408+<div class="item sphinx-data-tab-RmVkb3Jh docutils container">
409+<div class="docutils container">
410+<p>Fedora</p>
411+</div>
412+</div>
413+</div>
414+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
415+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart nginx
416+sudo -H service uwsgi restart searx
417+</pre></div>
418+</div>
419+</div>
420+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
421+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart nginx
422+sudo -H systemctl restart uwsgi@searx
423+</pre></div>
424+</div>
425+</div>
426+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3Jh docutils container">
427+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart nginx
428+sudo -H touch /etc/uwsgi.d/searx.ini
429+</pre></div>
430+</div>
431+</div>
432+</div>
433+</div>
434+<div class="section" id="disable-logs">
435+<h2><a class="toc-backref" href="#id3">Disable logs</a><a class="headerlink" href="#disable-logs" title="Permalink to this headline">¶</a></h2>
436+<p>For better privacy you can disable nginx logs in <code class="docutils literal notranslate"><span class="pre">/etc/nginx/nginx.conf</span></code>.</p>
437+<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">http</span> <span class="p">{</span>
438+ <span class="c1"># ...</span>
439+ <span class="kn">access_log</span> <span class="s">/dev/null</span><span class="p">;</span>
440+ <span class="kn">error_log</span> <span class="s">/dev/null</span><span class="p">;</span>
441+ <span class="c1"># ...</span>
442+<span class="p">}</span>
443+</pre></div>
444+</div>
445+</div>
446+</div>
447+
448+
449+ </div>
450+ </div>
451+ </div>
452+ <span id="sidebar-top"></span>
453+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
454+ <div class="sphinxsidebarwrapper">
455+
456+
457+ <p class="logo"><a href="../index.html">
458+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
459+ </a></p>
460+
461+
462+ <h3>Project Links</h3>
463+ <ul>
464+ <li><a href="https://github.com/asciimoo/searx">Source</a>
465+
466+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
467+
468+ <li><a href="https://searx.space/">Public instances</a>
469+
470+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
471+ </ul><h3>Navigation</h3>
472+<ul>
473+ <li><a href="../index.html">Overview</a>
474+ <ul>
475+ <li><a href="index.html">Administrator documentation</a>
476+ <ul>
477+ <li>Previous: <a href="installation-uwsgi.html" title="previous chapter">uwsgi</a>
478+ <li>Next: <a href="installation-apache.html" title="next chapter">Install with apache</a></ul>
479+ </li>
480+ </ul>
481+ </li>
482+</ul>
483+<div id="searchbox" style="display: none" role="search">
484+ <h3 id="searchlabel">Quick search</h3>
485+ <div class="searchformwrapper">
486+ <form class="search" action="../search.html" method="get">
487+ <input type="text" name="q" aria-labelledby="searchlabel" />
488+ <input type="submit" value="Go" />
489+ </form>
490+ </div>
491+</div>
492+<script>$('#searchbox').show(0);</script>
493+ </div>
494+ </div>
495+ <div class="clearer"></div>
496+ </div>
497+
498+ <div class="footer" role="contentinfo">
499+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
500+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
501+ </div>
502+ <script src="../_static/version_warning_offset.js"></script>
503+
504+ </body>
505+</html>
admin/installation-searx.htmlnew file+358
@@ -0,0 +1,358 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>Step by step installation &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="uwsgi" href="installation-uwsgi.html" />
25+ <link rel="prev" title="Installation" href="installation.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="installation-uwsgi.html" title="uwsgi"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="installation.html" title="Installation"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="step-by-step-installation">
52+<span id="installation-basic"></span><h1>Step by step installation<a class="headerlink" href="#step-by-step-installation" title="Permalink to this headline">¶</a></h1>
53+<div class="contents local topic" id="contents">
54+<p class="topic-title">Contents</p>
55+<ul class="simple">
56+<li><p><a class="reference internal" href="#install-packages" id="id2">Install packages</a></p></li>
57+<li><p><a class="reference internal" href="#create-user" id="id3">Create user</a></p></li>
58+<li><p><a class="reference internal" href="#install-searx-dependencies" id="id4">install searx &amp; dependencies</a></p></li>
59+<li><p><a class="reference internal" href="#configuration" id="id5">Configuration</a></p></li>
60+<li><p><a class="reference internal" href="#check" id="id6">Check</a></p></li>
61+</ul>
62+</div>
63+<p>Step by step installation with virtualenv. For Ubuntu, be sure to have enable
64+universe repository.</p>
65+<div class="section" id="install-packages">
66+<span id="id1"></span><h2><a class="toc-backref" href="#id2">Install packages</a><a class="headerlink" href="#install-packages" title="Permalink to this headline">¶</a></h2>
67+<div class="sphinx-tabs docutils container">
68+<div class="ui top attached tabular menu sphinx-menu docutils container">
69+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
70+<div class="docutils container">
71+<p>Ubuntu / debian</p>
72+</div>
73+</div>
74+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
75+<div class="docutils container">
76+<p>Arch Linux</p>
77+</div>
78+</div>
79+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
80+<div class="docutils container">
81+<p>Fedora / RHEL</p>
82+</div>
83+</div>
84+</div>
85+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
86+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H apt-get install -y <span class="se">\</span>
87+ virtualenv python3-dev python3-babel python3-venv <span class="se">\</span>
88+ uwsgi uwsgi-plugin-python3 <span class="se">\</span>
89+ git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev <span class="se">\</span>
90+ shellcheck
91+</pre></div>
92+</div>
93+</div>
94+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
95+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H pacman -S --noconfirm <span class="se">\</span>
96+ python-virtualenv python python-pip python-lxml python-babel <span class="se">\</span>
97+ uwsgi uwsgi-plugin-python <span class="se">\</span>
98+ git base-devel libxml2 <span class="se">\</span>
99+ shellcheck
100+</pre></div>
101+</div>
102+</div>
103+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
104+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H dnf install -y <span class="se">\</span>
105+ virtualenv python python-pip python-lxml python-babel <span class="se">\</span>
106+ uwsgi uwsgi-plugin-python3 <span class="se">\</span>
107+ git @development-tools libxml2 <span class="se">\</span>
108+ ShellCheck
109+</pre></div>
110+</div>
111+</div>
112+</div>
113+<div class="admonition hint">
114+<p class="admonition-title">Hint</p>
115+<p>This installs also the packages needed by <a class="reference internal" href="installation-uwsgi.html#searx-uwsgi"><span class="std std-ref">uwsgi</span></a></p>
116+</div>
117+</div>
118+<div class="section" id="create-user">
119+<span id="create-searx-user"></span><h2><a class="toc-backref" href="#id3">Create user</a><a class="headerlink" href="#create-user" title="Permalink to this headline">¶</a></h2>
120+<div class="sphinx-tabs docutils container">
121+<div class="ui top attached tabular menu sphinx-menu docutils container">
122+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
123+<div class="docutils container">
124+<p>bash</p>
125+</div>
126+</div>
127+</div>
128+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
129+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H useradd --shell /bin/bash --system <span class="se">\</span>
130+ --home-dir /usr/local/searx <span class="se">\</span>
131+ --comment Privacy-respecting metasearch engine searx
132+
133+$ sudo -H mkdir /usr/local/searx
134+$ sudo -H chown -R searx:searx /usr/local/searx
135+</pre></div>
136+</div>
137+</div>
138+</div>
139+</div>
140+<div class="section" id="install-searx-dependencies">
141+<span id="searx-src"></span><h2><a class="toc-backref" href="#id4">install searx &amp; dependencies</a><a class="headerlink" href="#install-searx-dependencies" title="Permalink to this headline">¶</a></h2>
142+<p>Start a interactive shell from new created user and clone searx:</p>
143+<div class="sphinx-tabs docutils container">
144+<div class="ui top attached tabular menu sphinx-menu docutils container">
145+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
146+<div class="docutils container">
147+<p>bash</p>
148+</div>
149+</div>
150+</div>
151+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
152+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H -u searx -i
153+<span class="o">(</span>searx<span class="o">)</span>$ git clone https://github.com/asciimoo/searx.git /usr/local/searx/searx-src
154+</pre></div>
155+</div>
156+</div>
157+</div>
158+<p>In the same shell create <em>virtualenv</em>:</p>
159+<div class="sphinx-tabs docutils container">
160+<div class="ui top attached tabular menu sphinx-menu docutils container">
161+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
162+<div class="docutils container">
163+<p>bash</p>
164+</div>
165+</div>
166+</div>
167+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
168+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="o">(</span>searx<span class="o">)</span>$ python3 -m venv /usr/local/searx/searx-pyenv
169+<span class="o">(</span>searx<span class="o">)</span>$ <span class="nb">echo</span> . /usr/local/searx/searx-pyenv/bin/activate &gt;&gt; /usr/local/searx/.profile
170+</pre></div>
171+</div>
172+</div>
173+</div>
174+<p>To install searx’s dependencies, exit the searx <em>bash</em> session you opened above
175+and restart a new. Before install, first check if your <em>virualenv</em> was sourced
176+from the login (<em>~/.profile</em>):</p>
177+<div class="sphinx-tabs docutils container">
178+<div class="ui top attached tabular menu sphinx-menu docutils container">
179+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
180+<div class="docutils container">
181+<p>bash</p>
182+</div>
183+</div>
184+</div>
185+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
186+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H -u searx -i
187+
188+<span class="o">(</span>searx<span class="o">)</span>$ <span class="nb">command</span> -v python <span class="o">&amp;&amp;</span> python --version
189+/usr/local/searx/searx-pyenv/bin/python
190+Python 3.8.1
191+
192+<span class="o">(</span>searx<span class="o">)</span>$ <span class="nb">cd</span> /usr/local/searx/searx-src
193+<span class="o">(</span>searx<span class="o">)</span>$ ./manage.sh update_packages
194+</pre></div>
195+</div>
196+</div>
197+</div>
198+<div class="admonition tip">
199+<p class="admonition-title">Tip</p>
200+<p>Open a second terminal for the configuration tasks and left the <code class="docutils literal notranslate"><span class="pre">(searx)$</span></code>
201+terminal open for the tasks below.</p>
202+</div>
203+</div>
204+<div class="section" id="configuration">
205+<h2><a class="toc-backref" href="#id5">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline">¶</a></h2>
206+<p>Create a copy of the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a> configuration file in system’s
207+<em>/etc</em> folder. Configure like shown below – replace <code class="docutils literal notranslate"><span class="pre">searx&#64;\$(uname</span> <span class="pre">-n)</span></code> with
208+a name of your choice – <em>and/or</em> edit <code class="docutils literal notranslate"><span class="pre">/etc/searx/settings.yml</span></code> if necessary.</p>
209+<div class="sphinx-tabs docutils container">
210+<div class="ui top attached tabular menu sphinx-menu docutils container">
211+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
212+<div class="docutils container">
213+<p>bash</p>
214+</div>
215+</div>
216+</div>
217+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
218+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H cp /usr/local/searx/searx-src/searx/settings.yml /etc/searx/settings.yml
219+$ sudo -H sed -i -e s/ultrasecretkey/<span class="se">\2</span>ee9ab582e5ff1dfcc6c4f7f2bdd4db6/g /etc/searx/settings.yml
220+$ sudo -H sed -i -e s/<span class="o">{</span>instance_name<span class="o">}</span>/searx@<span class="se">\r</span>yzen/g /etc/searx/settings.yml
221+</pre></div>
222+</div>
223+</div>
224+</div>
225+</div>
226+<div class="section" id="check">
227+<h2><a class="toc-backref" href="#id6">Check</a><a class="headerlink" href="#check" title="Permalink to this headline">¶</a></h2>
228+<p>To check your searx setup, optional enable debugging and start the <em>webapp</em>.
229+Searx looks at the exported environment <code class="docutils literal notranslate"><span class="pre">$SEARX_SETTINGS_PATH</span></code> for a
230+configuration file.</p>
231+<div class="sphinx-tabs docutils container">
232+<div class="ui top attached tabular menu sphinx-menu docutils container">
233+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
234+<div class="docutils container">
235+<p>bash</p>
236+</div>
237+</div>
238+</div>
239+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
240+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># enable debug ..</span>
241+$ sudo -H sed -i -e s/debug : False/debug : True/g /etc/searx/settings.yml
242+
243+<span class="c1"># start webapp</span>
244+$ sudo -H -u searx -i
245+<span class="o">(</span>searx<span class="o">)</span>$ <span class="nb">cd</span> /usr/local/searx/searx-src
246+<span class="o">(</span>searx<span class="o">)</span>$ <span class="nb">export</span> <span class="nv">SEARX_SETTINGS_PATH</span><span class="o">=</span>/etc/searx/settings.yml
247+<span class="o">(</span>searx<span class="o">)</span>$ python searx/webapp.py
248+
249+<span class="c1"># disable debug</span>
250+$ sudo -H sed -i -e s/debug : True/debug : False/g /etc/searx/settings.yml
251+</pre></div>
252+</div>
253+</div>
254+</div>
255+<p>Open WEB browser and visit <a class="reference external" href="http://">http://</a> . If you are inside a
256+container or in a script, test with curl:</p>
257+<div class="sphinx-tabs docutils container">
258+<div class="ui top attached tabular menu sphinx-menu docutils container">
259+<div class="active item sphinx-data-tab-V0VCIGJyb3dzZXI= docutils container">
260+<div class="docutils container">
261+<p>WEB browser</p>
262+</div>
263+</div>
264+<div class="item sphinx-data-tab-Y3VybA== docutils container">
265+<div class="docutils container">
266+<p>curl</p>
267+</div>
268+</div>
269+</div>
270+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-V0VCIGJyb3dzZXI= active docutils container">
271+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ xgd-open http://
272+</pre></div>
273+</div>
274+</div>
275+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-Y3VybA== docutils container">
276+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ curl --location --verbose --head --insecure
277+
278+* Trying 127.0.0.1:8888...
279+* TCP_NODELAY set
280+* Connected to 127.0.0.1 (127.0.0.1) port 8888 (#0)
281+&gt; HEAD / HTTP/1.1
282+&gt; Host: 127.0.0.1:8888
283+&gt; User-Agent: curl/7.68.0
284+&gt; Accept: */*
285+&gt;
286+* Mark bundle as not supporting multiuse
287+* HTTP 1.0, assume close after body
288+&lt; HTTP/1.0 200 OK
289+HTTP/1.0 200 OK
290+...
291+</pre></div>
292+</div>
293+</div>
294+</div>
295+<p>If everything works fine, hit <code class="docutils literal notranslate"><span class="pre">[CTRL-C]</span></code> to stop the <em>webapp</em> and disable the
296+debug option in <code class="docutils literal notranslate"><span class="pre">settings.yml</span></code>. You can now exit searx user bash (enter exit
297+command twice). At this point searx is not demonized; uwsgi allows this.</p>
298+</div>
299+</div>
300+
301+
302+ </div>
303+ </div>
304+ </div>
305+ <span id="sidebar-top"></span>
306+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
307+ <div class="sphinxsidebarwrapper">
308+
309+
310+ <p class="logo"><a href="../index.html">
311+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
312+ </a></p>
313+
314+
315+ <h3>Project Links</h3>
316+ <ul>
317+ <li><a href="https://github.com/asciimoo/searx">Source</a>
318+
319+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
320+
321+ <li><a href="https://searx.space/">Public instances</a>
322+
323+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
324+ </ul><h3>Navigation</h3>
325+<ul>
326+ <li><a href="../index.html">Overview</a>
327+ <ul>
328+ <li><a href="index.html">Administrator documentation</a>
329+ <ul>
330+ <li>Previous: <a href="installation.html" title="previous chapter">Installation</a>
331+ <li>Next: <a href="installation-uwsgi.html" title="next chapter">uwsgi</a></ul>
332+ </li>
333+ </ul>
334+ </li>
335+</ul>
336+<div id="searchbox" style="display: none" role="search">
337+ <h3 id="searchlabel">Quick search</h3>
338+ <div class="searchformwrapper">
339+ <form class="search" action="../search.html" method="get">
340+ <input type="text" name="q" aria-labelledby="searchlabel" />
341+ <input type="submit" value="Go" />
342+ </form>
343+ </div>
344+</div>
345+<script>$('#searchbox').show(0);</script>
346+ </div>
347+ </div>
348+ <div class="clearer"></div>
349+ </div>
350+
351+ <div class="footer" role="contentinfo">
352+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
353+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
354+ </div>
355+ <script src="../_static/version_warning_offset.js"></script>
356+
357+ </body>
358+</html>
admin/installation-uwsgi.htmlnew file+525
@@ -0,0 +1,525 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>uwsgi &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="Install with nginx" href="installation-nginx.html" />
25+ <link rel="prev" title="Step by step installation" href="installation-searx.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="installation-nginx.html" title="Install with nginx"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="installation-searx.html" title="Step by step installation"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="uwsgi">
52+<span id="searx-uwsgi"></span><h1>uwsgi<a class="headerlink" href="#uwsgi" title="Permalink to this headline">¶</a></h1>
53+<div class="sidebar">
54+<p class="sidebar-title">further reading</p>
55+<ul class="simple">
56+<li><p><a class="reference external" href="https://www.freedesktop.org/software/systemd/man/systemd.unit.html">systemd.unit</a></p></li>
57+<li><p><a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html">uWSGI Emperor</a></p></li>
58+</ul>
59+</div>
60+<div class="contents local topic" id="contents">
61+<p class="topic-title">Contents</p>
62+<ul class="simple">
63+<li><p><a class="reference internal" href="#origin-uwsgi" id="id1">Origin uWSGI</a></p></li>
64+<li><p><a class="reference internal" href="#distributors" id="id2">Distributors</a></p></li>
65+<li><p><a class="reference internal" href="#alltogether" id="id3">Alltogether</a></p></li>
66+</ul>
67+</div>
68+<div class="section" id="origin-uwsgi">
69+<h2><a class="toc-backref" href="#id1">Origin uWSGI</a><a class="headerlink" href="#origin-uwsgi" title="Permalink to this headline">¶</a></h2>
70+<p>How uWSGI is implemented by distributors is different. uWSGI itself
71+recommend two methods</p>
72+<p><a class="reference external" href="https://www.freedesktop.org/software/systemd/man/systemd.unit.html">systemd.unit</a> template files as described here <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd">One service per app in systemd</a>.</p>
73+<blockquote>
74+<div><p>There is one <a class="reference external" href="http://0pointer.de/blog/projects/instances.html">systemd unit template</a> and one <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files">uwsgi ini file</a> per uWSGI-app
75+placed at dedicated locations. Take archlinux and a searx.ini as example:</p>
76+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>unit template --&gt; /usr/lib/systemd/system/uwsgi@.service
77+uwsgi ini files --&gt; /etc/uwsgi/searx.ini
78+</pre></div>
79+</div>
80+<p>The searx app can be maintained as know from common systemd units:</p>
81+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>systemctl enable uwsgi@searx
82+systemctl start uwsgi@searx
83+systemctl restart uwsgi@searx
84+systemctl stop uwsgi@searx
85+</pre></div>
86+</div>
87+</div></blockquote>
88+<p>The <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html">uWSGI Emperor</a> mode which fits for maintaining a large range of uwsgi apps.</p>
89+<blockquote>
90+<div><p>The Emperor mode is a special uWSGI instance that will monitor specific
91+events. The Emperor mode (service) is started by a (common, not template)
92+systemd unit. The Emperor service will scan specific directories for <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files">uwsgi
93+ini file</a>s (also know as <em>vassals</em>). If a <em>vassal</em> is added, removed or the
94+timestamp is modified, a corresponding action takes place: a new uWSGI
95+instance is started, reload or stopped. Take Fedora and a searx.ini as
96+example:</p>
97+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to start a new searx instance create --&gt; /etc/uwsgi.d/searx.ini
98+to reload the instance edit timestamp --&gt; touch /etc/uwsgi.d/searx.ini
99+to stop instance remove ini --&gt; rm /etc/uwsgi.d/searx.ini
100+</pre></div>
101+</div>
102+</div></blockquote>
103+</div>
104+<div class="section" id="distributors">
105+<h2><a class="toc-backref" href="#id2">Distributors</a><a class="headerlink" href="#distributors" title="Permalink to this headline">¶</a></h2>
106+<p>The <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html">uWSGI Emperor</a> mode and <a class="reference external" href="http://0pointer.de/blog/projects/instances.html">systemd unit template</a> is what the distributors
107+mostly offer their users, even if they differ in the way they implement both
108+modes and their defaults. Another point they might differ is the packaging of
109+plugins (if so, compare <a class="reference internal" href="installation-searx.html#install-packages"><span class="std std-ref">Install packages</span></a>) and what the default python
110+interpreter is (python2 vs. python3).</p>
111+<p>Fedora starts a Emperor by default, while archlinux does not start any uwsgi
112+service by default. Worth to know; debian (ubuntu) follow a complete different
113+approach. <em>debian</em>: your are familiar with the apache infrastructure? .. they
114+do similar for the uWSGI infrastructure (with less comfort), the folders are:</p>
115+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/etc/uwsgi/apps-available/
116+/etc/uwsgi/apps-enabled/
117+</pre></div>
118+</div>
119+<p>The <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files">uwsgi ini file</a> is enabled by a symbolic link:</p>
120+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/
121+</pre></div>
122+</div>
123+<p>From debian’s documentation (<code class="docutils literal notranslate"><span class="pre">/usr/share/doc/uwsgi/README.Debian.gz</span></code>): You
124+could control specific instance(s) by issuing:</p>
125+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>service uwsgi &lt;command&gt; &lt;confname&gt; &lt;confname&gt; ...
126+
127+sudo -H service uwsgi start searx
128+sudo -H service uwsgi stop searx
129+</pre></div>
130+</div>
131+<p>My experience is, that this command is a bit buggy.</p>
132+</div>
133+<div class="section" id="alltogether">
134+<span id="uwsgi-configuration"></span><h2><a class="toc-backref" href="#id3">Alltogether</a><a class="headerlink" href="#alltogether" title="Permalink to this headline">¶</a></h2>
135+<p>Create the configuration ini-file according to your distribution (see below) and
136+restart the uwsgi application.</p>
137+<div class="sphinx-tabs docutils container">
138+<div class="ui top attached tabular menu sphinx-menu docutils container">
139+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
140+<div class="docutils container">
141+<p>Ubuntu / debian</p>
142+</div>
143+</div>
144+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
145+<div class="docutils container">
146+<p>Arch Linux</p>
147+</div>
148+</div>
149+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
150+<div class="docutils container">
151+<p>Fedora / RHEL</p>
152+</div>
153+</div>
154+</div>
155+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
156+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span># init.d --&gt; /usr/share/doc/uwsgi/README.Debian.gz
157+# For uWSGI debian uses the LSB init process, this might be changed
158+# one day, see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833067
159+
160+create /etc/uwsgi/apps-available/searx.ini
161+enable: sudo -H ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/
162+start: sudo -H service uwsgi start searx
163+restart: sudo -H service uwsgi restart searx
164+stop: sudo -H service uwsgi stop searx
165+disable: sudo -H rm /etc/uwsgi/apps-enabled/searx.ini
166+</pre></div>
167+</div>
168+</div>
169+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
170+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span># systemd --&gt; /usr/lib/systemd/system/uwsgi@.service
171+# For uWSGI archlinux uses systemd template units, see
172+# - http://0pointer.de/blog/projects/instances.html
173+# - https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
174+
175+create: /etc/uwsgi/searx.ini
176+enable: sudo -H systemctl enable uwsgi@searx
177+start: sudo -H systemctl start uwsgi@searx
178+restart: sudo -H systemctl restart uwsgi@searx
179+stop: sudo -H systemctl stop uwsgi@searx
180+disable: sudo -H systemctl disable uwsgi@searx
181+</pre></div>
182+</div>
183+</div>
184+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
185+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span># systemd --&gt; /usr/lib/systemd/system/uwsgi.service
186+# The unit file starts uWSGI in emperor mode (/etc/uwsgi.ini), see
187+# - https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html
188+
189+create: /etc/uwsgi.d/searx.ini
190+restart: sudo -H touch /etc/uwsgi.d/searx.ini
191+disable: sudo -H rm /etc/uwsgi.d/searx.ini
192+</pre></div>
193+</div>
194+</div>
195+</div>
196+<div class="sphinx-tabs docutils container">
197+<div class="ui top attached tabular menu sphinx-menu docutils container">
198+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
199+<div class="docutils container">
200+<p>Ubuntu / debian</p>
201+</div>
202+</div>
203+<div class="item sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
204+<div class="docutils container">
205+<p>Arch Linux</p>
206+</div>
207+</div>
208+<div class="item sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
209+<div class="docutils container">
210+<p>Fedora / RHEL</p>
211+</div>
212+</div>
213+</div>
214+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
215+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[uwsgi]</span>
216+
217+<span class="c1"># uWSGI core</span>
218+<span class="c1"># ----------</span>
219+<span class="c1">#</span>
220+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
221+
222+<span class="c1"># Who will run the code</span>
223+<span class="na">uid</span> <span class="o">=</span> <span class="s">searx</span>
224+<span class="na">gid</span> <span class="o">=</span> <span class="s">searx</span>
225+
226+<span class="c1"># chdir to specified directory before apps loading</span>
227+<span class="na">chdir</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src/searx</span>
228+
229+<span class="c1"># searx configuration (settings.yml)</span>
230+<span class="na">env</span> <span class="o">=</span> <span class="s">SEARX_SETTINGS_PATH=/etc/searx/settings.yml</span>
231+
232+<span class="c1"># disable logging for privacy</span>
233+<span class="na">disable-logging</span> <span class="o">=</span> <span class="s">true</span>
234+
235+<span class="c1"># The right granted on the created socket</span>
236+<span class="na">chmod-socket</span> <span class="o">=</span> <span class="s">666</span>
237+
238+<span class="c1"># Plugin to use and interpretor config</span>
239+<span class="na">single-interpreter</span> <span class="o">=</span> <span class="s">true</span>
240+
241+<span class="c1"># enable master process</span>
242+<span class="na">master</span> <span class="o">=</span> <span class="s">true</span>
243+
244+<span class="c1"># load apps in each worker instead of the master</span>
245+<span class="na">lazy-apps</span> <span class="o">=</span> <span class="s">true</span>
246+
247+<span class="c1"># load uWSGI plugins</span>
248+<span class="na">plugin</span> <span class="o">=</span> <span class="s">python3,http</span>
249+
250+<span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
251+<span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
252+<span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
253+<span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
254+<span class="c1"># default behaviour is for performance reasons.</span>
255+<span class="na">enable-threads</span> <span class="o">=</span> <span class="s">true</span>
256+
257+
258+<span class="c1"># plugin: python</span>
259+<span class="c1"># --------------</span>
260+<span class="c1">#</span>
261+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
262+
263+<span class="c1"># load a WSGI module</span>
264+<span class="na">module</span> <span class="o">=</span> <span class="s">searx.webapp</span>
265+
266+<span class="c1"># set PYTHONHOME/virtualenv</span>
267+<span class="na">virtualenv</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-pyenv</span>
268+
269+<span class="c1"># add directory (or glob) to pythonpath</span>
270+<span class="na">pythonpath</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src</span>
271+
272+
273+<span class="c1"># speak to upstream</span>
274+<span class="c1"># -----------------</span>
275+<span class="c1">#</span>
276+<span class="c1"># Activate the &#39;http&#39; configuration for filtron or activate the &#39;socket&#39;</span>
277+<span class="c1"># configuration if you setup your HTTP server to use uWSGI protocol via sockets.</span>
278+
279+<span class="c1"># using IP:</span>
280+<span class="c1">#</span>
281+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-http</span>
282+<span class="c1"># Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html</span>
283+
284+<span class="na">http</span> <span class="o">=</span> <span class="s">127.0.0.1:8888</span>
285+
286+<span class="c1"># using unix-sockets:</span>
287+<span class="c1">#</span>
288+<span class="c1"># On some distributions you need to create the app folder for the sockets::</span>
289+<span class="c1">#</span>
290+<span class="c1"># mkdir -p /run/uwsgi/app/searx</span>
291+<span class="c1"># chmod -R searx:searx /run/uwsgi/app/searx</span>
292+<span class="c1">#</span>
293+<span class="c1"># socket = /run/uwsgi/app/searx/socket</span>
294+</pre></div>
295+</div>
296+</div>
297+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-QXJjaCBMaW51eA== docutils container">
298+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[uwsgi]</span>
299+
300+<span class="c1"># uWSGI core</span>
301+<span class="c1"># ----------</span>
302+<span class="c1">#</span>
303+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
304+
305+<span class="c1"># Who will run the code</span>
306+<span class="na">uid</span> <span class="o">=</span> <span class="s">searx</span>
307+<span class="na">gid</span> <span class="o">=</span> <span class="s">searx</span>
308+
309+<span class="c1"># chdir to specified directory before apps loading</span>
310+<span class="na">chdir</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src/searx</span>
311+
312+<span class="c1"># searx configuration (settings.yml)</span>
313+<span class="na">env</span> <span class="o">=</span> <span class="s">SEARX_SETTINGS_PATH=/etc/searx/settings.yml</span>
314+
315+<span class="c1"># disable logging for privacy</span>
316+<span class="na">logger</span> <span class="o">=</span> <span class="s">systemd</span>
317+<span class="na">disable-logging</span> <span class="o">=</span> <span class="s">true</span>
318+
319+<span class="c1"># The right granted on the created socket</span>
320+<span class="na">chmod-socket</span> <span class="o">=</span> <span class="s">666</span>
321+
322+<span class="c1"># Plugin to use and interpretor config</span>
323+<span class="na">single-interpreter</span> <span class="o">=</span> <span class="s">true</span>
324+
325+<span class="c1"># enable master process</span>
326+<span class="na">master</span> <span class="o">=</span> <span class="s">true</span>
327+
328+<span class="c1"># load apps in each worker instead of the master</span>
329+<span class="na">lazy-apps</span> <span class="o">=</span> <span class="s">true</span>
330+
331+<span class="c1"># load uWSGI plugins</span>
332+<span class="na">plugin</span> <span class="o">=</span> <span class="s">python</span>
333+
334+<span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
335+<span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
336+<span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
337+<span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
338+<span class="c1"># default behaviour is for performance reasons.</span>
339+<span class="na">enable-threads</span> <span class="o">=</span> <span class="s">true</span>
340+
341+
342+<span class="c1"># plugin: python</span>
343+<span class="c1"># --------------</span>
344+<span class="c1">#</span>
345+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
346+
347+<span class="c1"># load a WSGI module</span>
348+<span class="na">module</span> <span class="o">=</span> <span class="s">searx.webapp</span>
349+
350+<span class="c1"># set PYTHONHOME/virtualenv</span>
351+<span class="na">virtualenv</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-pyenv</span>
352+
353+<span class="c1"># add directory (or glob) to pythonpath</span>
354+<span class="na">pythonpath</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src</span>
355+
356+
357+<span class="c1"># speak to upstream</span>
358+<span class="c1"># -----------------</span>
359+<span class="c1">#</span>
360+<span class="c1"># Activate the &#39;http&#39; configuration for filtron or activate the &#39;socket&#39;</span>
361+<span class="c1"># configuration if you setup your HTTP server to use uWSGI protocol via sockets.</span>
362+
363+<span class="c1"># using IP:</span>
364+<span class="c1">#</span>
365+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-http</span>
366+<span class="c1"># Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html</span>
367+
368+<span class="na">http</span> <span class="o">=</span> <span class="s">127.0.0.1:8888</span>
369+
370+<span class="c1"># using unix-sockets:</span>
371+<span class="c1">#</span>
372+<span class="c1"># On some distributions you need to create the app folder for the sockets::</span>
373+<span class="c1">#</span>
374+<span class="c1"># mkdir -p /run/uwsgi/app/searx</span>
375+<span class="c1"># chown -R searx:searx /run/uwsgi/app/searx</span>
376+<span class="c1">#</span>
377+<span class="c1"># socket = /run/uwsgi/app/searx/socket</span>
378+</pre></div>
379+</div>
380+</div>
381+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-RmVkb3JhIC8gUkhFTA== docutils container">
382+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[uwsgi]</span>
383+
384+<span class="c1"># uWSGI core</span>
385+<span class="c1"># ----------</span>
386+<span class="c1">#</span>
387+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
388+
389+<span class="c1"># Who will run the code</span>
390+<span class="na">uid</span> <span class="o">=</span> <span class="s">searx</span>
391+<span class="na">gid</span> <span class="o">=</span> <span class="s">searx</span>
392+
393+<span class="c1"># chdir to specified directory before apps loading</span>
394+<span class="na">chdir</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src/searx</span>
395+
396+<span class="c1"># searx configuration (settings.yml)</span>
397+<span class="na">env</span> <span class="o">=</span> <span class="s">SEARX_SETTINGS_PATH=/etc/searx/settings.yml</span>
398+
399+<span class="c1"># disable logging for privacy</span>
400+<span class="na">disable-logging</span> <span class="o">=</span> <span class="s">true</span>
401+
402+<span class="c1"># The right granted on the created socket</span>
403+<span class="na">chmod-socket</span> <span class="o">=</span> <span class="s">666</span>
404+
405+<span class="c1"># Plugin to use and interpretor config</span>
406+<span class="na">single-interpreter</span> <span class="o">=</span> <span class="s">true</span>
407+
408+<span class="c1"># enable master process</span>
409+<span class="na">master</span> <span class="o">=</span> <span class="s">true</span>
410+
411+<span class="c1"># load apps in each worker instead of the master</span>
412+<span class="na">lazy-apps</span> <span class="o">=</span> <span class="s">true</span>
413+
414+<span class="c1"># load uWSGI plugins</span>
415+<span class="na">plugin</span> <span class="o">=</span> <span class="s">python3,http</span>
416+
417+<span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
418+<span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
419+<span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
420+<span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
421+<span class="c1"># default behaviour is for performance reasons.</span>
422+<span class="na">enable-threads</span> <span class="o">=</span> <span class="s">true</span>
423+
424+
425+<span class="c1"># plugin: python</span>
426+<span class="c1"># --------------</span>
427+<span class="c1">#</span>
428+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
429+
430+<span class="c1"># load a WSGI module</span>
431+<span class="na">module</span> <span class="o">=</span> <span class="s">searx.webapp</span>
432+
433+<span class="c1"># set PYTHONHOME/virtualenv</span>
434+<span class="na">virtualenv</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-pyenv</span>
435+
436+<span class="c1"># add directory (or glob) to pythonpath</span>
437+<span class="na">pythonpath</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-src</span>
438+
439+
440+<span class="c1"># speak to upstream</span>
441+<span class="c1"># -----------------</span>
442+<span class="c1">#</span>
443+<span class="c1"># Activate the &#39;http&#39; configuration for filtron or activate the &#39;socket&#39;</span>
444+<span class="c1"># configuration if you setup your HTTP server to use uWSGI protocol via sockets.</span>
445+
446+<span class="c1"># using IP:</span>
447+<span class="c1">#</span>
448+<span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-http</span>
449+<span class="c1"># Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html</span>
450+
451+<span class="na">http</span> <span class="o">=</span> <span class="s">127.0.0.1:8888</span>
452+
453+<span class="c1"># using unix-sockets:</span>
454+<span class="c1">#</span>
455+<span class="c1"># On some distributions you need to create the app folder for the sockets::</span>
456+<span class="c1">#</span>
457+<span class="c1"># mkdir -p /run/uwsgi/app/searx</span>
458+<span class="c1"># chmod -R searx:searx /run/uwsgi/app/searx</span>
459+<span class="c1">#</span>
460+<span class="c1"># socket = /run/uwsgi/app/searx/socket</span>
461+</pre></div>
462+</div>
463+</div>
464+</div>
465+</div>
466+</div>
467+
468+
469+ </div>
470+ </div>
471+ </div>
472+ <span id="sidebar-top"></span>
473+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
474+ <div class="sphinxsidebarwrapper">
475+
476+
477+ <p class="logo"><a href="../index.html">
478+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
479+ </a></p>
480+
481+
482+ <h3>Project Links</h3>
483+ <ul>
484+ <li><a href="https://github.com/asciimoo/searx">Source</a>
485+
486+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
487+
488+ <li><a href="https://searx.space/">Public instances</a>
489+
490+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
491+ </ul><h3>Navigation</h3>
492+<ul>
493+ <li><a href="../index.html">Overview</a>
494+ <ul>
495+ <li><a href="index.html">Administrator documentation</a>
496+ <ul>
497+ <li>Previous: <a href="installation-searx.html" title="previous chapter">Step by step installation</a>
498+ <li>Next: <a href="installation-nginx.html" title="next chapter">Install with nginx</a></ul>
499+ </li>
500+ </ul>
501+ </li>
502+</ul>
503+<div id="searchbox" style="display: none" role="search">
504+ <h3 id="searchlabel">Quick search</h3>
505+ <div class="searchformwrapper">
506+ <form class="search" action="../search.html" method="get">
507+ <input type="text" name="q" aria-labelledby="searchlabel" />
508+ <input type="submit" value="Go" />
509+ </form>
510+ </div>
511+</div>
512+<script>$('#searchbox').show(0);</script>
513+ </div>
514+ </div>
515+ <div class="clearer"></div>
516+ </div>
517+
518+ <div class="footer" role="contentinfo">
519+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
520+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
521+ </div>
522+ <script src="../_static/version_warning_offset.js"></script>
523+
524+ </body>
525+</html>
admin/installation.html+35−289
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -15,7 +15,7 @@
1515 <script src="../_static/language_data.js"></script>
1616 <link rel="index" title="Index" href="../genindex.html" />
1717 <link rel="search" title="Search" href="../search.html" />
18− <link rel="next" title="settings.yml" href="settings.html" />
18+ <link rel="next" title="Step by step installation" href="installation-searx.html" />
1919 <link rel="prev" title="Administrator documentation" href="index.html" />
2020 <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
2121
@@ -27,7 +27,7 @@
2727 <a href="../genindex.html" title="General Index"
2828 accesskey="I">index</a></li>
2929 <li class="right" >
30− <a href="settings.html" title="settings.yml"
30+ <a href="installation-searx.html" title="Step by step installation"
3131 accesskey="N">next</a> |</li>
3232 <li class="right" >
3333 <a href="index.html" title="Administrator documentation"
@@ -43,301 +43,47 @@
4343 <div class="body" role="main">
4444
4545 <div class="section" id="installation">
46−<span id="id1"></span><h1><a class="toc-backref" href="#id3">Installation</a><a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
47−<div class="contents topic" id="contents">
48−<p class="topic-title">Contents</p>
46+<span id="id1"></span><h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
47+<p><em>You’re spoilt for choice</em>, choose your preferred method of installation.</p>
4948<ul class="simple">
50−<li><p><a class="reference internal" href="#installation" id="id3">Installation</a></p>
51−<ul>
52−<li><p><a class="reference internal" href="#basic-installation" id="id4">Basic installation</a></p></li>
53−<li><p><a class="reference internal" href="#configuration" id="id5">Configuration</a></p></li>
54−<li><p><a class="reference internal" href="#check" id="id6">Check</a></p></li>
55−<li><p><a class="reference internal" href="#uwsgi" id="id7">uwsgi</a></p></li>
56−<li><p><a class="reference internal" href="#web-server" id="id8">Web server</a></p>
57−<ul>
58−<li><p><a class="reference internal" href="#with-nginx" id="id9">with nginx</a></p></li>
59−<li><p><a class="reference internal" href="#with-apache" id="id10">with apache</a></p></li>
60−</ul>
61−</li>
62−<li><p><a class="reference internal" href="#how-to-update" id="id11">How to update</a></p></li>
63−<li><p><a class="reference internal" href="#docker" id="id12">Docker</a></p></li>
64−<li><p><a class="reference internal" href="#references" id="id13">References</a></p></li>
49+<li><p><a class="reference internal" href="installation-docker.html#installation-docker"><span class="std std-ref">Docker installation</span></a></p></li>
50+<li><p><a class="reference internal" href="#installation-scripts"><span class="std std-ref">Installation scripts</span></a></p></li>
51+<li><p><a class="reference internal" href="installation-searx.html#installation-basic"><span class="std std-ref">Step by step installation</span></a></p></li>
6552</ul>
66−</li>
67−</ul>
68−</div>
69−<div class="section" id="basic-installation">
70−<h2><a class="toc-backref" href="#id4">Basic installation</a><a class="headerlink" href="#basic-installation" title="Permalink to this headline">¶</a></h2>
71−<p>Step by step installation for Debian/Ubuntu with virtualenv. For Ubuntu, be sure
72−to have enable universe repository.</p>
73−<p>Install packages:</p>
74−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H apt-get install <span class="se">\</span>
75− git build-essential libxslt-dev <span class="se">\</span>
76− python-dev python-virtualenv python-babel <span class="se">\</span>
77− zlib1g-dev libffi-dev libssl-dev
78−</pre></div>
79−</div>
80−<p>Install searx:</p>
81−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> /usr/local
82−sudo -H git clone https://github.com/asciimoo/searx.git
83−sudo -H useradd searx -d /usr/local/searx
84−sudo -H chown searx:searx -R /usr/local/searx
85−</pre></div>
86−</div>
87−<p>Install dependencies in a virtualenv:</p>
88−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> /usr/local/searx
89−sudo -H -u searx -i
90−</pre></div>
91−</div>
92−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="o">(</span>searx<span class="o">)</span>$ virtualenv searx-ve
93−<span class="o">(</span>searx<span class="o">)</span>$ . ./searx-ve/bin/activate
94−<span class="o">(</span>searx<span class="o">)</span>$ ./manage.sh update_packages
95−</pre></div>
96−</div>
97−</div>
98−<div class="section" id="configuration">
99−<h2><a class="toc-backref" href="#id5">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline">¶</a></h2>
100−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sed -i -e <span class="s2">&quot;s/ultrasecretkey/`openssl rand -hex 16`/g&quot;</span> searx/settings.yml
101−</pre></div>
102−</div>
103−<p>Edit searx/settings.yml if necessary.</p>
104−</div>
105−<div class="section" id="check">
106−<h2><a class="toc-backref" href="#id6">Check</a><a class="headerlink" href="#check" title="Permalink to this headline">¶</a></h2>
107−<p>Start searx:</p>
108−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>python searx/webapp.py
109−</pre></div>
110−</div>
111−<p>Go to <a class="reference external" href="http://localhost:8888">http://localhost:8888</a></p>
112−<p>If everything works fine, disable the debug option in settings.yml:</p>
113−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sed -i -e <span class="s2">&quot;s/debug : True/debug : False/g&quot;</span> searx/settings.yml
114−</pre></div>
115−</div>
116−<p>At this point searx is not demonized ; uwsgi allows this.</p>
117−<p>You can exit the virtualenv and the searx user bash (enter exit command
118−twice).</p>
119−</div>
120−<div class="section" id="uwsgi">
121−<h2><a class="toc-backref" href="#id7">uwsgi</a><a class="headerlink" href="#uwsgi" title="Permalink to this headline">¶</a></h2>
122−<p>Install packages:</p>
123−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install <span class="se">\</span>
124− uwsgi uwsgi-plugin-python
125−</pre></div>
126−</div>
127−<p>Create the configuration file <code class="docutils literal notranslate"><span class="pre">/etc/uwsgi/apps-available/searx.ini</span></code> with this
128−content:</p>
129−<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[uwsgi]</span>
130−<span class="c1"># Who will run the code</span>
131−<span class="na">uid</span> <span class="o">=</span> <span class="s">searx</span>
132−<span class="na">gid</span> <span class="o">=</span> <span class="s">searx</span>
133−
134−<span class="c1"># disable logging for privacy</span>
135−<span class="na">disable-logging</span> <span class="o">=</span> <span class="s">true</span>
136−
137−<span class="c1"># Number of workers (usually CPU count)</span>
138−<span class="na">workers</span> <span class="o">=</span> <span class="s">4</span>
139−
140−<span class="c1"># The right granted on the created socket</span>
141−<span class="na">chmod-socket</span> <span class="o">=</span> <span class="s">666</span>
142−
143−<span class="c1"># Plugin to use and interpretor config</span>
144−<span class="na">single-interpreter</span> <span class="o">=</span> <span class="s">true</span>
145−<span class="na">master</span> <span class="o">=</span> <span class="s">true</span>
146−<span class="na">plugin</span> <span class="o">=</span> <span class="s">python</span>
147−<span class="na">lazy-apps</span> <span class="o">=</span> <span class="s">true</span>
148−<span class="na">enable-threads</span> <span class="o">=</span> <span class="s">true</span>
149−
150−<span class="c1"># Module to import</span>
151−<span class="na">module</span> <span class="o">=</span> <span class="s">searx.webapp</span>
152−
153−<span class="c1"># Support running the module from a webserver subdirectory.</span>
154−<span class="na">route-run</span> <span class="o">=</span> <span class="s">fixpathinfo:</span>
155−
156−<span class="c1"># Virtualenv and python path</span>
157−<span class="na">virtualenv</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx-ve/</span>
158−<span class="na">pythonpath</span> <span class="o">=</span> <span class="s">/usr/local/searx/</span>
159−<span class="na">chdir</span> <span class="o">=</span> <span class="s">/usr/local/searx/searx/</span>
160−</pre></div>
161−</div>
162−<p>Activate the uwsgi application and restart:</p>
163−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> /etc/uwsgi/apps-enabled
164−ln -s ../apps-available/searx.ini
165−/etc/init.d/uwsgi restart
166−</pre></div>
167−</div>
168−</div>
169−<div class="section" id="web-server">
170−<h2><a class="toc-backref" href="#id8">Web server</a><a class="headerlink" href="#web-server" title="Permalink to this headline">¶</a></h2>
171−<div class="section" id="with-nginx">
172−<h3><a class="toc-backref" href="#id9">with nginx</a><a class="headerlink" href="#with-nginx" title="Permalink to this headline">¶</a></h3>
173−<p>If nginx is not installed (uwsgi will not work with the package
174−nginx-light):</p>
175−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install nginx
176−</pre></div>
177−</div>
178−<div class="section" id="hosted-at">
179−<h4>Hosted at /<a class="headerlink" href="#hosted-at" title="Permalink to this headline">¶</a></h4>
180−<p>Create the configuration file <code class="docutils literal notranslate"><span class="pre">/etc/nginx/sites-available/searx</span></code> with this
181−content:</p>
182−<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">server</span> <span class="p">{</span>
183− <span class="kn">listen</span> <span class="mi">80</span><span class="p">;</span>
184− <span class="kn">server_name</span> <span class="s">searx.example.com</span><span class="p">;</span>
185− <span class="kn">root</span> <span class="s">/usr/local/searx/searx</span><span class="p">;</span>
186−
187− <span class="kn">location</span> <span class="s">/static</span> <span class="p">{</span>
188− <span class="p">}</span>
189−
190− <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span>
191− <span class="kn">include</span> <span class="s">uwsgi_params</span><span class="p">;</span>
192− <span class="kn">uwsgi_pass</span> <span class="s">unix:/run/uwsgi/app/searx/socket</span><span class="p">;</span>
193− <span class="p">}</span>
194−<span class="p">}</span>
195−</pre></div>
196−</div>
197−<p>Create a symlink to sites-enabled:</p>
198−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
199−</pre></div>
200−</div>
201−<p>Restart service:</p>
202−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H service nginx restart
203−sudo -H service uwsgi restart
53+<p>The <a class="reference internal" href="installation-searx.html#installation-basic"><span class="std std-ref">Step by step installation</span></a> is good enough for intranet usage and it is a
54+excellent illustration of <em>how a searx instance is build up</em>. If you place your
55+instance public to the internet you should really consider to install a
56+<a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron reverse proxy</span></a> and for privacy a <a class="reference internal" href="../utils/morty.sh.html#morty-sh"><span class="std std-ref">result proxy</span></a> is mandatory.</p>
57+<p>Therefore, if you do not have any special preferences, its recommend to use the
58+<a class="reference internal" href="installation-docker.html#installation-docker"><span class="std std-ref">Docker installation</span></a> or the <a class="reference internal" href="#installation-scripts">Installation scripts</a> from our <a class="reference internal" href="../utils/index.html#toolboxing"><span class="std std-ref">tooling
59+box</span></a> as described below.</p>
60+<div class="section" id="installation-scripts">
61+<span id="id2"></span><h2>Installation scripts<a class="headerlink" href="#installation-scripts" title="Permalink to this headline">¶</a></h2>
62+<p>The following will install a setup as shown in <a class="reference internal" href="architecture.html#architecture"><span class="std std-ref">Architecture</span></a>. First you
63+need to get a clone. The clone is only needed for the installation procedure
64+and some maintenance tasks (alternatively you can create your own fork).</p>
65+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ <span class="nb">cd</span> ~/Downloads
66+$ git clone https://github.com/asciimoo/searx searx
67+$ <span class="nb">cd</span> searx
20468</pre></div>
20569</div>
206−</div>
207−<div class="section" id="from-subdirectory-url-searx">
208−<h4>from subdirectory URL (/searx)<a class="headerlink" href="#from-subdirectory-url-searx" title="Permalink to this headline">¶</a></h4>
209−<p>Add this configuration in the server config file
210−<code class="docutils literal notranslate"><span class="pre">/etc/nginx/sites-enabled/default</span></code>:</p>
211−<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
212− <span class="kn">alias</span> <span class="s">/usr/local/searx/searx/static</span><span class="p">;</span>
213−<span class="p">}</span>
214−
215−<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
216− <span class="kn">uwsgi_param</span> <span class="s">SCRIPT_NAME</span> <span class="s">/searx</span><span class="p">;</span>
217− <span class="kn">include</span> <span class="s">uwsgi_params</span><span class="p">;</span>
218− <span class="kn">uwsgi_pass</span> <span class="s">unix:/run/uwsgi/app/searx/socket</span><span class="p">;</span>
219−<span class="p">}</span>
220−</pre></div>
221−</div>
222−<p><strong>OR</strong> using reverse proxy (Please, note that reverse proxy advised to be used
223−in case of single-user or low-traffic instances.)</p>
224−<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">location</span> <span class="s">/searx/static</span> <span class="p">{</span>
225− <span class="kn">alias</span> <span class="s">/usr/local/searx/searx/static</span><span class="p">;</span>
226−<span class="p">}</span>
227−
228−<span class="k">location</span> <span class="s">/searx</span> <span class="p">{</span>
229− <span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8888</span><span class="p">;</span>
230− <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span>
231− <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
232− <span class="kn">proxy_set_header</span> <span class="s">X-Scheme</span> <span class="nv">$scheme</span><span class="p">;</span>
233− <span class="kn">proxy_set_header</span> <span class="s">X-Script-Name</span> <span class="s">/searx</span><span class="p">;</span>
234− <span class="kn">proxy_buffering</span> <span class="no">off</span><span class="p">;</span>
235−<span class="p">}</span>
236−</pre></div>
237−</div>
238−<p>Enable <code class="docutils literal notranslate"><span class="pre">base_url</span></code> in <code class="docutils literal notranslate"><span class="pre">searx/settings.yml</span></code></p>
239−<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">base_url</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">http://your.domain.tld/searx/</span>
240−</pre></div>
241−</div>
242−<p>Restart service:</p>
243−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H service nginx restart
244−sudo -H service uwsgi restart
245−</pre></div>
246−</div>
247−<div class="section" id="disable-logs">
248−<h5>disable logs<a class="headerlink" href="#disable-logs" title="Permalink to this headline">¶</a></h5>
249−<p>for better privacy you can disable nginx logs about searx.</p>
250−<p>how to proceed: below <code class="docutils literal notranslate"><span class="pre">uwsgi_pass</span></code> in <code class="docutils literal notranslate"><span class="pre">/etc/nginx/sites-available/default</span></code>
251−add:</p>
252−<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">access_log</span> <span class="s">/dev/null</span><span class="p">;</span>
253−<span class="k">error_log</span> <span class="s">/dev/null</span><span class="p">;</span>
254−</pre></div>
255−</div>
256−<p>Restart service:</p>
257−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H service nginx restart
258−</pre></div>
259−</div>
260−</div>
261−</div>
262−</div>
263−<div class="section" id="with-apache">
264−<h3><a class="toc-backref" href="#id10">with apache</a><a class="headerlink" href="#with-apache" title="Permalink to this headline">¶</a></h3>
265−<p>Add wsgi mod:</p>
266−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install libapache2-mod-uwsgi
267−sudo -H a2enmod uwsgi
70+<p><strong>Install</strong> <a class="reference internal" href="../utils/searx.sh.html#searx-sh"><span class="std std-ref">searx service</span></a></p>
71+<p>This installs searx as described in <a class="reference internal" href="installation-searx.html#installation-basic"><span class="std std-ref">Step by step installation</span></a>.</p>
72+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/searx.sh install all
26873</pre></div>
26974</div>
270−<p>Add this configuration in the file <code class="docutils literal notranslate"><span class="pre">/etc/apache2/apache2.conf</span></code>:</p>
271−<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Location</span> <span class="s">/</span><span class="nt">&gt;</span>
272− <span class="nb">Options</span> FollowSymLinks Indexes
273− <span class="nb">SetHandler</span> uwsgi-handler
274− <span class="nb">uWSGISocket</span> <span class="sx">/run/uwsgi/app/searx/socket</span>
275−<span class="nt">&lt;/Location&gt;</span>
75+<p><strong>Install</strong> <a class="reference internal" href="../utils/filtron.sh.html#filtron-sh"><span class="std std-ref">filtron reverse proxy</span></a></p>
76+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/filtron.sh install all
27677</pre></div>
27778</div>
278−<p>Note that if your instance of searx is not at the root, you should change
279−<code class="docutils literal notranslate"><span class="pre">&lt;Location</span> <span class="pre">/&gt;</span></code> by the location of your instance, like <code class="docutils literal notranslate"><span class="pre">&lt;Location</span> <span class="pre">/searx&gt;</span></code>.</p>
280−<p>Restart Apache:</p>
281−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H /etc/init.d/apache2 restart
79+<p><strong>Install</strong> <a class="reference internal" href="../utils/morty.sh.html#morty-sh"><span class="std std-ref">result proxy</span></a></p>
80+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/morty.sh install all
28281</pre></div>
28382</div>
284−<div class="section" id="id2">
285−<h4>disable logs<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h4>
286−<p>For better privacy you can disable Apache logs.</p>
287−<div class="admonition warning">
288−<p class="admonition-title">Warning</p>
289−<p>You can only disable logs for the whole (virtual) server not for a specific
290−path.</p>
291−</div>
292−<p>Go back to <code class="docutils literal notranslate"><span class="pre">/etc/apache2/apache2.conf</span></code> and above <code class="docutils literal notranslate"><span class="pre">&lt;Location</span> <span class="pre">/&gt;</span></code> add:</p>
293−<div class="highlight-apache notranslate"><div class="highlight"><pre><span></span><span class="nb">CustomLog</span> <span class="sx">/dev/null</span> combined
294−</pre></div>
295−</div>
296−<p>Restart Apache:</p>
297−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H /etc/init.d/apache2 restart
298−</pre></div>
299−</div>
300−</div>
301−</div>
302−</div>
303−<div class="section" id="how-to-update">
304−<h2><a class="toc-backref" href="#id11">How to update</a><a class="headerlink" href="#how-to-update" title="Permalink to this headline">¶</a></h2>
305−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> /usr/local/searx
306−sudo -H -u searx -i
307−</pre></div>
308−</div>
309−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="o">(</span>searx<span class="o">)</span>$ . ./searx-ve/bin/activate
310−<span class="o">(</span>searx<span class="o">)</span>$ git stash
311−<span class="o">(</span>searx<span class="o">)</span>$ git pull origin master
312−<span class="o">(</span>searx<span class="o">)</span>$ git stash apply
313−<span class="o">(</span>searx<span class="o">)</span>$ ./manage.sh update_packages
314−</pre></div>
315−</div>
316−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H service uwsgi restart
317−</pre></div>
318−</div>
319−</div>
320−<div class="section" id="docker">
321−<h2><a class="toc-backref" href="#id12">Docker</a><a class="headerlink" href="#docker" title="Permalink to this headline">¶</a></h2>
322−<p>Make sure you have installed Docker. For instance, you can deploy searx like this:</p>
323−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>docker pull wonderfall/searx
324−docker run -d --name searx -p <span class="nv">$PORT</span>:8888 wonderfall/searx
325−</pre></div>
326−</div>
327−<p>Go to <code class="docutils literal notranslate"><span class="pre">http://localhost:$PORT</span></code>.</p>
328−<p>See <a class="reference external" href="https://hub.docker.com/r/wonderfall/searx/">https://hub.docker.com/r/wonderfall/searx/</a> for more informations. It’s also
329−possible to build searx from the embedded Dockerfile.</p>
330−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/asciimoo/searx.git
331−<span class="nb">cd</span> searx
332−docker build -t whatever/searx .
333−</pre></div>
334−</div>
335−</div>
336−<div class="section" id="references">
337−<h2><a class="toc-backref" href="#id13">References</a><a class="headerlink" href="#references" title="Permalink to this headline">¶</a></h2>
83+<p>If all services are running fine, you can add it to your HTTP server:</p>
33884<ul class="simple">
339−<li><p><a class="reference external" href="https://about.okhin.fr/posts/Searx/">https://about.okhin.fr/posts/Searx/</a> with some additions</p></li>
340−<li><p>How to: <a class="reference external" href="https://www.reddit.com/r/privacytoolsIO/comments/366kvn/how_to_setup_your_own_privacy_respecting_search/">Setup searx in a couple of hours with a free SSL certificate</a></p></li>
85+<li><p><a class="reference internal" href="installation-apache.html#installation-apache"><span class="std std-ref">Install with apache</span></a></p></li>
86+<li><p><a class="reference internal" href="installation-nginx.html#installation-nginx"><span class="std std-ref">Install with nginx</span></a></p></li>
34187</ul>
34288</div>
34389</div>
@@ -372,7 +118,7 @@ docker build -t whatever/searx .
372118 <li><a href="index.html">Administrator documentation</a>
373119 <ul>
374120 <li>Previous: <a href="index.html" title="previous chapter">Administrator documentation</a>
375− <li>Next: <a href="settings.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code></a></ul>
121+ <li>Next: <a href="installation-searx.html" title="next chapter">Step by step installation</a></ul>
376122 </li>
377123 </ul>
378124 </li>
@@ -394,7 +140,7 @@ docker build -t whatever/searx .
394140
395141 <div class="footer" role="contentinfo">
396142 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
397− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
143+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
398144 </div>
399145 <script src="../_static/version_warning_offset.js"></script>
400146
admin/morty.html+9−3
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -43,7 +43,13 @@
4343 <div class="body" role="main">
4444
4545 <div class="section" id="how-to-setup-result-proxy">
46−<h1>How to setup result proxy<a class="headerlink" href="#how-to-setup-result-proxy" title="Permalink to this headline">¶</a></h1>
46+<span id="searx-morty"></span><h1>How to setup result proxy<a class="headerlink" href="#how-to-setup-result-proxy" title="Permalink to this headline">¶</a></h1>
47+<div class="sidebar">
48+<p class="sidebar-title">further reading</p>
49+<ul class="simple">
50+<li><p><a class="reference internal" href="../utils/morty.sh.html#morty-sh"><span class="std std-ref">utils/morty.sh</span></a></p></li>
51+</ul>
52+</div>
4753<p>By default searx can only act as an image proxy for result images, but it is
4854possible to proxify all the result URLs with an external service, <a class="reference external" href="https://github.com/asciimoo/morty">morty</a>.</p>
4955<p>To use this feature, morty has to be installed and activated in searx’s
@@ -114,7 +120,7 @@ possible to proxify all the result URLs with an external service, <a class="refe
114120
115121 <div class="footer" role="contentinfo">
116122 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
117− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
123+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
118124 </div>
119125 <script src="../_static/version_warning_offset.js"></script>
120126
admin/plugins.html+2−6
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -122,10 +122,6 @@
122122</div>
123123</td>
124124</tr>
125−<tr class="row-even"><th class="stub"><p>Test</p></th>
126−<td></td>
127−<td><p>Test plugin</p></td>
128−</tr>
129125</tbody>
130126</table>
131127</div>
@@ -182,7 +178,7 @@
182178
183179 <div class="footer" role="contentinfo">
184180 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
185− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
181+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
186182 </div>
187183 <script src="../_static/version_warning_offset.js"></script>
188184
admin/settings.html+16−8
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -16,7 +16,7 @@
1616 <link rel="index" title="Index" href="../genindex.html" />
1717 <link rel="search" title="Search" href="../search.html" />
1818 <link rel="next" title="Administration API" href="api.html" />
19− <link rel="prev" title="Installation" href="installation.html" />
19+ <link rel="prev" title="How to update" href="update-searx.html" />
2020 <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
2121
2222 </head><body>
@@ -30,7 +30,7 @@
3030 <a href="api.html" title="Administration API"
3131 accesskey="N">next</a> |</li>
3232 <li class="right" >
33− <a href="installation.html" title="Installation"
33+ <a href="update-searx.html" title="How to update"
3434 accesskey="P">previous</a> |</li>
3535 <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
3636 <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
@@ -44,15 +44,23 @@
4444
4545 <div class="section" id="settings-yml">
4646<span id="id1"></span><h1><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code><a class="headerlink" href="#settings-yml" title="Permalink to this headline">¶</a></h1>
47+<p>This page describe the options possibilities of the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a>
48+file.</p>
4749<div class="sidebar">
4850<p class="sidebar-title">Further reading ..</p>
4951<ul class="simple">
5052<li><p><a class="reference internal" href="../dev/search_api.html#search-api"><span class="std std-ref">Search API</span></a></p></li>
5153</ul>
5254</div>
53−<p>This page describe the options possibilities of the settings.yml file.</p>
55+<div class="contents local topic" id="contents">
56+<p class="topic-title">Contents</p>
57+<ul class="simple">
58+<li><p><a class="reference internal" href="#global-settings" id="id2">Global Settings</a></p></li>
59+<li><p><a class="reference internal" href="#engine-settings" id="id3">Engine settings</a></p></li>
60+</ul>
61+</div>
5462<div class="section" id="global-settings">
55−<span id="settings-global"></span><h2>Global Settings<a class="headerlink" href="#global-settings" title="Permalink to this headline">¶</a></h2>
63+<span id="settings-global"></span><h2><a class="toc-backref" href="#id2">Global Settings</a><a class="headerlink" href="#global-settings" title="Permalink to this headline">¶</a></h2>
5664<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">server</span><span class="p p-Indicator">:</span>
5765 <span class="l l-Scalar l-Scalar-Plain">port</span> <span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">8888</span>
5866 <span class="l l-Scalar l-Scalar-Plain">secret_key</span> <span class="p p-Indicator">:</span> <span class="s">&quot;ultrasecretkey&quot;</span> <span class="c1"># change this!</span>
@@ -138,7 +146,7 @@ be made.</p>
138146</dl>
139147</div>
140148<div class="section" id="engine-settings">
141−<span id="settings-engine"></span><h2>Engine settings<a class="headerlink" href="#engine-settings" title="Permalink to this headline">¶</a></h2>
149+<span id="settings-engine"></span><h2><a class="toc-backref" href="#id3">Engine settings</a><a class="headerlink" href="#engine-settings" title="Permalink to this headline">¶</a></h2>
142150<div class="sidebar">
143151<p class="sidebar-title">Further reading ..</p>
144152<ul class="simple">
@@ -226,7 +234,7 @@ engines, and so won’t be described here.</p>
226234 <ul>
227235 <li><a href="index.html">Administrator documentation</a>
228236 <ul>
229− <li>Previous: <a href="installation.html" title="previous chapter">Installation</a>
237+ <li>Previous: <a href="update-searx.html" title="previous chapter">How to update</a>
230238 <li>Next: <a href="api.html" title="next chapter">Administration API</a></ul>
231239 </li>
232240 </ul>
@@ -249,7 +257,7 @@ engines, and so won’t be described here.</p>
249257
250258 <div class="footer" role="contentinfo">
251259 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
252− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
260+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
253261 </div>
254262 <script src="../_static/version_warning_offset.js"></script>
255263
admin/update-searx.htmlnew file+134
@@ -0,0 +1,134 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>How to update &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="settings.yml" href="settings.html" />
25+ <link rel="prev" title="Docker installation" href="installation-docker.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="settings.html" title="settings.yml"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="installation-docker.html" title="Docker installation"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="how-to-update">
52+<span id="update-searx"></span><h1>How to update<a class="headerlink" href="#how-to-update" title="Permalink to this headline">¶</a></h1>
53+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H -u searx -i
54+<span class="o">(</span>searx<span class="o">)</span>$ git stash
55+<span class="o">(</span>searx<span class="o">)</span>$ git pull origin master
56+<span class="o">(</span>searx<span class="o">)</span>$ git stash apply
57+<span class="o">(</span>searx<span class="o">)</span>$ ./manage.sh update_packages
58+</pre></div>
59+</div>
60+<p>Restart uwsgi:</p>
61+<div class="sphinx-tabs docutils container">
62+<div class="ui top attached tabular menu sphinx-menu docutils container">
63+<div class="active item sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu docutils container">
64+<div class="docutils container">
65+<p>Ubuntu / debian</p>
66+</div>
67+</div>
68+</div>
69+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-VWJ1bnR1IC8gZGViaWFu active docutils container">
70+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H systemctl restart uwsgi
71+</pre></div>
72+</div>
73+</div>
74+</div>
75+</div>
76+
77+
78+ </div>
79+ </div>
80+ </div>
81+ <span id="sidebar-top"></span>
82+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
83+ <div class="sphinxsidebarwrapper">
84+
85+
86+ <p class="logo"><a href="../index.html">
87+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
88+ </a></p>
89+
90+
91+ <h3>Project Links</h3>
92+ <ul>
93+ <li><a href="https://github.com/asciimoo/searx">Source</a>
94+
95+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
96+
97+ <li><a href="https://searx.space/">Public instances</a>
98+
99+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
100+ </ul><h3>Navigation</h3>
101+<ul>
102+ <li><a href="../index.html">Overview</a>
103+ <ul>
104+ <li><a href="index.html">Administrator documentation</a>
105+ <ul>
106+ <li>Previous: <a href="installation-docker.html" title="previous chapter">Docker installation</a>
107+ <li>Next: <a href="settings.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code></a></ul>
108+ </li>
109+ </ul>
110+ </li>
111+</ul>
112+<div id="searchbox" style="display: none" role="search">
113+ <h3 id="searchlabel">Quick search</h3>
114+ <div class="searchformwrapper">
115+ <form class="search" action="../search.html" method="get">
116+ <input type="text" name="q" aria-labelledby="searchlabel" />
117+ <input type="submit" value="Go" />
118+ </form>
119+ </div>
120+</div>
121+<script>$('#searchbox').show(0);</script>
122+ </div>
123+ </div>
124+ <div class="clearer"></div>
125+ </div>
126+
127+ <div class="footer" role="contentinfo">
128+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
129+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
130+ </div>
131+ <script src="../_static/version_warning_offset.js"></script>
132+
133+ </body>
134+</html>
blog/admin.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -131,7 +131,7 @@ existing instances.</p>
131131
132132 <div class="footer" role="contentinfo">
133133 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
134− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
134+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
135135 </div>
136136 <script src="../_static/version_warning_offset.js"></script>
137137
blog/index.html+30−9
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -16,7 +16,7 @@
1616 <link rel="index" title="Index" href="../genindex.html" />
1717 <link rel="search" title="Search" href="../search.html" />
1818 <link rel="next" title="Introducing Python 3 support" href="python3.html" />
19− <link rel="prev" title="reST primer" href="../dev/reST.html" />
19+ <link rel="prev" title="utils/lxc.sh" href="../utils/lxc.sh.html" />
2020 <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
2121
2222 </head><body>
@@ -30,7 +30,7 @@
3030 <a href="python3.html" title="Introducing Python 3 support"
3131 accesskey="N">next</a> |</li>
3232 <li class="right" >
33− <a href="../dev/reST.html" title="reST primer"
33+ <a href="../utils/lxc.sh.html" title="utils/lxc.sh"
3434 accesskey="P">previous</a> |</li>
3535 <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
3636 </ul>
@@ -44,11 +44,32 @@
4444 <div class="section" id="blog">
4545<h1>Blog<a class="headerlink" href="#blog" title="Permalink to this headline">¶</a></h1>
4646<div class="toctree-wrapper compound">
47+<p class="caption"><span class="caption-text">Contents</span></p>
4748<ul>
48−<li class="toctree-l1"><a class="reference internal" href="python3.html">Introducing Python 3 support</a></li>
49−<li class="toctree-l1"><a class="reference internal" href="admin.html">Searx admin interface</a></li>
50−<li class="toctree-l1"><a class="reference internal" href="intro-offline.html">Preparation for offline engines</a></li>
51−<li class="toctree-l1"><a class="reference internal" href="private-engines.html">Limit access to your searx engines</a></li>
49+<li class="toctree-l1"><a class="reference internal" href="python3.html">Introducing Python 3 support</a><ul>
50+<li class="toctree-l2"><a class="reference internal" href="python3.html#how-to-run-searx-using-python-3">How to run searx using Python 3</a></li>
51+<li class="toctree-l2"><a class="reference internal" href="python3.html#fun-facts">Fun facts</a></li>
52+<li class="toctree-l2"><a class="reference internal" href="python3.html#if-you-found-bugs">If you found bugs</a></li>
53+<li class="toctree-l2"><a class="reference internal" href="python3.html#acknowledgment">Acknowledgment</a></li>
54+</ul>
55+</li>
56+<li class="toctree-l1"><a class="reference internal" href="admin.html">Searx admin interface</a><ul>
57+<li class="toctree-l2"><a class="reference internal" href="admin.html#acknowledgements">Acknowledgements</a></li>
58+</ul>
59+</li>
60+<li class="toctree-l1"><a class="reference internal" href="intro-offline.html">Preparation for offline engines</a><ul>
61+<li class="toctree-l2"><a class="reference internal" href="intro-offline.html#offline-engines">Offline engines</a></li>
62+<li class="toctree-l2"><a class="reference internal" href="intro-offline.html#development-progress">Development progress</a></li>
63+<li class="toctree-l2"><a class="reference internal" href="intro-offline.html#next-steps">Next steps</a></li>
64+<li class="toctree-l2"><a class="reference internal" href="intro-offline.html#acknowledgement">Acknowledgement</a></li>
65+</ul>
66+</li>
67+<li class="toctree-l1"><a class="reference internal" href="private-engines.html">Limit access to your searx engines</a><ul>
68+<li class="toctree-l2"><a class="reference internal" href="private-engines.html#private-engines">Private engines</a></li>
69+<li class="toctree-l2"><a class="reference internal" href="private-engines.html#next-steps">Next steps</a></li>
70+<li class="toctree-l2"><a class="reference internal" href="private-engines.html#acknowledgement">Acknowledgement</a></li>
71+</ul>
72+</li>
5273</ul>
5374</div>
5475</div>
@@ -80,7 +101,7 @@
80101<ul>
81102 <li><a href="../index.html">Overview</a>
82103 <ul>
83− <li>Previous: <a href="../dev/reST.html" title="previous chapter">reST primer</a>
104+ <li>Previous: <a href="../utils/lxc.sh.html" title="previous chapter"><code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span></code></a>
84105 <li>Next: <a href="python3.html" title="next chapter">Introducing Python 3 support</a>
85106 </ul>
86107 </li>
@@ -102,7 +123,7 @@
102123
103124 <div class="footer" role="contentinfo">
104125 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
105− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
126+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
106127 </div>
107128 <script src="../_static/version_warning_offset.js"></script>
108129
blog/intro-offline.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -158,7 +158,7 @@ as a table. You can check out the pull request for more details see
158158
159159 <div class="footer" role="contentinfo">
160160 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
161− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
161+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
162162 </div>
163163 <script src="../_static/version_warning_offset.js"></script>
164164
blog/private-engines.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -141,7 +141,7 @@ and come up with new solutions which fit your use case.</p>
141141
142142 <div class="footer" role="contentinfo">
143143 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
144− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
144+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
145145 </div>
146146 <script src="../_static/version_warning_offset.js"></script>
147147
blog/python3.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -144,7 +144,7 @@ version in your issue, so we can investigate it properly.</p>
144144
145145 <div class="footer" role="contentinfo">
146146 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
147− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
147+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
148148 </div>
149149 <script src="../_static/version_warning_offset.js"></script>
150150
dev/contribution_guide.html+27−9
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,8 +44,26 @@
4444
4545 <div class="section" id="how-to-contribute">
4646<span id="id1"></span><h1>How to contribute<a class="headerlink" href="#how-to-contribute" title="Permalink to this headline">¶</a></h1>
47+<div class="contents local topic" id="contents">
48+<p class="topic-title">Contents</p>
49+<ul class="simple">
50+<li><p><a class="reference internal" href="#prime-directives-privacy-hackability" id="id3">Prime directives: Privacy, Hackability</a></p>
51+<ul>
52+<li><p><a class="reference internal" href="#privacy-by-design" id="id4">Privacy-by-design</a></p></li>
53+</ul>
54+</li>
55+<li><p><a class="reference internal" href="#code" id="id5">Code</a></p></li>
56+<li><p><a class="reference internal" href="#translation" id="id6">Translation</a></p></li>
57+<li><p><a class="reference internal" href="#documentation" id="id7">Documentation</a></p>
58+<ul>
59+<li><p><a class="reference internal" href="#live-build" id="id8">live build</a></p></li>
60+<li><p><a class="reference internal" href="#deploy-on-github-io" id="id9">deploy on github.io</a></p></li>
61+</ul>
62+</li>
63+</ul>
64+</div>
4765<div class="section" id="prime-directives-privacy-hackability">
48−<h2>Prime directives: Privacy, Hackability<a class="headerlink" href="#prime-directives-privacy-hackability" title="Permalink to this headline">¶</a></h2>
66+<h2><a class="toc-backref" href="#id3">Prime directives: Privacy, Hackability</a><a class="headerlink" href="#prime-directives-privacy-hackability" title="Permalink to this headline">¶</a></h2>
4967<p>Searx has two prime directives, <strong>privacy-by-design and hackability</strong> . The
5068hackability comes in three levels:</p>
5169<ul class="simple">
@@ -57,7 +75,7 @@ hackability comes in three levels:</p>
5775intention of wide mass-adoption, rounded corners, etc. The prime directive
5876“privacy” deserves a separate chapter, as it’s quite uncommon unfortunately.</p>
5977<div class="section" id="privacy-by-design">
60−<h3>Privacy-by-design<a class="headerlink" href="#privacy-by-design" title="Permalink to this headline">¶</a></h3>
78+<h3><a class="toc-backref" href="#id4">Privacy-by-design</a><a class="headerlink" href="#privacy-by-design" title="Permalink to this headline">¶</a></h3>
6179<p>Searx was born out of the need for a <strong>privacy-respecting</strong> search tool which
6280can be extended easily to maximize both, its search and its privacy protecting
6381capabilities.</p>
@@ -82,7 +100,7 @@ privacy concerns do not fancy you, simply fork it.</p>
82100</div>
83101</div>
84102<div class="section" id="code">
85−<h2>Code<a class="headerlink" href="#code" title="Permalink to this headline">¶</a></h2>
103+<h2><a class="toc-backref" href="#id5">Code</a><a class="headerlink" href="#code" title="Permalink to this headline">¶</a></h2>
86104<div class="sidebar">
87105<p class="sidebar-title">Create good commits!</p>
88106<ul class="simple">
@@ -121,7 +139,7 @@ code.</p></li>
121139<p>For more help on getting started with searx development, see <a class="reference internal" href="quickstart.html#devquickstart"><span class="std std-ref">Development Quickstart</span></a>.</p>
122140</div>
123141<div class="section" id="translation">
124−<h2>Translation<a class="headerlink" href="#translation" title="Permalink to this headline">¶</a></h2>
142+<h2><a class="toc-backref" href="#id6">Translation</a><a class="headerlink" href="#translation" title="Permalink to this headline">¶</a></h2>
125143<p>Translation currently takes place on <a class="reference internal" href="translation.html#translation"><span class="std std-ref">transifex</span></a>.</p>
126144<div class="admonition caution">
127145<p class="admonition-title">Caution</p>
@@ -129,7 +147,7 @@ code.</p></li>
129147</div>
130148</div>
131149<div class="section" id="documentation">
132−<span id="contrib-docs"></span><h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
150+<span id="contrib-docs"></span><h2><a class="toc-backref" href="#id7">Documentation</a><a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
133151<div class="sidebar">
134152<p class="sidebar-title">The reST sources</p>
135153<p>has been moved from <code class="docutils literal notranslate"><span class="pre">gh-branch</span></code> into <code class="docutils literal notranslate"><span class="pre">master</span></code> (<a class="reference external" href="https://github.com/asciimoo/searx/blob/master/docs">git://docs</a>).</p>
@@ -144,7 +162,7 @@ The HTML pages are in dist/docs.
144162</pre></div>
145163</div>
146164<div class="section" id="live-build">
147−<span id="make-docs-live"></span><h3>live build<a class="headerlink" href="#live-build" title="Permalink to this headline">¶</a></h3>
165+<span id="make-docs-live"></span><h3><a class="toc-backref" href="#id8">live build</a><a class="headerlink" href="#live-build" title="Permalink to this headline">¶</a></h3>
148166<div class="sidebar">
149167<p class="sidebar-title">docs-clean</p>
150168<p>It is recommended to assert a complete rebuild before deploying (use
@@ -163,7 +181,7 @@ The HTML pages are in dist/docs.
163181</div>
164182</div>
165183<div class="section" id="deploy-on-github-io">
166−<span id="id2"></span><h3>deploy on github.io<a class="headerlink" href="#deploy-on-github-io" title="Permalink to this headline">¶</a></h3>
184+<span id="id2"></span><h3><a class="toc-backref" href="#id9">deploy on github.io</a><a class="headerlink" href="#deploy-on-github-io" title="Permalink to this headline">¶</a></h3>
167185<p>To deploy documentation at <a class="reference external" href="https://asciimoo.github.io/searx/.">github.io</a> use Makefile target
168186<a class="reference internal" href="makefile.html#make-gh-pages"><span class="std std-ref">make gh-pages</span></a>, which will builds the documentation, clones searx into a sub
169187folder <code class="docutils literal notranslate"><span class="pre">gh-pages</span></code>, cleans it, copies the doc build into and runs all the
@@ -237,7 +255,7 @@ doc available at --&gt; https://asciimoo.github.io/searx
237255
238256 <div class="footer" role="contentinfo">
239257 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
240− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
258+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
241259 </div>
242260 <script src="../_static/version_warning_offset.js"></script>
243261
dev/engine_overview.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -630,7 +630,7 @@ time of publish <em>(not implemented yet)</em></p></td>
630630
631631 <div class="footer" role="contentinfo">
632632 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
633− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
633+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
634634 </div>
635635 <script src="../_static/version_warning_offset.js"></script>
636636
dev/index.html+68−10
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,15 +44,73 @@
4444 <div class="section" id="developer-documentation">
4545<h1>Developer documentation<a class="headerlink" href="#developer-documentation" title="Permalink to this headline">¶</a></h1>
4646<div class="toctree-wrapper compound">
47+<p class="caption"><span class="caption-text">Contents</span></p>
4748<ul>
48−<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Development Quickstart</a></li>
49−<li class="toctree-l1"><a class="reference internal" href="contribution_guide.html">How to contribute</a></li>
50−<li class="toctree-l1"><a class="reference internal" href="engine_overview.html">Engine overview</a></li>
51−<li class="toctree-l1"><a class="reference internal" href="search_api.html">Search API</a></li>
52−<li class="toctree-l1"><a class="reference internal" href="plugins.html">Plugins</a></li>
53−<li class="toctree-l1"><a class="reference internal" href="translation.html">Translation</a></li>
54−<li class="toctree-l1"><a class="reference internal" href="makefile.html">Makefile Targets</a></li>
55−<li class="toctree-l1"><a class="reference internal" href="reST.html">reST primer</a></li>
49+<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Development Quickstart</a><ul>
50+<li class="toctree-l2"><a class="reference internal" href="quickstart.html#how-to-setup-your-development-environment">How to setup your development environment</a></li>
51+<li class="toctree-l2"><a class="reference internal" href="quickstart.html#how-to-run-tests">How to run tests</a></li>
52+<li class="toctree-l2"><a class="reference internal" href="quickstart.html#how-to-compile-styles-and-javascript">How to compile styles and javascript</a></li>
53+<li class="toctree-l2"><a class="reference internal" href="quickstart.html#how-to-build-the-source-of-the-themes">How to build the source of the themes</a></li>
54+<li class="toctree-l2"><a class="reference internal" href="quickstart.html#tips-for-debugging-development">Tips for debugging/development</a></li>
55+</ul>
56+</li>
57+<li class="toctree-l1"><a class="reference internal" href="contribution_guide.html">How to contribute</a><ul>
58+<li class="toctree-l2"><a class="reference internal" href="contribution_guide.html#prime-directives-privacy-hackability">Prime directives: Privacy, Hackability</a></li>
59+<li class="toctree-l2"><a class="reference internal" href="contribution_guide.html#code">Code</a></li>
60+<li class="toctree-l2"><a class="reference internal" href="contribution_guide.html#translation">Translation</a></li>
61+<li class="toctree-l2"><a class="reference internal" href="contribution_guide.html#documentation">Documentation</a></li>
62+</ul>
63+</li>
64+<li class="toctree-l1"><a class="reference internal" href="engine_overview.html">Engine overview</a><ul>
65+<li class="toctree-l2"><a class="reference internal" href="engine_overview.html#general-engine-configuration">general engine configuration</a></li>
66+<li class="toctree-l2"><a class="reference internal" href="engine_overview.html#making-a-request">making a request</a></li>
67+<li class="toctree-l2"><a class="reference internal" href="engine_overview.html#returned-results">returned results</a></li>
68+</ul>
69+</li>
70+<li class="toctree-l1"><a class="reference internal" href="search_api.html">Search API</a><ul>
71+<li class="toctree-l2"><a class="reference internal" href="search_api.html#parameters">Parameters</a></li>
72+</ul>
73+</li>
74+<li class="toctree-l1"><a class="reference internal" href="plugins.html">Plugins</a><ul>
75+<li class="toctree-l2"><a class="reference internal" href="plugins.html#example-plugin">Example plugin</a></li>
76+<li class="toctree-l2"><a class="reference internal" href="plugins.html#plugin-entry-points">Plugin entry points</a></li>
77+</ul>
78+</li>
79+<li class="toctree-l1"><a class="reference internal" href="translation.html">Translation</a><ul>
80+<li class="toctree-l2"><a class="reference internal" href="translation.html#requirements">Requirements</a></li>
81+<li class="toctree-l2"><a class="reference internal" href="translation.html#init-transifex-project">Init Transifex project</a></li>
82+<li class="toctree-l2"><a class="reference internal" href="translation.html#update-translations">Update translations</a></li>
83+</ul>
84+</li>
85+<li class="toctree-l1"><a class="reference internal" href="makefile.html">Makefile Targets</a><ul>
86+<li class="toctree-l2"><a class="reference internal" href="makefile.html#makefile-setup">Makefile setup</a></li>
87+<li class="toctree-l2"><a class="reference internal" href="makefile.html#python-environment">Python environment</a></li>
88+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-run"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code></a></li>
89+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-clean"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">clean</span></code></a></li>
90+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-docs-docs-live-docs-clean"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span> <span class="pre">docs-live</span> <span class="pre">docs-clean</span></code></a></li>
91+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-gh-pages"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">gh-pages</span></code></a></li>
92+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-test"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code></a></li>
93+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-pylint"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pylint</span></code></a></li>
94+<li class="toctree-l2"><a class="reference internal" href="makefile.html#make-pybuild"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pybuild</span></code></a></li>
95+</ul>
96+</li>
97+<li class="toctree-l1"><a class="reference internal" href="reST.html">reST primer</a><ul>
98+<li class="toctree-l2"><a class="reference internal" href="reST.html#soft-skills">Soft skills</a></li>
99+<li class="toctree-l2"><a class="reference internal" href="reST.html#basic-inline-markup">Basic inline markup</a></li>
100+<li class="toctree-l2"><a class="reference internal" href="reST.html#basic-article-structure">Basic article structure</a></li>
101+<li class="toctree-l2"><a class="reference internal" href="reST.html#anchors-links">Anchors &amp; Links</a></li>
102+<li class="toctree-l2"><a class="reference internal" href="reST.html#literal-blocks">Literal blocks</a></li>
103+<li class="toctree-l2"><a class="reference internal" href="reST.html#unicode-substitution">Unicode substitution</a></li>
104+<li class="toctree-l2"><a class="reference internal" href="reST.html#roles">Roles</a></li>
105+<li class="toctree-l2"><a class="reference internal" href="reST.html#figures-images">Figures &amp; Images</a></li>
106+<li class="toctree-l2"><a class="reference internal" href="reST.html#list-markups">List markups</a></li>
107+<li class="toctree-l2"><a class="reference internal" href="reST.html#admonitions">Admonitions</a></li>
108+<li class="toctree-l2"><a class="reference internal" href="reST.html#tables">Tables</a></li>
109+<li class="toctree-l2"><a class="reference internal" href="reST.html#templating">Templating</a></li>
110+<li class="toctree-l2"><a class="reference internal" href="reST.html#tabbed-views">Tabbed views</a></li>
111+<li class="toctree-l2"><a class="reference internal" href="reST.html#math-equations">Math equations</a></li>
112+</ul>
113+</li>
56114</ul>
57115</div>
58116</div>
@@ -106,7 +164,7 @@
106164
107165 <div class="footer" role="contentinfo">
108166 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
109− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
167+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
110168 </div>
111169 <script src="../_static/version_warning_offset.js"></script>
112170
dev/makefile.html+62−37
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -46,16 +46,16 @@
4646<span id="makefile"></span><h1>Makefile Targets<a class="headerlink" href="#makefile-targets" title="Permalink to this headline">¶</a></h1>
4747<div class="sidebar">
4848<p class="sidebar-title">build environment</p>
49−<p>Before looking deeper at the targets, first read about <a class="reference internal" href="#makefile-setup"><span class="std std-ref">Setup</span></a>
49+<p>Before looking deeper at the targets, first read about <a class="reference internal" href="#makefile-setup"><span class="std std-ref">Makefile setup</span></a>
5050and <a class="reference internal" href="#make-pyenv"><span class="std std-ref">Python environment</span></a>.</p>
51+<p>To install system requirements follow <a class="reference internal" href="../admin/buildhosts.html#buildhosts"><span class="std std-ref">Buildhosts</span></a>.</p>
5152</div>
5253<p>With the aim to simplify development cycles, started with <a class="reference external" href="https://github.com/asciimoo/searx/pull/1756">PR 1756</a> a
5354<code class="docutils literal notranslate"><span class="pre">Makefile</span></code> based boilerplate was added. If you are not familiar with
5455Makefiles, we recommend to read <a class="reference external" href="https://www.gnu.org/software/make/manual/make.html#Introduction">gnu-make</a> introduction.</p>
5556<p>The usage is simple, just type <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">{target-name}</span></code> to <em>build</em> a target.
56−Calling the <code class="docutils literal notranslate"><span class="pre">help</span></code> target gives a first overview:</p>
57−<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ make help
58− test - run developer tests
57+Calling the <code class="docutils literal notranslate"><span class="pre">help</span></code> target gives a first overview (<code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">help</span></code>):</p>
58+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span> test - run developer tests
5959 docs - build documentation
6060 docs-live - autobuild HTML documentation while editing
6161 run - run developer instance
@@ -63,50 +63,75 @@ Calling the <code class="docutils literal notranslate"><span class="pre">help</s
6363 uninstall - uninstall (./local)
6464 gh-pages - build docs &amp; deploy on gh-pages branch
6565 clean - drop builds and environments
66− ...
66+ project - re-build generic files of the searx project
67+ buildenv - re-build environment files (aka brand)
68+ themes - re-build build the source of the themes
69+ docker - build Docker image
70+ node.env - download &amp; install npm dependencies locally
71+
72+environment
73+ SEARX_URL = https://searx.me
74+ GIT_URL = https://github.com/asciimoo/searx
75+ DOCS_URL = https://asciimoo.github.io/searx
76+
77+ make V=0|1 [targets] 0 =&gt; quiet build (default), 1 =&gt; verbose build
78+ make V=2 [targets] 2 =&gt; give reason for rebuild of target
79+
80+to get more help: make help-all
6781</pre></div>
6882</div>
6983<div class="contents local topic" id="contents">
7084<p class="topic-title">Contents</p>
7185<ul class="simple">
72−<li><p><a class="reference internal" href="#setup" id="id6">Setup</a></p></li>
73−<li><p><a class="reference internal" href="#python-environment" id="id7">Python environment</a></p></li>
74−<li><p><a class="reference internal" href="#make-run" id="id8"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code></a></p></li>
75−<li><p><a class="reference internal" href="#make-clean" id="id9"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">clean</span></code></a></p></li>
76−<li><p><a class="reference internal" href="#make-docs-docs-live-docs-clean" id="id10"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span> <span class="pre">docs-live</span> <span class="pre">docs-clean</span></code></a></p></li>
77−<li><p><a class="reference internal" href="#make-gh-pages" id="id11"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">gh-pages</span></code></a></p></li>
78−<li><p><a class="reference internal" href="#make-test" id="id12"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code></a></p></li>
79−<li><p><a class="reference internal" href="#make-pylint" id="id13"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pylint</span></code></a></p></li>
80−<li><p><a class="reference internal" href="#make-pybuild" id="id14"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pybuild</span></code></a></p></li>
86+<li><p><a class="reference internal" href="#makefile-setup" id="id7">Makefile setup</a></p></li>
87+<li><p><a class="reference internal" href="#python-environment" id="id8">Python environment</a></p></li>
88+<li><p><a class="reference internal" href="#make-run" id="id9"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code></a></p></li>
89+<li><p><a class="reference internal" href="#make-clean" id="id10"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">clean</span></code></a></p></li>
90+<li><p><a class="reference internal" href="#make-docs-docs-live-docs-clean" id="id11"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span> <span class="pre">docs-live</span> <span class="pre">docs-clean</span></code></a></p></li>
91+<li><p><a class="reference internal" href="#make-gh-pages" id="id12"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">gh-pages</span></code></a></p></li>
92+<li><p><a class="reference internal" href="#make-test" id="id13"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code></a></p></li>
93+<li><p><a class="reference internal" href="#make-pylint" id="id14"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pylint</span></code></a></p></li>
94+<li><p><a class="reference internal" href="#make-pybuild" id="id15"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pybuild</span></code></a></p></li>
8195</ul>
8296</div>
83−<div class="section" id="setup">
84−<span id="makefile-setup"></span><h2><a class="toc-backref" href="#id6">Setup</a><a class="headerlink" href="#setup" title="Permalink to this headline">¶</a></h2>
85−<p>The main setup is done in the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/Makefile">git://Makefile</a>:</p>
86−<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>export GIT_URL=https://github.com/asciimoo/searx
87−export SEARX_URL=https://searx.me
88−export DOCS_URL=https://asciimoo.github.io/searx
89−</pre></div>
90−</div>
97+<div class="section" id="makefile-setup">
98+<span id="id1"></span><h2><a class="toc-backref" href="#id7">Makefile setup</a><a class="headerlink" href="#makefile-setup" title="Permalink to this headline">¶</a></h2>
9199<div class="sidebar">
92100<p class="sidebar-title">fork &amp; upstream</p>
93101<p>Commit changes in your (local) branch, fork or whatever, but do not push them
94102upstream / <a class="reference external" href="https://git-scm.com/docs/git-stash">git stash</a> is your friend.</p>
95103</div>
104+<p>The main setup is done in the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/Makefile">git://Makefile</a>.</p>
105+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>export GIT_URL=https://github.com/asciimoo/searx
106+export GIT_BRANCH=master
107+export SEARX_URL=https://searx.me
108+export DOCS_URL=https://asciimoo.github.io/searx
109+</pre></div>
110+</div>
96111<dl class="field-list simple">
97112<dt class="field-odd">GIT_URL</dt>
98113<dd class="field-odd"><p>Changes this, to point to your searx fork.</p>
99114</dd>
100−<dt class="field-even">SEARX_URL</dt>
101−<dd class="field-even"><p>Changes this, to point to your searx instance.</p>
115+<dt class="field-even">GIT_BRANCH</dt>
116+<dd class="field-even"><p>Changes this, to point to your searx branch.</p>
117+</dd>
118+<dt class="field-odd">SEARX_URL</dt>
119+<dd class="field-odd"><p>Changes this, to point to your searx instance.</p>
102120</dd>
103−<dt class="field-odd">DOCS_URL</dt>
104−<dd class="field-odd"><p>If you host your own (branded) documentation, change this URL.</p>
121+<dt class="field-even">DOCS_URL</dt>
122+<dd class="field-even"><p>If you host your own (<em>brand</em>) documentation, change this URL.</p>
105123</dd>
106124</dl>
125+<p>If you change any of this build environment variables, you have to run <code class="docutils literal notranslate"><span class="pre">make</span>
126+<span class="pre">buildenv</span></code>:</p>
127+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ make buildenv
128+build searx/brand.py
129+build utils/brand.env
130+</pre></div>
131+</div>
107132</div>
108133<div class="section" id="python-environment">
109−<span id="make-pyenv"></span><h2><a class="toc-backref" href="#id7">Python environment</a><a class="headerlink" href="#python-environment" title="Permalink to this headline">¶</a></h2>
134+<span id="make-pyenv"></span><h2><a class="toc-backref" href="#id8">Python environment</a><a class="headerlink" href="#python-environment" title="Permalink to this headline">¶</a></h2>
110135<div class="sidebar">
111136<p class="sidebar-title">activate environment</p>
112137<p><code class="docutils literal notranslate"><span class="pre">source</span> <span class="pre">./local/py3/bin/activate</span></code></p>
@@ -142,7 +167,7 @@ the <a class="reference external" href="https://github.com/asciimoo/searx/blob/m
142167<a class="reference internal" href="#make-clean"><span class="std std-ref">make clean</span></a>.</p>
143168</div>
144169<div class="section" id="make-run">
145−<span id="id1"></span><h2><a class="toc-backref" href="#id8"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code></a><a class="headerlink" href="#make-run" title="Permalink to this headline">¶</a></h2>
170+<span id="id2"></span><h2><a class="toc-backref" href="#id9"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code></a><a class="headerlink" href="#make-run" title="Permalink to this headline">¶</a></h2>
146171<p>To get up a running a developer instance simply call <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">run</span></code>. This enables
147172<em>debug</em> option in <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/searx/settings.yml">git://searx/settings.yml</a>, starts a <code class="docutils literal notranslate"><span class="pre">./searx/webapp.py</span></code>
148173instance, disables <em>debug</em> option again and opens the URL in your favorite WEB
@@ -158,7 +183,7 @@ INFO:werkzeug: * Running on http://127.0.0.1:8888/ <span class="o">(</span>Press
158183</div>
159184</div>
160185<div class="section" id="make-clean">
161−<span id="id2"></span><h2><a class="toc-backref" href="#id9"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">clean</span></code></a><a class="headerlink" href="#make-clean" title="Permalink to this headline">¶</a></h2>
186+<span id="id3"></span><h2><a class="toc-backref" href="#id10"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">clean</span></code></a><a class="headerlink" href="#make-clean" title="Permalink to this headline">¶</a></h2>
162187<p>Drop all intermediate files, all builds, but keep sources untouched. Includes
163188target <code class="docutils literal notranslate"><span class="pre">pyclean</span></code> which drops ./local environment. Before calling <code class="docutils literal notranslate"><span class="pre">make</span>
164189<span class="pre">clean</span></code> stop all processes using <a class="reference internal" href="#make-pyenv"><span class="std std-ref">Python environment</span></a>.</p>
@@ -169,22 +194,22 @@ CLEAN clean
169194</div>
170195</div>
171196<div class="section" id="make-docs-docs-live-docs-clean">
172−<span id="make-docs"></span><h2><a class="toc-backref" href="#id10"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span> <span class="pre">docs-live</span> <span class="pre">docs-clean</span></code></a><a class="headerlink" href="#make-docs-docs-live-docs-clean" title="Permalink to this headline">¶</a></h2>
197+<span id="make-docs"></span><h2><a class="toc-backref" href="#id11"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span> <span class="pre">docs-live</span> <span class="pre">docs-clean</span></code></a><a class="headerlink" href="#make-docs-docs-live-docs-clean" title="Permalink to this headline">¶</a></h2>
173198<p>We describe the usage of the <code class="docutils literal notranslate"><span class="pre">doc*</span></code> targets in the <a class="reference internal" href="contribution_guide.html#contrib-docs"><span class="std std-ref">How to contribute /
174199Documentation</span></a> section. If you want to edit the documentation
175200read our <a class="reference internal" href="contribution_guide.html#make-docs-live"><span class="std std-ref">live build</span></a> section. If you are working in your own brand,
176201adjust your <a class="reference internal" href="#makefile-setup"><span class="std std-ref">Makefile setup</span></a>.</p>
177202</div>
178203<div class="section" id="make-gh-pages">
179−<span id="id3"></span><h2><a class="toc-backref" href="#id11"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">gh-pages</span></code></a><a class="headerlink" href="#make-gh-pages" title="Permalink to this headline">¶</a></h2>
204+<span id="id4"></span><h2><a class="toc-backref" href="#id12"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">gh-pages</span></code></a><a class="headerlink" href="#make-gh-pages" title="Permalink to this headline">¶</a></h2>
180205<p>To deploy on github.io first adjust your <a class="reference internal" href="#makefile-setup"><span class="std std-ref">Makefile setup</span></a>. For any further read <a class="reference internal" href="contribution_guide.html#deploy-on-github-io"><span class="std std-ref">deploy on github.io</span></a>.</p>
181206</div>
182207<div class="section" id="make-test">
183−<span id="id4"></span><h2><a class="toc-backref" href="#id12"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code></a><a class="headerlink" href="#make-test" title="Permalink to this headline">¶</a></h2>
208+<span id="id5"></span><h2><a class="toc-backref" href="#id13"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code></a><a class="headerlink" href="#make-test" title="Permalink to this headline">¶</a></h2>
184209<p>Runs a series of tests: <code class="docutils literal notranslate"><span class="pre">test.pep8</span></code>, <code class="docutils literal notranslate"><span class="pre">test.unit</span></code>, <code class="docutils literal notranslate"><span class="pre">test.robot</span></code> and does
185210additional <a class="reference internal" href="#make-pylint"><span class="std std-ref">pylint checks</span></a>. You can run tests selective,
186211e.g.:</p>
187−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ make test.pep8 test.unit
212+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ make test.pep8 test.unit test.sh
188213. ./local/py3/bin/activate<span class="p">;</span> ./manage.sh pep8_check
189214<span class="o">[</span>!<span class="o">]</span> Running pep8 check
190215. ./local/py3/bin/activate<span class="p">;</span> ./manage.sh unit_tests
@@ -193,7 +218,7 @@ e.g.:</p>
193218</div>
194219</div>
195220<div class="section" id="make-pylint">
196−<span id="id5"></span><h2><a class="toc-backref" href="#id13"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pylint</span></code></a><a class="headerlink" href="#make-pylint" title="Permalink to this headline">¶</a></h2>
221+<span id="id6"></span><h2><a class="toc-backref" href="#id14"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pylint</span></code></a><a class="headerlink" href="#make-pylint" title="Permalink to this headline">¶</a></h2>
197222<p>Before commiting its recommend to do some (more) linting. <a class="reference external" href="https://www.pylint.org/">Pylint</a> is known as
198223one of the best source-code, bug and quality checker for the Python programming
199224language. <a class="reference external" href="https://www.pylint.org/">Pylint</a> is not yet a quality gate within our searx project (like
@@ -207,7 +232,7 @@ day, the linting is balanced out, we might decide to add Pylint as a quality
207232gate.</p>
208233</div>
209234<div class="section" id="make-pybuild">
210−<h2><a class="toc-backref" href="#id14"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pybuild</span></code></a><a class="headerlink" href="#make-pybuild" title="Permalink to this headline">¶</a></h2>
235+<h2><a class="toc-backref" href="#id15"><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">pybuild</span></code></a><a class="headerlink" href="#make-pybuild" title="Permalink to this headline">¶</a></h2>
211236<p>Build Python packages in <code class="docutils literal notranslate"><span class="pre">./dist/py</span></code>.</p>
212237<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ make pybuild
213238...
@@ -277,7 +302,7 @@ never need the latter.</p>
277302
278303 <div class="footer" role="contentinfo">
279304 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
280− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
305+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
281306 </div>
282307 <script src="../_static/version_warning_offset.js"></script>
283308
dev/plugins.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -143,7 +143,7 @@ plugin.</p>
143143
144144 <div class="footer" role="contentinfo">
145145 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
146− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
146+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
147147 </div>
148148 <script src="../_static/version_warning_offset.js"></script>
149149
dev/quickstart.html+7−7
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -62,7 +62,7 @@ searx-ve virtualenv and install the required packages using <code class="docutil
6262<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> ~/myprojects
6363git clone https://github.com/asciimoo/searx.git
6464<span class="nb">cd</span> searx
65−virtualenv searx-ve
65+python3 -m venv searx-ve
6666. ./searx-ve/bin/activate
6767./manage.sh update_dev_packages
6868</pre></div>
@@ -109,16 +109,16 @@ sudo -H npm install -g less
109109</div>
110110</div>
111111</div>
112−<div class="section" id="how-to-build-the-source-of-the-oscar-theme">
113−<h2>How to build the source of the oscar theme<a class="headerlink" href="#how-to-build-the-source-of-the-oscar-theme" title="Permalink to this headline">¶</a></h2>
112+<div class="section" id="how-to-build-the-source-of-the-themes">
113+<h2>How to build the source of the themes<a class="headerlink" href="#how-to-build-the-source-of-the-themes" title="Permalink to this headline">¶</a></h2>
114114<p><a class="reference external" href="https://gruntjs.com/">Grunt</a> must be installed in order to build the javascript sources. It depends on
115115NodeJS, so first Node has to be installed.</p>
116116<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>sudo -H apt-get install nodejs
117−sudo -H npm install -g grunt-cli
117+make node.env
118118</pre></div>
119119</div>
120120<p>After installing grunt, the files can be built using the following command:</p>
121−<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>./manage.sh grunt_build
121+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>make themes
122122</pre></div>
123123</div>
124124</div>
@@ -202,7 +202,7 @@ must be created containing these format fixes. This phase can be skipped if
202202
203203 <div class="footer" role="contentinfo">
204204 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
205− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
205+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
206206 </div>
207207 <script src="../_static/version_warning_offset.js"></script>
208208
dev/reST.html+30−55
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -15,7 +15,7 @@
1515 <script src="../_static/language_data.js"></script>
1616 <link rel="index" title="Index" href="../genindex.html" />
1717 <link rel="search" title="Search" href="../search.html" />
18− <link rel="next" title="Blog" href="../blog/index.html" />
18+ <link rel="next" title="Tooling box utils/*" href="../utils/index.html" />
1919 <link rel="prev" title="Makefile Targets" href="makefile.html" />
2020 <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
2121
@@ -27,7 +27,7 @@
2727 <a href="../genindex.html" title="General Index"
2828 accesskey="I">index</a></li>
2929 <li class="right" >
30− <a href="../blog/index.html" title="Blog"
30+ <a href="../utils/index.html" title="Tooling box utils/*"
3131 accesskey="N">next</a> |</li>
3232 <li class="right" >
3333 <a href="makefile.html" title="Makefile Targets"
@@ -365,11 +365,11 @@ content becomes smart.</p>
365365</tr>
366366</thead>
367367<tbody>
368−<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-rfc" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">rfc</span></code></a></p></td>
368+<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-rfc" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">rfc</span></code></a></p></td>
369369<td><p><span class="target" id="index-0"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc822.html"><strong>RFC 822</strong></a></p></td>
370370<td><p><code class="docutils literal notranslate"><span class="pre">:rfc:`822`</span></code></p></td>
371371</tr>
372−<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-pep" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">pep</span></code></a></p></td>
372+<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-pep" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">pep</span></code></a></p></td>
373373<td><p><span class="target" id="index-1"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0008"><strong>PEP 8</strong></a></p></td>
374374<td><p><code class="docutils literal notranslate"><span class="pre">:pep:`8`</span></code></p></td>
375375</tr>
@@ -443,7 +443,7 @@ content becomes smart.</p>
443443<h2><a class="toc-backref" href="#id24">Literal blocks</a><a class="headerlink" href="#literal-blocks" title="Permalink to this headline">¶</a></h2>
444444<p>The simplest form of <a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#literal-blocks">literal-blocks</a> is a indented block introduced by
445445two colons (<code class="docutils literal notranslate"><span class="pre">::</span></code>). For highlighting use <a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/directives.html#highlight">highlight</a> or <a class="reference internal" href="#rest-code"><span class="std std-ref">code-block</span></a> directive. To include literals from external files use directive
446−<a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/directives.html#literalinclude">literalinclude</a>.</p>
446+<a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-literalinclude" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">literalinclude</span></code></a>.</p>
447447<div class="section" id="rest-literal">
448448<span id="id3"></span><h3><a class="toc-backref" href="#id25"><code class="docutils literal notranslate"><span class="pre">::</span></code></a><a class="headerlink" href="#rest-literal" title="Permalink to this headline">¶</a></h3>
449449<div class="highlight-reST notranslate"><div class="highlight"><pre><span></span><span class="se">::</span>
@@ -482,9 +482,9 @@ eirmod tempor invidunt ut labore</p>
482482<p class="sidebar-title">Syntax highlighting</p>
483483<p>is handled by <a class="reference external" href="https://pygments.org/languages/">pygments</a>.</p>
484484</div>
485−<p>The <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">code-block</span></code></a> directive is a variant of the <a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/directives.html#code">code</a> directive
485+<p>The <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">code-block</span></code></a> directive is a variant of the <a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/directives.html#code">code</a> directive
486486with additional options. To learn more about code literals visit
487−<a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#code-examples" title="(in Sphinx v4.0.0+/b1400ac42)"><span>Showing code examples</span></a>.</p>
487+<a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#code-examples" title="(in Sphinx v4.0.0+/adad0e62b)"><span>Showing code examples</span></a>.</p>
488488<div class="highlight-reST notranslate"><div class="highlight"><pre><span></span>The URL <span class="s">``/stats``</span> handle is shown in <span class="na">:ref:</span><span class="nv">`stats-handle`</span>
489489
490490<span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> Python
@@ -507,7 +507,7 @@ with additional options. To learn more about code literals visit
507507<p class="admonition-title">Code block</p>
508508<p>The URL <code class="docutils literal notranslate"><span class="pre">/stats</span></code> handle is shown in <a class="reference internal" href="#stats-handle"><span class="std std-ref">python code block</span></a></p>
509509<div class="literal-block-wrapper docutils container" id="stats-handle">
510−<div class="code-block-caption"><span class="caption-number">Listing 2 </span><span class="caption-text">python code block</span><a class="headerlink" href="#stats-handle" title="Permalink to this code">¶</a></div>
510+<div class="code-block-caption"><span class="caption-number">Listing 1 </span><span class="caption-text">python code block</span><a class="headerlink" href="#stats-handle" title="Permalink to this code">¶</a></div>
511511<div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@app.route</span><span class="p">(</span><span class="s1">&#39;/stats&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;GET&#39;</span><span class="p">])</span>
512512<span class="k">def</span> <span class="nf">stats</span><span class="p">():</span>
513513 <span class="sd">&quot;&quot;&quot;Render engine statistics page.&quot;&quot;&quot;</span>
@@ -543,7 +543,7 @@ Trademark |(TM)| and copyright |copy| glyphs.
543543<p class="sidebar-title">Further reading</p>
544544<ul class="simple">
545545<li><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html">Sphinx Roles</a></p></li>
546−<li><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html" title="(in Sphinx v4.0.0+/b1400ac42)"><span>Domains</span></a></p></li>
546+<li><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html" title="(in Sphinx v4.0.0+/adad0e62b)"><span>Domains</span></a></p></li>
547547</ul>
548548</div>
549549<p>A <em>custom interpreted text role</em> (<a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#roles">ref</a>) is an inline piece of
@@ -568,31 +568,31 @@ in a specific way.</p>
568568</tr>
569569</thead>
570570<tbody>
571−<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-guilabel" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">guilabel</span></code></a></p></td>
571+<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-guilabel" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">guilabel</span></code></a></p></td>
572572<td><p><span class="guilabel"><span class="accelerator">C</span>ancel</span></p></td>
573573<td><p><code class="docutils literal notranslate"><span class="pre">:guilabel:`&amp;Cancel`</span></code></p></td>
574574</tr>
575−<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-kbd" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">kbd</span></code></a></p></td>
575+<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-kbd" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">kbd</span></code></a></p></td>
576576<td><p><kbd class="kbd docutils literal notranslate">C-x C-f</kbd></p></td>
577577<td><p><code class="docutils literal notranslate"><span class="pre">:kbd:`C-x</span> <span class="pre">C-f`</span></code></p></td>
578578</tr>
579−<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-menuselection" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">menuselection</span></code></a></p></td>
579+<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-menuselection" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">menuselection</span></code></a></p></td>
580580<td><p><span class="menuselection">Open ‣ File</span></p></td>
581581<td><p><code class="docutils literal notranslate"><span class="pre">:menuselection:`Open</span> <span class="pre">--&gt;</span> <span class="pre">File`</span></code></p></td>
582582</tr>
583−<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-download" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">download</span></code></a></p></td>
583+<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-download" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">download</span></code></a></p></td>
584584<td><p><a class="reference download internal" download="" href="../_downloads/ad0ebe55d6b53b1559e0ca8dee6f30b9/reST.rst"><code class="xref download docutils literal notranslate"><span class="pre">this</span> <span class="pre">file</span></code></a></p></td>
585585<td><p><code class="docutils literal notranslate"><span class="pre">:download:`this</span> <span class="pre">file</span> <span class="pre">&lt;reST.rst&gt;`</span></code></p></td>
586586</tr>
587587<tr class="row-even"><td><p><a class="reference internal" href="#math">math</a></p></td>
588−<td><p><span class="math">a^2 + b^2 = c^2</span></p></td>
588+<td><p><img class="math" src="../_images/math/6673b43f9fe29455c1fcd1164e5844698cc64d38.svg" alt="a^2 + b^2 = c^2"/></p></td>
589589<td><p><code class="docutils literal notranslate"><span class="pre">:math:`a^2</span> <span class="pre">+</span> <span class="pre">b^2</span> <span class="pre">=</span> <span class="pre">c^2`</span></code></p></td>
590590</tr>
591−<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">ref</span></code></a></p></td>
591+<tr class="row-odd"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">ref</span></code></a></p></td>
592592<td><p><a class="reference internal" href="#svg-image-example"><span class="std std-ref">Simple SVG image.</span></a></p></td>
593593<td><p><code class="docutils literal notranslate"><span class="pre">:ref:`svg</span> <span class="pre">image</span> <span class="pre">example`</span></code></p></td>
594594</tr>
595−<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-command" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">command</span></code></a></p></td>
595+<tr class="row-even"><td><p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-command" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">command</span></code></a></p></td>
596596<td><p><strong class="command">ls -la</strong></p></td>
597597<td><p><code class="docutils literal notranslate"><span class="pre">:command:`ls</span> <span class="pre">-la`</span></code></p></td>
598598</tr>
@@ -784,7 +784,7 @@ item uses two lines.</p></li>
784784</div>
785785<div class="section" id="horizontal-list">
786786<h3><a class="toc-backref" href="#id35">Horizontal list</a><a class="headerlink" href="#horizontal-list" title="Permalink to this headline">¶</a></h3>
787−<p>The <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-hlist" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">..</span> <span class="pre">hlist::</span></code></a> transforms a bullet list into a more compact
787+<p>The <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-hlist" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">..</span> <span class="pre">hlist::</span></code></a> transforms a bullet list into a more compact
788788list.</p>
789789<div class="highlight-reST notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">hlist</span><span class="p">::</span>
790790
@@ -1465,44 +1465,19 @@ others are <a class="reference external" href="https://github.com/djungelorm/sph
14651465
14661466<span class="p"> ..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">sh</span>
14671467
1468− $ sudo apt install graphviz imagemagick texlive-xetex librsvg2-bin
1468+ $ sudo apt install shellcheck
14691469
14701470<span class="p"> ..</span> <span class="ow">group-tab</span><span class="p">::</span> Arch Linux
14711471
14721472<span class="p"> ..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">sh</span>
14731473
1474− $ sudo pacman -S graphviz imagemagick texlive-bin extra/librsvg
1474+ $ sudo pacman -S shellcheck
14751475
14761476<span class="p"> ..</span> <span class="ow">group-tab</span><span class="p">::</span> Fedora / RHEL
14771477
1478−<span class="p"> ..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">sh</span>
1479−
1480− $ sudo dnf install graphviz graphviz-gd texlive-xetex-bin librsvg2-tools
1481−
1482−
1483−For PDF output you also need:
1484−
1485−<span class="p">..</span> <span class="ow">tabs</span><span class="p">::</span>
1486−
1487−<span class="p"> ..</span> <span class="ow">group-tab</span><span class="p">::</span> Ubuntu / debian
1488−
1489−<span class="p"> ..</span> <span class="ow">code</span><span class="p">::</span> <span class="k">sh</span>
1490−
1491− $ sudo apt texlive-latex-recommended texlive-extra-utils ttf-dejavu
1492−
1493−<span class="p"> ..</span> <span class="ow">group-tab</span><span class="p">::</span> Arch Linux
1494−
1495−<span class="p"> ..</span> <span class="ow">code</span><span class="p">::</span> <span class="k">sh</span>
1496−
1497− $ sudo pacman -S texlive-core texlive-latexextra ttf-dejavu
1498−
1499−<span class="p"> ..</span> <span class="ow">group-tab</span><span class="p">::</span> Fedora / RHEL
1500−
1501−<span class="p"> ..</span> <span class="ow">code</span><span class="p">::</span> sh
1478+<span class="p"> ..</span> <span class="ow">code-block</span><span class="p">::</span> sh
15021479
1503− $ sudo dnf install \
1504− texlive-collection-fontsrecommended texlive-collection-latex \
1505− dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts
1480+ $ sudo dnf install ShellCheck
15061481</pre></div>
15071482</div>
15081483</div>
@@ -1518,8 +1493,8 @@ For PDF output you also need:
15181493</div>
15191494<p>The input language for mathematics is LaTeX markup using the <a class="reference external" href="https://ctan.org/pkg/amsmath">CTAN: amsmath</a>
15201495package.</p>
1521−<p>To embed LaTeX markup in reST documents, use role <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-math" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">:math:</span></code></a> for
1522−inline and directive <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-math" title="(in Sphinx v4.0.0+/b1400ac42)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">..</span> <span class="pre">math::</span></code></a> for block markup.</p>
1496+<p>To embed LaTeX markup in reST documents, use role <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-math" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-role docutils literal notranslate"><span class="pre">:math:</span></code></a> for
1497+inline and directive <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-math" title="(in Sphinx v4.0.0+/adad0e62b)"><code class="xref rst rst-dir docutils literal notranslate"><span class="pre">..</span> <span class="pre">math::</span></code></a> for block markup.</p>
15231498<div class="highlight-reST notranslate"><div class="highlight"><pre><span></span>In <span class="na">:math:numref:</span><span class="nv">`schroedinger general`</span> the time-dependent Schrödinger equation
15241499is shown.
15251500
@@ -1535,8 +1510,8 @@ is shown.
15351510<p>In <a class="reference internal" href="#equation-schroedinger-general">(1)</a> the time-dependent Schrödinger equation
15361511is shown.</p>
15371512<div class="math" id="equation-schroedinger-general">
1538−<p><span class="eqno">(1)<a class="headerlink" href="#equation-schroedinger-general" title="Permalink to this equation">¶</a></span><span class="math">\mathrm{i}\hbar\dfrac{\partial}{\partial t} |\,\psi (t) \rangle =
1539− \hat{H} |\,\psi (t) \rangle.</span></p>
1513+<p><span class="eqno">(1)<a class="headerlink" href="#equation-schroedinger-general" title="Permalink to this equation">¶</a></span><img src="../_images/math/a6a994cb6e7278ec30eaebe7e636046d3deccb5b.svg" alt="\mathrm{i}\hbar\dfrac{\partial}{\partial t} |\,\psi (t) \rangle =
1514+ \hat{H} |\,\psi (t) \rangle."/></p>
15401515</div></div>
15411516<p>The next example shows the difference of <code class="docutils literal notranslate"><span class="pre">\tfrac</span></code> (<em>textstyle</em>) and <code class="docutils literal notranslate"><span class="pre">\dfrac</span></code>
15421517(<em>displaystyle</em>) used in a inline markup or another fraction.</p>
@@ -1549,13 +1524,13 @@ is shown.</p>
15491524<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
15501525eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
15511526voluptua. …
1552−<code class="docutils literal notranslate"><span class="pre">\tfrac</span></code> <strong>inline example</strong> <span class="math">\tfrac{\tfrac{1}{x}+\tfrac{1}{y}}{y-z}</span>
1527+<code class="docutils literal notranslate"><span class="pre">\tfrac</span></code> <strong>inline example</strong> <img class="math" src="../_images/math/3b8127a8eed95247f9249ea6c85e8e86df1baa82.svg" alt="\tfrac{\tfrac{1}{x}+\tfrac{1}{y}}{y-z}"/>
15531528At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
15541529gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
15551530<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
15561531eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
15571532voluptua. …
1558−<code class="docutils literal notranslate"><span class="pre">\tfrac</span></code> <strong>inline example</strong> <span class="math">\dfrac{\dfrac{1}{x}+\dfrac{1}{y}}{y-z}</span>
1533+<code class="docutils literal notranslate"><span class="pre">\tfrac</span></code> <strong>inline example</strong> <img class="math" src="../_images/math/07c9ff4251510b06013159f4e45ec9ab97044096.svg" alt="\dfrac{\dfrac{1}{x}+\dfrac{1}{y}}{y-z}"/>
15591534At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
15601535gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
15611536</div>
@@ -1592,7 +1567,7 @@ gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
15921567 <li><a href="index.html">Developer documentation</a>
15931568 <ul>
15941569 <li>Previous: <a href="makefile.html" title="previous chapter">Makefile Targets</a>
1595− <li>Next: <a href="../blog/index.html" title="next chapter">Blog</a></ul>
1570+ <li>Next: <a href="../utils/index.html" title="next chapter">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a></ul>
15961571 </li>
15971572 </ul>
15981573 </li>
@@ -1614,7 +1589,7 @@ gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
16141589
16151590 <div class="footer" role="contentinfo">
16161591 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
1617− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
1592+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
16181593 </div>
16191594 <script src="../_static/version_warning_offset.js"></script>
16201595
dev/search_api.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -192,7 +192,7 @@ instance. See the available options in the preferences page of the instance.</p>
192192
193193 <div class="footer" role="contentinfo">
194194 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
195− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
195+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
196196 </div>
197197 <script src="../_static/version_warning_offset.js"></script>
198198
dev/translation.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -146,7 +146,7 @@ create a PR.</p>
146146
147147 <div class="footer" role="contentinfo">
148148 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
149− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
149+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
150150 </div>
151151 <script src="../_static/version_warning_offset.js"></script>
152152
genindex.html+2−2
@@ -2,7 +2,7 @@
22
33<!DOCTYPE html>
44
5−<html xmlns="http://www.w3.org/1999/xhtml">
5+<html>
66 <head>
77 <meta charset="utf-8" />
88 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -121,7 +121,7 @@
121121
122122 <div class="footer" role="contentinfo">
123123 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
124− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
124+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
125125 </div>
126126 <script src="_static/version_warning_offset.js"></script>
127127
index.html+26−8
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -39,7 +39,14 @@
3939
4040 <div class="section" id="welcome-to-searx">
4141<h1>Welcome to searx<a class="headerlink" href="#welcome-to-searx" title="Permalink to this headline">¶</a></h1>
42−<p>Search without being tracked.</p>
42+<blockquote>
43+<div><p><em>Search without being tracked.</em></p>
44+</div></blockquote>
45+<p>Searx is a free internet metasearch engine which aggregates results from more
46+than 70 search services. Users are neither tracked nor profiled. Additionally,
47+searx can be used over Tor for online anonymity.</p>
48+<p>Get started with searx by using one of the <a class="reference external" href="https://searx.space">Searx-instances</a>. If you don’t trust
49+anyone, you can set up your own, see <a class="reference internal" href="admin/installation.html#installation"><span class="std std-ref">Installation</span></a>.</p>
4350<div class="sidebar">
4451<p class="sidebar-title">Features</p>
4552<ul class="simple">
@@ -54,12 +61,8 @@
5461digital rights</p></li>
5562</ul>
5663</div>
57−<p>Searx is a free internet metasearch engine which aggregates results from more
58−than 70 search services. Users are neither tracked nor profiled. Additionally,
59−searx can be used over Tor for online anonymity.</p>
60−<p>Get started with searx by using one of the <a class="reference external" href="https://searx.space">Searx-instances</a>. If you don’t trust
61−anyone, you can set up your own, see <a class="reference internal" href="admin/installation.html#installation"><span class="std std-ref">Installation</span></a>.</p>
6264<div class="toctree-wrapper compound">
65+<p class="caption"><span class="caption-text">Contents</span></p>
6366<ul>
6467<li class="toctree-l1"><a class="reference internal" href="user/index.html">User documentation</a><ul>
6568<li class="toctree-l2"><a class="reference internal" href="user/search_syntax.html">Search syntax</a></li>
@@ -68,6 +71,12 @@ anyone, you can set up your own, see <a class="reference internal" href="admin/i
6871</li>
6972<li class="toctree-l1"><a class="reference internal" href="admin/index.html">Administrator documentation</a><ul>
7073<li class="toctree-l2"><a class="reference internal" href="admin/installation.html">Installation</a></li>
74+<li class="toctree-l2"><a class="reference internal" href="admin/installation-searx.html">Step by step installation</a></li>
75+<li class="toctree-l2"><a class="reference internal" href="admin/installation-uwsgi.html">uwsgi</a></li>
76+<li class="toctree-l2"><a class="reference internal" href="admin/installation-nginx.html">Install with nginx</a></li>
77+<li class="toctree-l2"><a class="reference internal" href="admin/installation-apache.html">Install with apache</a></li>
78+<li class="toctree-l2"><a class="reference internal" href="admin/installation-docker.html">Docker installation</a></li>
79+<li class="toctree-l2"><a class="reference internal" href="admin/update-searx.html">How to update</a></li>
7180<li class="toctree-l2"><a class="reference internal" href="admin/settings.html"><code class="docutils literal notranslate"><span class="pre">settings.yml</span></code></a></li>
7281<li class="toctree-l2"><a class="reference internal" href="admin/api.html">Administration API</a></li>
7382<li class="toctree-l2"><a class="reference internal" href="admin/architecture.html">Architecture</a></li>
@@ -89,6 +98,15 @@ anyone, you can set up your own, see <a class="reference internal" href="admin/i
8998<li class="toctree-l2"><a class="reference internal" href="dev/reST.html">reST primer</a></li>
9099</ul>
91100</li>
101+<li class="toctree-l1"><a class="reference internal" href="utils/index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a><ul>
102+<li class="toctree-l2"><a class="reference internal" href="utils/searx.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/searx.sh</span></code></a></li>
103+<li class="toctree-l2"><a class="reference internal" href="utils/filtron.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/filtron.sh</span></code></a></li>
104+<li class="toctree-l2"><a class="reference internal" href="utils/morty.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/morty.sh</span></code></a></li>
105+<li class="toctree-l2"><a class="reference internal" href="utils/lxc.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span></code></a></li>
106+<li class="toctree-l2"><a class="reference internal" href="utils/index.html#common-commands-environment">Common commands &amp; environment</a></li>
107+<li class="toctree-l2"><a class="reference internal" href="utils/index.html#tooling-box-setup">Tooling box setup</a></li>
108+</ul>
109+</li>
92110<li class="toctree-l1"><a class="reference internal" href="blog/index.html">Blog</a><ul>
93111<li class="toctree-l2"><a class="reference internal" href="blog/python3.html">Introducing Python 3 support</a></li>
94112<li class="toctree-l2"><a class="reference internal" href="blog/admin.html">Searx admin interface</a></li>
@@ -149,7 +167,7 @@ anyone, you can set up your own, see <a class="reference internal" href="admin/i
149167
150168 <div class="footer" role="contentinfo">
151169 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
152− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
170+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
153171 </div>
154172 <script src="_static/version_warning_offset.js"></script>
155173
objects.inv

Binary file not shown.

search.html+4−6
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -53,10 +53,8 @@
5353 </p>
5454 </div>
5555 <p>
56− From here you can search these documents. Enter your search
57− words into the box below and click "search". Note that the search
58− function will automatically search for all of the words. Pages
59− containing fewer words won't appear in the result list.
56+ Searching for multiple words only shows matches that contain
57+ all words.
6058 </p>
6159 <form action="" method="get">
6260 <input type="text" name="q" aria-labelledby="search-documentation" value="" />
@@ -103,7 +101,7 @@
103101
104102 <div class="footer" role="contentinfo">
105103 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
106− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
104+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
107105 </div>
108106 <script src="_static/version_warning_offset.js"></script>
109107
searchindex.js+1−1
@@ -1 +1 @@
1−Search.setIndex({docnames:["admin/api","admin/architecture","admin/buildhosts","admin/engines","admin/filtron","admin/index","admin/installation","admin/morty","admin/plugins","admin/settings","blog/admin","blog/index","blog/intro-offline","blog/private-engines","blog/python3","dev/contribution_guide","dev/engine_overview","dev/index","dev/makefile","dev/plugins","dev/quickstart","dev/reST","dev/search_api","dev/translation","index","user/index","user/own-instance","user/public_instances","user/search_syntax"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.index":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["admin/api.rst","admin/architecture.rst","admin/buildhosts.rst","admin/engines.rst","admin/filtron.rst","admin/index.rst","admin/installation.rst","admin/morty.rst","admin/plugins.rst","admin/settings.rst","blog/admin.rst","blog/index.rst","blog/intro-offline.rst","blog/private-engines.rst","blog/python3.rst","dev/contribution_guide.rst","dev/engine_overview.rst","dev/index.rst","dev/makefile.rst","dev/plugins.rst","dev/quickstart.rst","dev/reST.rst","dev/search_api.rst","dev/translation.rst","index.rst","user/index.rst","user/own-instance.rst","user/public_instances.rst","user/search_syntax.rst"],objects:{},objnames:{},objtypes:{},terms:{"0xa9":21,"1337x":3,"15px":21,"40px":21,"70px":21,"\u65e5\u672c\u8a9e":9,"boolean":[16,21],"break":[15,21],"byte":16,"case":[6,9,13,20,26],"default":[4,6,7,9,14,15,19,21,22,24,26,28],"espa\u00f1ol":9,"export":18,"fran\u00e7ai":9,"function":[12,16,19,21],"import":[6,12,21],"int":[4,16,21],"long":26,"new":[3,8,10,12,13,15,18,19,20,22,23],"null":[6,15],"public":[1,8,21],"return":[8,12,19,21,26],"schr\u00f6dinger":21,"short":20,"static":[6,19],"switch":15,"t\u00fcrk\u00e7e":9,"true":[0,4,6,9,12,16,19,20,21,22],"try":[18,20,26],"while":[12,18,21],And:21,But:[10,14,16,26],For:[2,4,6,13,15,18,20,21,22],IPs:4,Not:21,One:10,That:21,The:[0,2,6,9,13,16,18,21,22,26],Then:[12,14,20,23],There:[15,21],These:[16,21],Use:4,Used:9,Uses:9,With:[18,21],__dict__:21,__name__:21,_anchor:21,_chapter:21,_doc:21,_dot:21,_rest:21,_section:21,_sphinx:21,_subsect:21,_svg:21,a2enmod:6,abbrev:28,abl:[2,9,12,13,15,16,21],about:[1,6,13,15,18,24],abov:[6,15,21,22],absenc:21,abus:[4,26],academ:3,accept:[12,28],access:[4,8,10,11,12,21,24,26],access_log:6,account:23,accross:9,accusam:21,acg:3,acgsou:3,act:[7,10],action:[0,4],activ:[6,7,9,14,15,20,22],adapt:16,add:[6,7,13,15,18,19,21,28],added:[13,18,19],adding:[12,21],addit:[2,6,16,18,20,21],addition:[24,26],address:[7,9,16,26],adipisici:21,adjust:18,admin:[9,11,13,21,24],administr:[10,12,13,22,24,26],adopt:15,adorn:21,ads:26,advantag:[10,21],advertis:26,advis:[4,6],aearx:9,af2cae6:21,affect:10,after:[14,19,20,21,23],again:18,agent:[4,8,9,16],aggreg:[4,24,26],ahrefsbot:4,aim:[10,18,21],aka:18,alia:6,align:21,aliquid:21,aliquyam:21,all:[0,7,14,15,16,18,21,22],allow:[6,9,21,28],along:4,alreadi:[15,20],also:[2,6,15,18,21,26,28],alt:21,alter:15,altern:[20,21],alwai:[16,20,26],amet:21,among:[15,26],amsmath:21,ancel:21,ani:[1,2,18,21,22,24],annoi:21,anonym:[24,26],anoth:[9,10,16,21],answer:[9,21,26],anyon:24,anyth:[9,14,26],anywai:[18,21],apach:9,apache2:6,api:[5,9,13,16,17,23,24],api_kei:[9,16],apikei:9,apk:3,apkm:3,apkmirror:3,app:[3,6,21],appear:[20,21],append:12,appli:[6,9,15],applic:[4,6,9,10],apt:[2,6,20,21],arbitrari:[12,16],arch:[0,2,3,13,21],architectur:[5,24],archiv:[3,4],archlinux:[3,13],argument:[7,8,21],arrai:16,arrow:21,art:[21,22],articl:1,arx:3,arxiv:3,asciimoo:[6,15,18,20,23],ascrib:21,aspect:15,assert:15,assign:16,assum:21,asterisk:21,attach:19,attent:21,attribut:21,audienc:21,author:[15,21],auto:[21,23],autobuild:18,autocomplet:[0,22],autodoc:21,automat:[8,21],avail:[6,8,9,12,15,20,22,26],avoid:[4,8,9],awar:21,babel:6,back:6,backquot:21,backslash:21,baiduspid:4,balanc:18,ban:26,bang:9,bar:21,barrier:10,base:[9,12,16,18,22],base_url:[6,9,16],baseprofil:21,bash:[6,21],baz:21,becaus:[10,13,15,16,20,23,26],becom:21,been:[12,15,27],befor:[14,15,18,19,20,21,26],behavior:21,behaviour:[8,15,19],being:[4,9,10,14,24],below:[4,6,9,15,20,21,23],benefit:13,besid:26,best:[2,18,21,26],better:[2,6,16,18,26],between:[16,21],big:21,bigger:9,biggest:10,bii:3,bin:[2,3,6,14,18,20,21],bing:[3,9],bing_imag:3,bing_new:3,bing_video:3,bingbot:4,bit:21,bitbucket:[0,3],biv:3,black:21,blank:[9,21],block:[4,9],blog:[21,24],bodi:[15,21],boilerpl:18,bold:21,boldfac:21,born:15,bot:4,both:[13,14,15,22,26],botlimit:4,bottom:8,boundingbox:16,branch:[15,18],brand:18,bring:[18,21],broken:21,browser:[8,9,10,14,15,18,26],btdigg:3,bug:[18,20],bugreport:15,build:6,builder:21,buildhost:[5,24],built:[15,16,20,21],builtin:[5,19,24],c3tv:3,call:[10,13,18,23],callback:19,can:[0,2,4,6,7,9,10,12,13,14,15,16,18,19,20,21,24,26],cancel:21,cannot:[2,21,26],capabl:[10,15],caplabl:12,captcha:26,caption:21,cardin:15,care:[9,21],carv:13,catcher:21,categori:[0,3,8,9,12,16,21,22,28],caution:21,caveat:21,ccc:3,cdn:2,cell:21,certif:6,cfg:[3,21],chain:18,chainabl:28,chang:[6,9,14,15,18,21],chapter:[14,15,21],charact:[15,21],chdir:6,check:[2,12,15,16,18,20,23],checker:18,checkout:15,chmod:6,choic:[21,26],choos:[15,16],chown:6,chronolog:21,citi:16,classifi:21,clear:26,cli:[20,23],client:4,clita:21,clock:14,clone:[6,15,18,20],code:[3,6,9,12,18,20,22,26],codebas:10,col:21,collabor:1,colleagu:13,collect:[2,21],colon:21,colspan:21,column:21,com:[6,16,18,20,21,22,23],combin:6,come:[4,13,14,15,18,26],comfort:21,comma:[13,22],command:[2,4,6,14,20,21,23],comment:21,commit:[18,20,23],commodi:21,common:[20,26],commonli:21,commun:12,compact:21,compani:26,compat:14,compil:23,complet:[15,22],compon:19,compromis:26,comput:26,con:21,concern:15,concret:[13,21],condit:21,conf:[6,21],config:[0,6,13,16,21,23],configur:[10,12,13,21,23,26],confus:21,connect:[12,24],consectetur:21,consequ:[9,15],consequat:21,consetetur:21,construct:[16,21],consult:20,contact:9,contain:[8,9,20,21],content:26,context:[19,21],continu:21,contribut:[1,2,17,18,24],contributor:21,control:26,convent:15,convert:21,cooki:[16,24,26],copi:[15,21],copyright:21,core:[2,12,21],corner:15,correct:9,could:[9,16,21],count:[6,21],countri:[9,16],coupl:6,courgett:22,cours:21,coverag:20,cpu:6,crawler:21,creat:[6,9,12,14,20,21,22,23],creation:[2,21],creativ:13,cross:21,crossref:3,cryptic:20,cryptographi:9,cspan:21,css:[8,19],css_depend:19,csv:[4,22],csv_tabl:21,ctan:21,cthulhu:28,ctrl:18,ctx:19,curl:4,currenc:3,currency_convert:3,current:[8,9,12,15,16,23,28],custom:[9,15,21,28],customiz:[0,10],customlog:6,cycl:18,dai:[18,22],dailymot:3,dalf:1,danger:21,data:[16,21,26],databas:[13,21],date:[0,16],datetim:[16,21],daunt:10,dbpedia:22,ddd:3,ddg:[3,28],ddi:3,de_d:9,deactiv:9,debian:[2,6,21],debug:[6,9,18],decid:[10,18],decim:16,dedic:21,deeper:[18,21],deezer:3,def:[12,16,19,21],defaul:21,default_local:[0,9],default_on:19,default_them:[0,9],defin:[9,19,21],definit:3,dejavu:[2,21],delet:[9,22,23],delimit:21,demon:6,depen:4,depend:[6,8,10,12,14,16,20,21,22],deploi:[6,9,18,21],describ:[9,18,21],descript:[8,15,19,21],deserv:15,design:[12,21],desir:[16,20],detail:[9,12,21],detect:9,deutsch:[0,9],dev:[6,15,18,21],develop:[9,10,13,14,15,18,21,24],deviantart:3,dfrac:21,diam:21,dict:21,dictzon:3,didn:9,diff:21,differ:[14,15,16,21],digg:3,digit:24,digraph:21,direct:21,directli:9,directori:3,disabl:[3,8,9,18,19,21,22],disabled_engin:22,disabled_plugin:22,disadvantag:21,discoveri:[12,13],displai:[2,8,9],displaystyl:21,disrespect:15,dist:[15,18],distinguish:21,distribut:[13,21],dive:26,dnf:[2,21],doai_rewrit:22,doc:[3,21],dockerfil:6,docs_url:18,doctest:21,doctre:21,document:[12,13,18,21,24],docutil:21,doe:[10,12,16,18,21,22],doesn:9,doi:8,dolor:21,domain:[6,21],domin:15,don:[14,18,21,24],done:[18,21],dot:2,doubl:21,download:21,drop:14,duckduckgo:[3,22,28],duckduckgo_definit:3,duckduckgo_imag:3,duden:3,duo:21,duref:21,dvisvgm:2,each:[21,22],easi:24,easier:15,easili:15,ecosystem:21,edit:[6,10,15,18,21,26],effect:[15,21],effort:1,egg_info:18,eirmod:21,either:20,element:21,elimin:20,elit:21,elitr:21,emac:21,email:9,emb:21,embed:[0,6,21],emphasi:21,empti:[21,22],en_u:[9,16],enabl:[0,6,13,15,18,20,22],enabled_engin:22,enabled_plugin:22,enclos:21,encod:21,encourag:21,encrypt:24,end:[14,21],endfor:21,engin:[0,5,10,11,15,17,20,21,22,24,26,28],english:[0,9],enim:21,enough:23,enpoint:22,ensur:15,enter:[6,14],eos:21,equat:2,erat:21,erowid:3,error:[9,20,21],error_log:6,escap:21,especi:21,esperanto:0,essenti:6,est:21,etc:[4,6,15],eto:3,etool:3,etymonlin:3,evalu:21,everi:[9,15,16,26],everyon:[12,26],everyth:[6,21,26],exactli:[4,21],exampl:[0,4,6,12,13,15,20,22,26],exceed:4,except:[14,15,21],exchang:26,execut:[9,23],exercit:21,exist:[10,14,15,18],exit:6,expect:[13,15],experienc:10,explain:15,explicit:21,expos:13,ext:2,extend:[12,15,19,21],extens:[2,21],extern:[4,7,16,21,22,26],extra:[2,21],extrem:10,eye:21,face:21,fail:20,fals:[0,6,9,19,20,21,22],familiar:18,fanci:15,faq:21,faroo:3,favorit:[15,18],fdroid:3,featur:[7,10,13,15,21,26],fedora:[2,21],feedback:[15,21],feedfetch:4,feel:[1,19,21],few:[9,15,16],fieldnam:21,file:[3,6,9,10,12,13,14,15,18,19,20,23],file_filt:23,filenam:16,files:16,fill:21,filter:[0,4,22],find:[1,4,12,13],fine:6,finish:23,firewal:4,first:[10,12,14,18,20,21,26],fit:[13,19],fix:[15,18,20],fixpathinfo:6,flask:[19,21],flexibl:21,flickr:3,flickr_noapi:3,folder:[15,16,18,20,21,23],follow:[4,7,15,16,20,21,23],followsymlink:6,font:[2,21],fontsrecommend:[2,21],footer:15,fork:15,form:[0,21,26],format:[4,16,20,21,22],forward:[4,6,26],found:[2,4,10,18],foundat:[10,12,13,14],fr_fr:9,fraction:21,framalibr:3,free:[3,6,19,24],friend:[13,18,26],frinkiac:3,frk:3,frl:3,from:[1,2,4,8,9,10,12,13,14,15,18,21,23,24,26],front:21,fsd:3,full:[9,15,21],fulli:10,fund:[12,13],further:[18,20],furthermor:[16,20,22,26],gain:26,gate:18,geektim:3,gen:3,gener:[0,3,9,12,15,26],genesi:3,geniu:3,gentoo:3,geojson:16,german:0,get:[2,6,8,15,16,18,20,21,22,23,24],get_engines_stat:21,gid:6,gigablast:3,git:[2,6,15,16,18,20,21],git_url:18,github:[3,6,12,14,18,20,21,22],gitlab:3,gitmoji:15,give:[18,20],given:21,glyph:21,gnu:18,goe:18,goi:[0,3],going:[4,12,13,21,26],gon:3,good:20,googl:[0,3,22],google_imag:3,google_new:3,google_video:3,googlebot:4,gos:3,gov:3,gpa:3,gpm:3,gps:3,grant:6,graphic:10,graphviz:2,group:[21,26],grow:10,grumpi:21,grunt:20,grunt_build:20,gubergren:21,guid:[10,18,20,21],guidelin:13,guilabel:21,habr:3,habrahabr:3,hack:[10,12,13,14,15],hackerspac:28,handl:[9,21,26],handler:6,happi:[10,12,13,14,15],hard:[10,21],has:[7,12,13,15,16,20,21,26,27],hat:21,have:[1,2,6,9,10,14,15,16,18,21,26],hbar:21,header:[4,16,21],heard:21,hebrew:9,height:21,help:[8,15,18,20],helper:21,her:[13,22,26],here:[9,12,15,21],herein:1,hex:6,hidden:[0,13,26],him:13,hint:[1,21],his:[22,26],histor:14,home:23,hoogl:3,host:[2,4,10,13,18,23,24],hotkei:[0,8],hour:6,hous:16,house_numb:16,how:[1,2,5,9,17,18,21,24],howev:[12,16,22],html:[0,2,15,16,18,21],html_math_render:2,http:[0,2,4,6,7,8,9,12,15,16,18,20,21,23,24],http_host:4,https_rewrit:22,hub:6,huge:21,idea:20,imag:[0,2,3,7,9,22,28],image_proxi:[9,22],imagemagick:[2,21],img_src:16,imgmath:2,imgmath_font_s:2,imgmath_image_format:2,imgmath_latex:2,immedi:8,implement:[10,14,15,16,19],impli:13,improv:18,ina:3,inbound:9,includ:[6,13,18,21],inclus:28,increment:18,indent:21,index:6,infinit:8,infinite_scrol:[8,22],info:[9,18],inform:[4,6,7,8,9,13,15,16],infrastructur:1,inherit:21,ini:6,init:[6,12],initi:23,input:[0,13,21],insert:[21,23],insid:16,insight:26,instal:[2,4,5,7,14,15,18,20,21,23,24],instanc:[0,1,5,6,9,10,12,13,18,22,23,24,25],instance_nam:0,instead:[10,13,14,20,21],instruct:21,insuffici:12,integr:24,intent:15,interfac:[9,11,24],interfer:15,intermedi:18,intern:20,internet:[12,24],interpret:[6,21],interpretor:6,intersphinx_map:21,interv:4,introduc:[10,11,12,13,21,24],introduct:[18,20],intuit:21,inv:21,inventori:21,investig:14,invidi:3,invidunt:21,ipsum:21,iso:[9,16],issu:[12,13,14],ital:21,italiano:9,item:21,its:[2,10,15,18,21,22,26],itself:15,jame:4,japanes:9,javascript:8,jinja:21,jinja_context:21,join:21,js_depend:19,json:[4,22],json_engin:3,jump:18,just:[0,18,21,26],justo:21,kasd:21,kbd:21,keep:18,kei:[7,8,9,12,16,23],kickass:3,kind:[21,26],kiss_:21,know:[12,13,21,26],knowledg:21,known:18,kvch:[10,12,13,14],label:21,labor:21,labori:21,lack:15,lang:[0,22,23],languag:[0,3,9,16,18,21,22,23,28],language_support:[16,21],laptop:26,last:21,lat:16,latest:23,latex:2,latexextra:[2,21],latitud:16,latter:18,lazi:6,lc_messag:23,learn:21,least:14,leav:9,leech:16,leecher:16,left:21,legaci:22,length:15,less:[10,20,21,26],let:[21,26],level:[15,21],libapache2:6,libffi:6,librari:3,librsvg2:[2,21],librsvg:[2,21],libssl:6,libxslt:6,light:6,like:[0,2,6,8,9,13,15,16,18,21],like_hotkei:22,limit:[4,11,12,21,24],line:[12,15,18],link:[8,9],linkdexbot:4,lint:18,linux:[0,2,3,13,21],linuxdoc:21,list:[12,13,16,18,19,22,28],listen:[4,6],literalinclud:21,live:21,load:[8,9],lobst:3,local:[0,6,9,13,14,16,18,19,20,23],localhost:6,locat:[4,6,9,21],log:[9,20,26],logic:15,logicodev:22,lon:16,longer:18,longitud:16,look:18,lorem:21,loremlorem:21,low:6,made:9,magna:21,magnetlink:16,magyar:9,mai:[9,21],main:[8,18,23],maintain:21,make:[2,6,10,13,14,15,21,26],makefil:[15,17,24],man:21,manag:[6,10,18,20],mani:4,manipul:10,manual:[9,18,21],manuali:21,map:[0,3,21],mark:21,mass:15,master:[6,15,21],math:2,mathemat:21,mathrm:21,matter:[16,26],max:[4,16],maxim:15,maximum:[15,16],mean:[15,21,26],meaning:21,meant:21,media:[0,3,16],mediawiki:3,memori:9,mention:14,menuselect:21,messag:[4,9,15,18,20,21,23],messagespo:23,meta:21,metadata:21,metasearch:[16,24],method:[0,16,21],microsoft:3,microsoft_academ:3,might:[13,15,18,21,22,26],migrat:14,min:16,minim:21,mirror:3,misbehav:15,miss:21,mixcloud:3,mj12bot:4,mjk:3,mod:[6,21],mode:[9,21],modifi:[9,21,28],modul:[6,21],mojeek:3,monet:26,mono:[2,21],month:[0,22],more:[6,7,9,10,12,15,18,21,22,24,26],morecol:21,morerow:21,morti:7,most:[2,9,14,26],mostli:21,move:[12,15,27],movi:3,msnbot:4,much:[15,21],multibl:16,multipl:[8,9,21,26],music:3,must:[9,14,15,16,20,21],my_arg:21,my_funct:21,my_other_arg:21,mymemori:3,myproject:20,name:[0,3,4,6,8,9,13,16,18,19,23],navig:8,necessari:[6,13],nederland:9,need:[9,12,15,18,21,26],neither:24,net:24,netvib:4,network:9,never:18,newcom:10,nework:9,next:[8,21],nginx:[4,9],nightmar:21,nisi:21,nlnet:[10,12,13,14],node:20,nodej:20,non:12,none:[16,18,21,22],nonumi:21,nor:24,normal:[16,21],nostrud:21,note:[6,15,22],now:[13,14,19],npm:[3,20],number:[4,6,9,16,21,22],number_of_result:16,numer:21,numref:21,nyaa:3,oad:3,oap:3,obj:21,object:[16,19,21],obtain:9,off:[6,15],offlin:[3,11,13,16,21,24],often:[16,21],okhin:6,on_result:19,one:[9,13,15,18,21,24,26],ones:16,ongo:18,onli:[2,6,7,9,13,15,19,21,22],onlin:[12,21,24],open:[8,14,15,18,21,22,26],open_results_on_new_tab:8,openairedataset:3,openairepubl:3,openrepo:3,openssl:6,openstreetmap:[0,3],oper:[14,21,26],option:[6,7,9,10,13,15,16,18,19,20,21,22,26],order:[15,20,21],org:[2,9,16,21],org_bot:4,organ:24,origin:[6,21],oscar:[0,9,22],osm:[0,3,16],other:[9,15,16,21,26],otherwis:16,our:[10,15,18,21],out:[12,15,18,21],outgo:9,outgoing_proxi:9,output:[2,13,21,22],outstand:21,over:[21,24],overlin:21,overview:[9,17,18,22,24],overwrit:8,overwritten:16,own:[18,24,26],owner:18,packag:[2,6,18,20,21],pacman:[2,21],page:[3,4,8,9,10,13,15,16,21,22,26,27,28],pageno:[16,22],pagenumb:16,pair:12,palletsproject:21,param:[4,12,16,21],paramet:16,paramt:16,parent:21,pars:22,parse_lin:12,part:[9,10,21],parti:26,partial:21,partli:16,pass:[12,22],past:0,patch:[15,21],path:[4,6,9],paywal:8,pdb:3,pdbe:3,pdf:[2,21],peopl:[10,26],pep8:[15,18,20],pep8_check:18,pep:21,per:[15,16,21],perform:[8,12,16],phase:20,photon:3,phrase:21,piec:21,pip3:14,pip:23,pipe:12,piratebai:3,pix:22,place:[15,16,21,23,26],plai:3,plaintext:21,pleas:[6,14,15,20,21,22],plenti:15,plugin:[0,5,6,15,17,22,24],point:[6,18,21,26],pointer:21,pointhi:22,polygon:21,popen:12,popular:21,port:[4,6,9],possibl:[6,7,8,9,12,13,21,22],post:[0,6,15,22],post_search:19,postcod:16,pot:23,pov:21,power:21,practic:15,pre_search:19,prefer:[10,13,21,22,26,28],prefix:28,prepar:[11,24],prerequisit:21,present:[12,13],preserv:[15,21],press:[8,18],pretti:9,preview:16,primer:[17,24],principl:21,privaci:[6,21],privat:[12,24,25],pro:21,problem:4,proce:6,process:[2,4,12,13,18],processor:21,produc:21,product:9,profil:[18,24,26],program:18,project:[4,18,21],promot:24,proper:26,properli:14,propos:12,protect:[5,15,24],provid:[13,15,16,21],proxi:[5,6,9,22,24,26],proxifi:7,proxy_add_x_forwarded_for:[4,6],proxy_buff:6,proxy_pass:[4,6],proxy_set_head:[4,6],psi:21,pub:3,publicli:12,publish:16,publishedd:16,pubm:3,pull:[6,12,15,21,23],purpos:[9,16,20],push:[15,18],py3:18,pybabel:23,pyclean:18,pyenv:18,pygment:21,pylintrc:18,pypi:[18,21],python2:14,python3:14,python:[4,6,9,11,20,21,24],pythonpath:6,quadratur:24,qualiti:[2,18,21],queri:[8,12,13,16,22,26,28],question:[21,26],qui:21,quickstart:[15,17,18,24],quit:[15,18],qwant:3,qwer:28,qwi:3,qwn:3,qws:3,rais:12,rand:6,random:[16,26],rang:[3,16,22],rangl:21,rate:4,rather:13,raw:21,reach:21,reactiv:9,read:[12,15,18,20],readability_:21,reader:21,readlin:12,readm:7,real:4,reason:[10,14,21],rebuild:15,rebum:21,recommend:[2,15,16,18,21],reconsid:15,record:21,reddit:3,redefin:16,redirect:8,reduc:15,refer:[1,21,26],referenc:21,refnam:21,regardless:26,regular:12,rel:21,releas:[14,18],rememb:15,remote_addr:4,remov:[8,26],renam:22,render:2,replac:[10,19],repo:15,repositori:[6,10],request:[9,12,13,15,19,21,26],request_timeout:9,requir:[2,8,14,15,16,18,20,21,22],requisit:18,reset:26,respect:[15,26],respons:9,rest:[13,17,24],restart:[6,7],restrict:13,restructuredtext:21,result:[2,5,8,9,12,21,22,24,26],result_proxi:7,results_on_new_tab:22,retriev:23,return42:21,return_cod:12,revers:6,rewrit:[0,8],rfc:21,rhel:[2,21],rid:18,right:[6,13,19,21,24],rightmost:21,rigth:21,road:16,roboag:4,robot:[18,20],robotframework:14,rolenam:21,romanian:9,root:[6,18],rotat:21,round:15,rout:[6,21],row:21,rowspan:21,rspan:21,rss:[4,22],rst:[15,21],rule:[4,15],run:[2,4,6,7,9,12,13,15,16,19,21,23,26],runtimeerror:12,russian:9,sadipsc:21,safe:[3,22],safe_search:0,safesearch:[21,22],same:[4,8,9,16,21],sampl:21,san:[2,21],sanctu:21,satisfi:20,scalabl:21,scale:21,scaleabl:21,scc:3,scd:3,schedul:[12,14],scheme:[4,6],scholar:3,schroeding:21,scienc:3,scope:15,scrapi:4,scratch:2,script:[4,6,20],script_nam:6,scroll:8,sdist:18,sea:21,search:[3,4,8,9,12,13,15,16,17,21,24,25,26],search_on_category_select:[8,22],search_path:16,search_str:16,searchcod:3,searchcode_cod:3,searchcode_doc:3,searx:[0,1,4,7,9,11,12,15,16,18,19,20,21,22,23,27,28],searx_url:18,searx_userag:9,sec:4,second:[9,21],secret:[9,13],secret_kei:9,section:[9,18,21],secur:24,sed:[6,21],see:[1,2,6,7,9,12,13,15,20,21,22,24,28],seed:16,seeder:16,seedpeer:3,select:[8,18,21,26,28],selenium:20,self:[8,10,24],self_inform:22,semant:[3,15],send:[1,2,4,9,26],sens:21,sent:26,separ:[13,15,21,22],seri:18,serif:[2,21],serv:[15,26],server:[9,20],server_nam:6,servic:[4,6,7,21,22,24,26],session:20,set:[2,3,5,6,7,10,12,18,20,21,22,23,24,26,28],sethandl:6,setup:[1,2,5,6,21,24],seznam:3,seznambot:4,share:13,she:[13,26],shortcut:[0,3,9,13,16,21],should:[6,9,10,14,15,21,23],show:[1,2,21],shown:21,side:21,sign:21,signifi:21,similar:21,simpl:[18,22],simplest:21,simpli:[15,18,22],simplifi:18,sinc:[10,18,21],singl:[6,26],sit:21,site:[0,6,9,16,21,22],size:16,skeleton:12,skip:20,slow:9,slurp:4,small:16,smtbot:4,snippet:7,social:[0,3],sock:9,socket:6,softwar:3,sold:26,solut:13,solv:[4,13],some:[1,6,9,13,15,18,21],someon:26,someth:[15,18],sometim:10,soundcloud:3,sourc:[9,14,18,21,23,26],source_fil:23,source_ip:9,source_lang:23,space:[9,27],span:21,spars:21,special:16,specif:[6,9,16],specifi:[9,16,22],speu:3,sphinx:15,splinter:14,split:15,sponsor:[10,12,13,14],ssl:[6,16,24],stabl:9,stack:20,stackoverflow:3,stage:21,standalon:10,standard:[15,16],start:[1,4,6,15,16,18,24],startpag:[3,22],stash:[6,18],stat:21,statist:21,stdout:12,step:[6,15],stet:21,stone:13,stop:[4,18],store:[16,26],street:16,strict:13,string:[13,16,22,23],stroke:21,strong:21,structur:15,stub:21,stuff:21,style:22,sub:[15,21],subject:21,submit:15,subprocess:12,subrul:4,subscript:21,subsect:21,sudo:[2,6,20,21],suffix:9,suggest:[1,19],suitabl:21,sup:21,superscript:21,supervisor:10,support:[2,3,6,9,11,13,15,16,21,22,24,26],sure:[6,14],surround:21,svg:2,svg_imag:21,symlink:6,syntax:[22,24,25],system:[13,14,15,21],szn:3,tab:[8,22],tabl:12,tailor:26,take:[9,10,15,23],taken:21,takimata:21,tar:18,target:[15,17,21,24],task:21,tell:16,templat:[12,16],tempor:21,term:21,test:[8,14,15],texliv:[2,21],text:[0,16,21],textstyl:21,tfrac:21,than:[9,21,24],thei:[9,13,21,26],them:[9,18,21],theme:[9,22],themes_path:9,themselv:13,therefor:21,thi:[1,4,6,7,8,9,10,12,13,14,16,18,19,20,21,22,26,27],thing:21,think:[15,18,21],third:[21,26],those:[12,23,26],thread:6,three:[15,19,21,26],through:[9,13,21,22,26],thu:[12,14,22,26],thumbnail:16,thumbnail_src:16,time:[4,9,14,15,16,21,22,26],time_rang:[0,22],time_range_support:[16,21],timeout:[3,9,16,21],tip:21,titl:16,tld:6,todai:12,togeth:12,token:[12,13],tokyotoshokan:3,too:[4,9,21,26],tool:[2,10,15,21,23],top:21,tor:[3,24,26],torrentfil:16,torrentz:3,touch:9,tpb:3,trace:20,track:[24,26],tracker:8,tracker_url_remov:22,trademark:21,traffic:6,train:21,transform:21,transifex:15,transifexrc:23,translat:[3,9,17,24],travi:[14,20],tree:18,trust:[13,24,26],ttf:[2,21],tupl:19,turn:[15,20],twice:6,twine:18,twitter:3,two:[15,21,22],txt:[14,18,21],type:[0,15,16,18,22,23,26],typic:[1,21],typo:21,ubuntu:[2,6,21],ugli:[10,21],uid:6,ullamco:21,ultrasecretkei:[6,9],uncom:9,uncommon:15,under:[13,16],understand:[10,21],unfortun:15,uninstal:18,unit:[15,18],unit_test:[18,20],univers:6,unix:6,unknown:26,unless:13,unlik:26,unspecifi:16,unsplash:3,untouch:18,updat:[9,15],update_dev_packag:20,update_packag:6,upload:18,url:[0,7,8,9,15,16,18,26],urlencod:16,usag:[18,21],use:[6,7,9,12,13,15,16,18,20,21,24,25],used:[6,9,14,15,16,21,24,26],useful:9,user:[4,6,8,9,13,15,16,21,24,26],useradd:6,userag:4,useragent_suffix:9,uses:[9,16,21,26],using:[4,6,9,15,18,20,21,23,24],usr:6,usual:[6,14,26],utf:21,util:[2,21],uwsgi_param:6,uwsgi_pass:6,uwsgisocket:6,valid:[16,20,22],valu:[0,12,16,21,22],variabl:16,variant:21,variou:[15,19],vector:21,vendor:15,veniam:21,venv3:14,verifi:16,vero:21,version:[8,14,21],via:[10,28],video:3,view:26,viewbox:21,vim:[0,8,22],vim_hotkei:8,vimeo:3,virtual:6,virtualenv:[6,14,18,20],virualenv:18,visist:21,visit:[21,26],voat:3,voluptua:21,vpn:26,vulner:26,wai:[12,15,16,21,26],wait:[9,12],want:[9,13,14,15,18,21,22,26],warn:[2,21],watch:15,web:[9,10,18],webapp:[6,9,14,18,21],webcrawl:4,webserv:6,websit:0,weight:[9,21],weigth:[3,9],weird:15,welcom:1,well:21,were:[12,13,14],werkzeug:18,wget:4,what:21,whatev:[6,18],when:[2,8,9,14,19,20,21,26],where:[4,9,21],whether:[20,26],which:[4,9,10,12,13,15,16,18,21,22,24,26],whl:18,who:[6,10,12,26],whole:[6,19],why:[21,24,25],wide:15,widen:21,width:21,wiki:[0,3,12,13,21],wikidata:3,wikipedia:[3,9,22,28],window:8,wish:9,within:[18,21],without:[2,9,16,24,26],wolframalpha:3,wolframalpha_noapi:3,won:[9,14],wonderfal:6,word:[19,21,22],work:[6,9,15,16,18,20,26],worker:6,world:[15,21,26],worri:14,worth:26,would:13,wrong:18,wsgi:6,www1x:3,www:[2,21,23],wysiwyg:15,xdg:18,xetex:[2,21],xml:21,xmln:21,xpath:3,xxxx:21,yacybot:4,yahoo:[3,4],yahoo_new:3,yandex:3,yandexbot:4,yandexmobilebot:4,year:[14,22],yet:[15,16,18],yhn:3,yml:[3,5,6,7,10,12,18,20,22,24],you:[1,2,6,9,12,15,18,20,21,22,24,26,28],your:[1,2,6,7,8,9,10,11,14,15,18,19,21,24],your_morty_proxy_kei:7,yourself:15,youtub:3,youtube_noapi:3,yyyi:21,zero:12,zgrab:4,zlib1g:6,zzzz:21},titles:["Administration API","Architecture","Buildhosts","Engines","How to protect an instance","Administrator documentation","Installation","How to setup result proxy","Plugins builtin","<code class=\"docutils literal notranslate\"><span class=\"pre\">settings.yml</span></code>","Searx admin interface","Blog","Preparation for offline engines","Limit access to your searx engines","Introducing Python 3 support","How to contribute","Engine overview","Developer documentation","Makefile Targets","Plugins","Development Quickstart","reST primer","Search API","Translation","Welcome to searx","User documentation","Why use a private instance?","&lt;no title&gt;","Search syntax"],titleterms:{"default":[3,8,16],"public":26,"return":16,The:15,about:[21,26],access:13,acknowledg:[10,12,13,14],activ:18,admin:10,administr:[0,5],admonit:21,aka:21,anchor:21,apach:6,api:[0,22],architectur:1,argument:16,articl:[2,21],ascii:21,bar:0,basic:[6,21],bibliograph:21,block:21,blog:11,bug:14,build:[2,15,18,20,21],buildhost:2,built:[3,8],builtin:8,bullet:21,check:6,clean:[15,18],code:[15,16,21],commit:15,compil:20,conclus:26,configur:[0,3,4,6,8,16],consequ:26,content:[6,16,18,21],contribut:15,creat:15,csv:21,data:0,debug:20,definit:21,deploi:15,design:15,develop:[12,17,20],direct:15,disabl:6,doc:[2,15,18],docker:6,document:[5,15,17,25],doe:26,dot:21,drop:18,emb:0,engin:[3,9,12,13,16],entri:19,environ:[18,20,21],equat:21,exampl:[16,19,21,28],ext:21,extlink:21,fact:14,featur:24,field:21,figur:21,file:[16,21],filtron:4,flat:21,foo:21,fork:18,found:14,from:6,fun:14,further:[3,8,9,19,21,22],gate:21,gener:[16,21],get:0,github:15,global:9,good:15,graphviz:21,grid:21,hackabl:15,head:21,hello:21,highlight:21,hlist:21,hook:19,horizont:21,host:6,how:[4,6,7,14,15,20,26],hyperlink:21,imag:[16,21],init:23,inlin:21,instal:[6,10],instanc:[4,26],interfac:10,intersphinx:21,introduc:14,javascript:20,kernel:21,kiss:21,latex:21,limit:13,line:21,link:21,list:21,liter:21,live:[15,18],log:6,make:[16,18,20],makefil:[18,20],map:16,markup:21,math:21,matter:21,name:21,need:[1,2],nest:21,next:[12,13],nginx:6,note:21,offlin:12,ordinari:21,oscar:20,overrid:16,overview:16,page:18,paragraph:21,paramet:22,pars:16,pass:16,plugin:[8,19],point:19,post:19,pre:19,prepar:12,prime:15,primer:21,privaci:[15,26],privat:[13,26],process:21,progress:12,project:23,protect:[4,26],proxi:7,pybuild:18,pyenv:20,pylint:18,python:[14,18],quickstart:20,quot:21,read:[3,8,9,19,21,22],readabl:21,ref:21,refer:6,render:21,request:[4,16],requir:23,respons:0,rest:[15,21],result:[7,16,19],role:21,rout:4,run:[14,18,20],sampl:[0,4],search:[0,19,22,28],searx:[6,10,13,14,24,26],see:26,server:6,set:[9,16],setup:[7,18,20],sidebar:21,simpl:21,skill:21,smart:21,soft:21,some:2,sourc:[15,20],space:21,specif:21,sphinx:[2,21],step:[12,13],structur:21,style:20,subdirectori:6,substitut:21,support:14,svg:21,syntax:[21,28],tab:21,tabl:21,target:[18,20],templat:21,test:[18,20],theme:20,thi:2,through:4,time:[3,8],tip:20,titl:21,torrent:16,transifex:23,translat:[15,23],truth:21,unicod:21,unit:20,updat:[6,23],upgrad:14,upstream:18,url:[6,21],use:26,user:25,using:[14,26],uwsgi:6,video:16,view:21,web:6,welcom:24,what:26,why:26,work:[1,2],yml:[9,16],you:14,your:[13,20]}})
1+Search.setIndex({docnames:["admin/api","admin/architecture","admin/buildhosts","admin/engines","admin/filtron","admin/index","admin/installation","admin/installation-apache","admin/installation-docker","admin/installation-nginx","admin/installation-searx","admin/installation-uwsgi","admin/morty","admin/plugins","admin/settings","admin/update-searx","blog/admin","blog/index","blog/intro-offline","blog/private-engines","blog/python3","dev/contribution_guide","dev/engine_overview","dev/index","dev/makefile","dev/plugins","dev/quickstart","dev/reST","dev/search_api","dev/translation","index","user/index","user/own-instance","user/search_syntax","utils/filtron.sh","utils/index","utils/lxc.sh","utils/morty.sh","utils/searx.sh"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":2,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["admin/api.rst","admin/architecture.rst","admin/buildhosts.rst","admin/engines.rst","admin/filtron.rst","admin/index.rst","admin/installation.rst","admin/installation-apache.rst","admin/installation-docker.rst","admin/installation-nginx.rst","admin/installation-searx.rst","admin/installation-uwsgi.rst","admin/morty.rst","admin/plugins.rst","admin/settings.rst","admin/update-searx.rst","blog/admin.rst","blog/index.rst","blog/intro-offline.rst","blog/private-engines.rst","blog/python3.rst","dev/contribution_guide.rst","dev/engine_overview.rst","dev/index.rst","dev/makefile.rst","dev/plugins.rst","dev/quickstart.rst","dev/reST.rst","dev/search_api.rst","dev/translation.rst","index.rst","user/index.rst","user/own-instance.rst","user/search_syntax.rst","utils/filtron.sh.rst","utils/index.rst","utils/lxc.sh.rst","utils/morty.sh.rst","utils/searx.sh.rst"],objects:{},objnames:{},objtypes:{},terms:{"0pointer":11,"0xa9":27,"15px":27,"2ee9ab582e5ff1dfcc6c4f7f2bdd4db6":10,"40px":27,"70px":27,"800gbpciex4":38,"\u65e5\u672c\u8a9e":14,"boolean":[22,27],"break":[21,27],"byte":22,"case":[7,9,14,19,26,32,34,37,38],"class":7,"default":[4,7,9,11,12,14,20,21,24,25,27,28,30,32,33,34,35,36,37,38],"espa\u00f1ol":14,"export":[9,10,24,34,36,37],"fran\u00e7ai":14,"function":[18,22,25,27,36],"import":[9,18,27],"int":[4,22,27],"long":32,"new":[7,9,10,11,13,16,18,19,21,24,25,26,28,29],"null":[7,9,21],"public":[1,6,13,27,35,36],"return":[13,18,23,25,27,32],"schr\u00f6dinger":27,"short":26,"static":[2,4,9,25],"switch":[7,21],"t\u00fcrk\u00e7e":14,"true":[0,4,7,9,10,11,14,18,22,25,26,27,28,34,37],"try":[10,24,26,32],"var":7,"while":[11,18,24,27],And:[7,27],But:[16,20,22,32,36],DNS:[35,36],For:[2,4,7,8,9,10,11,19,21,24,26,27,28],IPs:[4,35],Not:27,One:[11,16],That:27,The:[0,2,5,6,11,14,19,22,24,27,28,32,34,35,36,37,38],Then:[18,20,26,29],There:[7,11,21,27],These:[22,27],USE:7,Use:[4,7,9],Used:[7,14],Uses:14,With:[7,24,27,36],__dict__:27,__name__:27,_anchor:27,_chapter:27,_doc:27,_dot:27,_rest:27,_section:27,_sphinx:27,_subsect:27,_svg:27,a2disconf:7,a2dismod:7,a2dissit:7,a2enconf:7,a2enmod:7,a2ensit:7,abbrev:33,abl:[2,14,18,19,21,22,27],about:[1,19,21,24,30,36],abov:[7,10,21,27,28,36],absenc:27,abus:[4,32],accept:[10,18,33],access:[4,7,13,16,17,18,27,30,32],access_log:9,accord:11,account:[7,9,29,34,35,37,38],accross:14,accusam:27,acknowledg:17,act:[12,16],action:[0,4,11],activ:[7,9,10,11,12,14,20,21,26,28,34,37,38],adapt:22,add:[6,7,9,11,12,19,21,24,25,27,33,34,35,37,38],added:[11,19,24,25],adding:[18,27,35],addit:[2,22,24,26,27],addition:[30,32],address:[12,14,22,32,35],adipisici:27,adjust:24,admin:[14,17,19,27,30,35,37],administr:[16,18,19,28,30,32],admonit:23,adopt:21,adorn:27,ads:32,advantag:[16,27],advertis:32,advis:[4,7,9],aearx:14,af2cae6:27,affect:16,after:[10,20,25,26,27,29,34,37],again:24,agent:[4,10,13,14,22],aggreg:[4,30,32],agpl:[35,36],ahrefsbot:4,aim:[16,24,27],aka:24,alia:9,align:27,aliquid:27,aliquyam:27,all:[0,6,7,12,20,21,22,24,27,28,34,35,36,37,38],allow:[7,10,14,27,33],allowoverrid:7,alltogeth:5,along:4,alreadi:[7,9,21,26],also:[2,7,8,10,11,21,24,27,32,33,35],alt:27,alter:21,altern:[6,9,26,27,36],alwai:[9,22,26,32,34,37],amd64:[34,37],amet:27,among:[21,32],amsmath:27,analysi:2,ancel:27,anchor:23,ani:[2,6,7,11,24,27,28,30,35],annoi:27,anonym:[30,32],anoth:[11,14,16,22,27,36],answer:[14,27,32],anymor:7,anyon:30,anyth:[14,20,32],anywai:[24,27],apach:[1,4,5,6,11,14,30,34,35,36,37,38],apache2:7,apache2ctl:7,api:[5,14,19,22,23,29,30,34],api_kei:[14,22],apikei:14,app:[7,9,11,27,34,37,38],appear:[26,27],append:18,appli:[14,15,21],applic:[4,9,11,14,16,38],approach:11,april:36,apt:[2,7,9,10,26,27],arbitrari:[18,22],arch:[0,2,7,9,10,11,19,27],architectur:[4,5,6,7,9,30,34,37,38],archiv:4,archlinux:[11,19,36],argument:[12,13,27],arrai:22,arrow:27,art:[27,28],articl:23,asciimoo:[6,8,10,21,24,26,29,34,37,38],ascrib:27,aspect:21,assert:21,assign:22,assum:[10,27],asterisk:27,attach:25,attent:27,attribut:27,audienc:27,author:[21,27],auto:[27,29,36],autobuild:24,autocomplet:[0,28],autodoc:27,autoindex:7,autoindex_modul:7,automat:[11,13,27],avail:[7,9,11,13,14,18,21,26,28,32,34,37,38],avoid:[4,13,14],awar:[7,27,35],babel:[2,10],backquot:27,backslash:27,backup:35,baiduspid:4,balanc:24,ban:32,bang:14,bar:[5,27,34,37],barrier:16,base:[2,10,14,18,22,24,28,36],base_url:[9,14,22],baseprofil:27,bash:[10,27,34,35,36,37],basic:[23,36],batch:35,baz:27,becaus:[16,19,21,22,26,29,32],becom:27,been:[18,21],befor:[10,11,20,21,24,25,26,27,32,35,36],beginn:9,behavior:27,behaviour:[11,13,21,25],being:[4,14,16,20,30],below:[4,6,10,11,14,21,26,27,29],benefit:19,besid:32,best:[2,24,27,32,35],better:[2,7,9,22,24,32],between:[4,22,27],big:27,bigger:14,biggest:16,bin:[2,10,11,20,24,26,34,37],binari:[34,37],bing:14,bingbot:4,bit:[11,27],bitbucket:0,black:27,blank:[14,27],block:[4,14,23],blog:[11,27,30],bodi:[10,21,27],boilerpl:24,bold:27,boldfac:27,born:21,bot:4,both:[11,19,20,21,28,32],botlimit:4,bottom:13,boundingbox:22,box:[1,6,30,36],branch:[21,24,35],brand:[24,35],bring:[24,27],broken:27,browser:[10,13,14,16,20,21,24,32,36],bug:[11,17,24,26],buggi:11,bugreport:[11,21],build:[1,5,6,8,10,23,36],buildenv:24,builder:27,buildhost:[5,24,30,35,38],built:[21,22,26,27],builtin:[5,25,30],bundl:10,calcul:9,call:[16,19,24,29,36],callback:25,can:[0,1,2,4,6,7,8,9,10,11,12,14,16,18,19,20,21,22,24,25,26,27,30,32,34,36,37,38],cancel:27,cannot:[2,27,32,34,37],capabl:[16,21],caplabl:18,captcha:32,caption:27,cardin:21,care:[14,27,35,36],carv:19,cat:[34,36,37],catcher:27,categori:[0,3,13,14,18,22,27,28,33],caution:27,caveat:27,cdn:2,cell:27,cfg:[3,27],cgi:11,chain:24,chainabl:33,chang:[11,14,20,21,24,27,35],chapter:[4,20,21,27,37,38],charact:[21,27],chdir:11,check:[2,5,18,21,22,24,26,29],checker:24,checkout:21,chmod:11,choic:[6,10,27,32,35],choos:[6,21,22],chown:[7,9,10,11,34,37],chronolog:27,citi:22,classifi:27,clean:[23,36],clear:32,cli:29,client:4,clita:27,clock:20,clone:[6,8,9,10,21,24,26,38],close:10,cmd:[35,36],code:[11,14,18,23,24,26,28,32,35,36],codebas:16,coffe:36,col:27,colleagu:19,collect:2,colon:27,colspan:27,column:27,com:[6,8,10,22,24,26,27,28,29,34,36,37,38],combin:7,come:[4,9,19,20,21,24,32,36],comfort:[11,27],comma:[19,28],command:[2,4,7,10,11,20,26,27,29,30,34,37,38],comment:[7,9,10,27,34,36,37],commit:[24,26,29],commodi:27,common:[11,26,30,32,34,37,38],commonli:27,commun:[7,9,18],compact:27,compani:32,compar:[7,9,11,36],compat:20,compil:[7,23,29],complet:[4,11,21,28,34,36,37,38],compon:[7,25,35],compromis:32,comput:32,con:27,concern:21,conclus:31,concret:[19,27],condit:27,conf:[2,7,9,27,34,37],config:[0,11,19,22,27,29,34,35,36,37,38],configur:[5,7,9,11,16,18,19,23,27,29,32,34],conflict:35,confnam:11,confus:27,connect:[4,9,10,18,30],consectetur:27,consequ:[14,21],consequat:27,consetetur:27,consid:6,construct:[22,27],consult:26,contact:14,contain:[10,13,14,26,27,35,36],content:[5,17,23,30,31,32,35],context:[25,27,36],continu:27,contribut:[1,2,23,24,30],contributor:27,control:[7,11,32],convent:21,convert:27,cooki:[22,30,32],copi:[10,21,27,36],copyright:27,core:[2,11,18],corner:21,correct:[9,14],correctli:9,correspond:11,could:[11,14,22,27],count:27,countri:[14,22],courgett:28,cours:27,coverag:26,crawler:27,creat:[5,6,7,9,11,14,18,20,26,27,28,29,35,38],creation:[2,27],creativ:19,cross:27,cryptic:26,cryptographi:14,cspan:27,css:[13,25],css_depend:25,csv:[4,28],csv_tabl:27,ctan:27,cthulhu:33,ctrl:[10,24],ctx:25,cup:36,curl:[4,10],current:[13,14,18,21,22,29,33],custom:[14,21,27,33],customiz:[0,16],customlog:7,cycl:24,daemon:[34,37,38],dai:[11,24,28],dalf:1,danger:27,data:[5,22,27,32],databas:[19,27],date:[0,22],datetim:[22,27],daunt:16,dbpedia:28,ddg:33,de_d:14,deactiv:[14,34,37,38],debian:[2,5,9,10,11,15,27],debug:[10,14,23,24,34,35,37,38],decid:[16,24],decim:22,dedic:[11,27],deeper:[24,27],def:[18,22,25,27],defaul:27,default_local:[0,14],default_on:25,default_them:[0,14],defin:[14,25,27],dejavu:2,delet:[14,28,29,36],delimit:27,demon:10,demonstr:9,deni:7,depend:[4,5,7,9,13,16,18,20,22,24,26,27,28],deploi:[8,14,24,27],describ:[4,6,7,11,14,24,27,38],descript:[13,21,25,27,34,37],deserv:21,design:[18,27],desir:[22,26],detail:[7,14,18,27],detect:14,deutsch:[0,14],dev:[2,7,9,10,21,24,27],devel:[2,10],develop:[2,10,14,16,17,19,20,21,24,27,30,35],dfrac:27,diam:27,dict:27,didn:14,diff:27,differ:[7,9,11,20,21,22,27,36],digit:30,digraph:27,dir:[10,34,37],direct:[7,23,27,34,37],directli:[9,14,36],directori:[7,11],disabl:[3,5,10,11,13,14,24,25,27,28,35,36],disabled_engin:28,disabled_plugin:28,disadvantag:27,discoveri:[18,19],discret:35,displai:[2,13,14],displaystyl:27,dispos:35,disrespect:21,dist:[21,24],distinguish:27,distribut:[7,9,11,19,27,34,37],distributor:5,dive:32,dnf:[2,7,9,10,27],doai_rewrit:28,doc:[5,7,11,23,27,36],docker:[5,6,24,30],dockerfil:8,docs_url:24,doctest:27,doctre:27,docuemt:2,document:[7,11,18,19,24,27,30,36],documentroot:7,docutil:27,doe:[7,11,16,18,22,24,27,28,31],doesn:14,doi:13,dolor:27,domain:27,domin:21,don:[7,20,24,27,30],done:[7,9,24,27,35,36],dontlog:7,dot:2,doubl:27,download:[6,24,27,34,37],drop:20,duckduckgo:[28,33],due:[34,37],duo:27,duref:27,dvisvgm:2,each:[11,27,28],easi:30,easier:21,easili:21,echo:[10,34,36,37],ecosystem:27,edit:[10,11,16,21,24,27,32,37],eeach:36,effect:[21,27],egg_info:24,eirmod:27,either:26,element:27,elimin:26,elit:27,elitr:27,els:36,emac:27,email:14,emb:[5,27],embed:[0,8,27],emperor:11,emphasi:27,empti:[7,27,28],en_u:[14,22],enabl:[0,7,9,10,11,19,21,24,26,28,35],enabled_engin:28,enabled_plugin:28,enclos:27,encod:27,encourag:27,encrypt:30,end:[20,27,36],endfor:27,engin:[0,5,10,16,17,21,23,26,27,28,30,32,33,34,37],english:[0,14],enim:27,enough:[6,7,9,29],enpoint:28,ensur:21,enter:[10,20],entri:[23,35,36],env:[7,11,24,26,35,36],environ:[9,10,23,30,34,36,37,38],eof:[34,36,37],eol:36,eos:27,equat:[2,23],erat:27,error:[14,26,27],error_log:9,escap:27,especi:27,esperanto:0,essenti:[2,10],est:27,etc:[4,7,9,10,11,21,34,38],eth0:36,evalu:[27,36],even:[11,36],event:11,ever:36,everi:[14,21,22,32,36],everyon:[18,32],everyth:[10,27,32],exactli:[4,27],exampl:[0,4,7,9,11,18,19,21,23,26,28,31,32,35,36],exceed:4,excel:[6,9],except:[7,20,21,27,35],exchang:32,execstart:[34,37],execut:[14,29],exercit:27,exist:[7,9,16,20,21,24],exit:10,expect:[19,21],experi:11,experienc:16,experiment:35,explain:21,explanatori:[34,36,37,38],explicit:27,expos:19,ext:2,extend:[18,21,25,27],extens:[2,27],extern:[4,12,22,27,28,32],extra:[2,7],extract:2,extrem:16,eye:27,face:27,fact:17,fail:26,fals:[0,10,14,25,26,27,28,37],familiar:[11,24],fanci:21,faq:27,favorit:[21,24],fd00:7,fe80:7,featur:[12,16,19,21,27,32],fedora31:36,fedora:[2,7,9,10,11,27,36],fedoraproject:36,feedback:[21,27],feedfetch:4,feel:[25,27],few:[14,21,22],fieldnam:27,figur:[7,9,23],file:[2,3,7,9,10,11,14,16,18,19,20,21,24,25,26,29,34,36,37,38],file_filt:29,filenam:22,files:22,fill:27,filter:[0,4,28],filtron:[1,5,6,7,9,11,30,35,36],filtron_api:[34,35,36],filtron_listen:[34,35,36],filtron_target:[34,35],find:[1,4,18,19],fine:[6,10],finish:[29,36],firefox:2,firewal:4,first:[6,7,9,10,16,18,20,24,26,27,32],fit:[11,19,25],fix:[21,24,26],fixm:7,flask:[25,27],flexibl:[27,35],fmt:36,folder:[7,9,10,11,21,22,24,26,27,29,35,36],follow:[4,6,7,9,11,12,21,22,24,26,27,29],followsymlink:7,font:2,fontsrecommend:2,footer:21,force_timeout:[35,36],fork:[6,21,35],form:[0,27,32],format:[4,22,26,27,28],forward:[4,9,32],found:[2,16,17,24],foundat:[16,18,19,20],fr_fr:14,fraction:27,free:[25,30],fresh:7,friend:[19,24,32],from:[1,2,4,6,7,8,9,10,11,13,14,16,18,19,20,21,24,27,29,30,32,34,35,36,37,38],front:27,full:[14,21,27,34,37],fulli:[7,9,16],fun:17,fund:[18,19],further:[24,26,35],furthermor:[22,26,28,32],futur:36,gain:32,gate:24,gener:[0,7,11,14,18,21,23,24,32],geojson:22,german:0,get:[2,4,5,6,7,9,10,13,21,22,24,26,27,28,29,30,34,36,37],get_engines_stat:27,gid:11,gil:11,git:[2,6,7,8,9,10,14,15,21,22,24,26,27,34,35,37,38],git_branch:[24,35],git_url:24,github:[6,8,10,18,20,24,26,27,28,34,36,37,38],gitmoji:21,give:[7,24,26],given:27,glob:11,global:5,global_ip:36,glyph:27,gnu:24,go1:[34,37],go_env:[34,37],goe:24,goi:0,going:[4,18,19,27,32],good:[6,7,9,26,36],googl:[0,28,34,37],googlebot:4,gopath:[34,37],grant:[7,11],graphic:16,graphviz:2,grep:36,group:[27,32,34,37],grow:16,grumpi:27,grunt:26,gubergren:27,guest:36,guid:[9,16,24,26,27],guidelin:19,guilabel:27,hack:[16,18,19,20,21],hackabl:23,hackerspac:33,handl:[14,27,32,36],handler:7,happi:[16,18,19,20,21],hard:[16,27],harden:[34,37],has:[12,18,19,21,22,26,27,32],hat:27,have:[2,6,7,8,9,10,14,16,20,21,22,24,27,32,35,36],hbar:27,head:10,header:[4,7,9,22,27],headers_modul:7,heard:27,hebrew:14,height:27,help:[13,21,24,26,34,35,36,37,38],helper:27,her:[19,28,32],here:[2,7,9,11,14,18,21,27,35],herein:1,hidden:[0,19,32],him:19,hint:[1,27,35],his:[28,32],histor:[7,20],hit:10,home:[10,29,34,35,37],host:[2,4,7,9,10,16,19,24,29,30,36],hostnam:[9,36],hotkei:[0,13],hous:22,house_numb:22,how:[1,2,5,6,7,9,11,14,17,23,24,27,30,31,34,37],howev:[18,22,28],html:[0,2,7,11,21,22,24,27,37],html_math_render:2,http:[0,2,4,5,6,8,10,11,12,13,14,18,21,22,24,26,27,29,30,34,35,36,37,38],http_connect:[4,9],http_host:[4,9],httpd:7,https_rewrit:28,hub:8,huge:27,idea:26,identifi:[35,36],ifmodul:7,illustr:6,imag:[0,2,12,14,23,24,28,33,36,37,38],image_proxi:[7,9,14,28,37],imagemagick:[2,27],img_src:22,imgmath:2,imgmath_font_s:2,imgmath_image_format:2,imgmath_latex:2,immedi:13,implement:[9,11,16,20,21,22,25,36],impli:19,improv:24,in_contain:36,inbound:14,includ:[7,9,19,24,27,36],inclus:33,incom:7,increment:24,indent:[27,36],index:7,infinit:13,infinite_scrol:[13,28],info:[14,24,36,37],info_msg:36,inform:[8,12,13,14,19,21,22,36],infrastructur:[1,11],infratructur:4,inherit:27,ini:[7,9,11],init:[11,18,23,36],initi:[11,29,36],inlin:23,input:[0,19,27],insecur:10,insert:[27,29],insid:[10,22,36],insight:32,inspect:[34,35,37,38],instal:[1,2,4,5,11,12,20,21,24,26,27,29,30,35],instanc:[0,1,5,6,7,8,9,11,14,16,18,19,24,28,29,30,31,34,35,36,37,38],instance_nam:[0,10],instead:[11,16,19,20,26,27],instruct:27,insuffici:18,integr:30,intent:21,interact:[10,34,35,37,38],interfac:[7,14,17,30],interfer:21,intermedi:24,intern:26,internet:[6,18,30],interpret:[11,27],interpretor:11,intersphinx_map:27,interv:4,intranet:[6,7,9],intro:[7,9],introduc:[16,17,18,19,27,30],introduct:[24,26],intuit:27,inv:27,inventori:27,investig:20,invidunt:27,ipsum:27,ipv4:[9,36],ipv6:[9,36],isn:[7,9],iso:[14,22],isol:4,issu:[11,18,19,20],ital:27,italiano:14,item:27,its:[2,6,16,21,24,27,28,32,36],itself:[11,21],jame:4,japanes:14,javascript:[13,23],jinja:27,jinja_context:27,job:35,join:27,js_depend:25,json:[4,28,34],juli:36,jump:24,just:[0,4,9,24,27,32,36],justo:27,kasd:27,kbd:27,keep:[7,9,24],kei:[12,13,14,18,22,29,37,38],kind:[7,27,32],kiss_:27,know:[7,11,18,19,27,32,36],knowledg:27,known:24,kvch:[16,18,19,20],label:27,labor:27,labori:27,lack:21,lang:[0,28,29],languag:[0,3,14,22,24,27,28,29,33],language_support:[22,27],laptop:32,larg:[11,34,36,37,38],last:27,lat:22,later:[35,36],latest:[11,29],latex:2,latexextra:2,latitud:22,latter:24,launch:36,layout:5,lazi:11,lc_messag:29,learn:27,least:20,leav:14,leech:22,leecher:22,left:[10,27],legaci:28,length:21,less:[7,9,11,16,26,27,32],let:[27,32,35],level:[21,27],lib:[7,11,34,37],libapache2:7,libffi:[2,10],librsvg2:2,librsvg:2,libssl:[2,10],libxml2:[2,10],libxslt:[2,10],licens:[35,36],light:9,like:[0,2,8,10,13,14,19,21,22,24,27,35],like_hotkei:28,limit:[4,7,17,18,27,30],line:[7,9,18,21,24,36],link:[11,13,14,23],linkdexbot:4,lint:[5,24],linux:[0,2,7,9,10,11,19,27,34,35,36,37],linuxcontain:36,linuxcontainers_org_nam:36,linuxdoc:27,list:[7,18,19,22,23,24,25,28,33],listen:[4,7,9,34,35,36,37],liter:23,literalinclud:27,live:[23,27,36],load:[11,13,14,36],loadmodul:7,local:[0,4,9,10,11,14,19,20,22,24,25,26,29,34,35,36,37,38],local_imag:36,localhost:[7,8,9],locat:[4,7,9,10,11,14,27],log:[4,5,11,14,26,32,34,35,37,38],logger:11,logic:21,logicodev:28,login:10,lon:22,longer:24,longitud:22,look:[7,10,24],lorem:27,loremlorem:27,low:[7,9],lsb:11,lxc:[30,35],lxc_host_prefix:36,lxc_repo_root:36,lxc_set_suite_env:36,lxc_suit:36,lxc_suite_info:36,lxc_suite_instal:36,lxc_suite_install_info:36,lxc_suite_nam:36,lxd:36,lxml:[2,10],made:14,magna:27,magnetlink:22,magyar:14,mai:[14,27,34,37],main:[7,13,24,29,35],mainlin:9,maintain:[1,11,27,35],mainten:[4,6,34,37,38],make:[2,8,16,19,20,21,23,27,32,36],makefil:[21,23,30,35,36],man:27,manag:[4,10,15,16,24,26,34,37,38],mandatori:6,mani:4,manipul:[16,36],manual:[14,24,27],manuali:27,map:[0,27],mark:[10,27],markup:23,mass:21,master:[11,15,21,24,27,35],math:[2,23],mathemat:27,mathrm:27,matter:[22,32],max:[4,22],maxim:21,maximum:[21,22],mean:[11,21,27,32],meaning:27,meant:27,media:[0,22],memori:14,mention:20,menuselect:27,messag:[4,14,21,24,26,27,29],messagespo:29,meta:27,metadata:27,metasearch:[10,22,30,34,37],method:[0,6,11,22,27],middlewar:4,might:[11,19,21,24,27,28,32,35,36],migrat:20,min:22,minim:27,misbehav:21,miss:27,mj12bot:4,mkdir:[7,9,10,11,34,37],mod:[7,27],mod_autoindex:7,mod_head:7,mod_proxi:7,mod_proxy_http:7,mod_proxy_uwsgi:7,mod_uwsgi:7,mod_wsgi:7,mode:[11,14,27,35,36],modern:7,modifi:[11,14,27,33],modul:[7,11,27],monet:32,monitor:11,mono:2,month:[0,28],more:[4,8,12,14,16,18,21,24,27,28,30,32,35,36],morecol:27,morerow:27,morti:[1,6,7,9,12,30,35,36],morty_listen:[35,36,37],most:[2,7,14,20,32,34,35,37,38],mostli:[11,27],move:[18,21],msnbot:4,much:[21,27],multi:[34,37],multibl:22,multipl:[13,14,27,32],multithread:11,multius:10,must:[9,14,20,21,22,26,27],my_arg:27,my_funct:27,my_other_arg:27,mydomain:35,myproject:26,name:[0,3,4,7,8,9,10,13,14,19,22,24,25,29,36],nativ:11,navig:13,necessari:[10,19],nederland:14,need:[4,6,7,9,10,11,14,18,21,24,27,32,34,35,36,37,38],neither:30,net:30,netvib:4,network:[14,34,37],never:24,nevertheless:[7,9],newcom:16,nework:14,next:[7,9,13,17,27],nginx:[1,4,5,6,14,30,34,36,37,38],nightmar:27,nil:36,nisi:27,nlnet:[16,18,19,20],noconfirm:[2,10],node:[24,26],nodej:26,non:18,none:[7,22,24,27,28],nonewprivileg:[34,37],nonumi:27,nor:30,normal:[7,22,27,35],nostrud:27,note:[7,9,21,28],now:[7,9,10,19,20,25],npm:[24,26],number:[4,14,22,27,28,36],number_of_result:22,numer:27,numref:27,obj:27,object:[22,25,27],obtain:14,off:[7,9,21,34,36,37,38],offer:11,offlin:[3,17,19,22,27,30],often:[22,27,35],old:7,on_result:25,onc:36,one:[7,11,14,19,21,24,27,30,32,34,35,36,37,38],ones:[22,34,37],ongo:24,onli:[2,6,7,12,14,19,21,25,27,28,35,36],onlin:[18,27,30],open:[7,10,13,20,21,24,27,28,32,35,36],open_results_on_new_tab:13,openstreetmap:0,oper:[20,27,32],option:[7,10,11,12,14,16,19,21,22,24,25,26,27,28,32,34,35,37,38],order:[7,21,26,27],org:[2,4,7,9,11,14,22,27,36],org_bot:4,organ:30,orient:7,origin:[5,15,27],oscar:[0,14,28],osm:[0,22],other:[14,21,22,27,32],otherwis:22,our:[1,4,6,16,21,24,27,36],out:[7,9,18,21,24,27,34,36,37],outgo:14,outgoing_proxi:14,output:[2,19,27,28,34,36,37,38],outstand:27,over:[27,30,36],overlin:27,overview:[4,14,23,24,28,30,35],overwrit:13,overwritten:22,own:[6,24,30,32],owner:24,packag:[2,4,5,7,9,11,24,26,27,34,36,37,38],pacman:[2,7,9,10,27],page:[3,7,9,13,14,16,19,21,22,23,27,28,32,33],pageno:[22,28],pagenumb:22,pair:18,palletsproject:27,param:[4,18,22,27],paramet:[22,23],paramt:22,parent:27,pars:28,parse_lin:18,part:[14,16,27,36],parti:32,partial:27,partli:22,pass:[7,9,18,28],past:0,patch:[21,27],path:[4,7,14,34,36,37],paywal:13,pdf:2,peopl:[16,32],pep8:[21,24,26],pep8_check:24,pep:27,per:[11,21,22,27],perform:[11,13,18,22],phase:26,phrase:27,piec:27,pip3:20,pip:[2,10,29],pipe:18,pix:28,place:[6,9,11,21,22,27,29,32],plaintext:27,pleas:[20,21,26,27,28],plenti:21,plu:[7,9],plugin:[0,2,5,10,11,21,23,28,30],pocket:[7,9],point:[9,10,11,23,24,27,32],pointer:27,pointhi:28,polygon:27,popen:18,popular:27,port:[4,8,9,10,14,36],possibl:[8,12,13,14,18,19,27,28],post:[0,21,28],post_search:25,postcod:22,pot:29,pov:27,power:27,practic:21,pre_search:25,prefer:[6,16,19,27,28,32,33],prefix:33,preinstal:4,prepar:[17,30,36],prerequisit:27,present:[18,19],preserv:[21,27],press:[13,24],pretti:14,preview:22,previou:35,primari:36,primary_ip:[35,36],prime:23,primer:[23,30],principl:27,privaci:[6,7,9,10,11,23,27,31,34,37],privat:[17,18,30,31],privatedevic:[34,37],privatetmp:[34,37],pro:27,problem:4,procedur:[6,36],process:[2,4,11,18,19,24],processor:27,produc:27,product:[14,35],profil:[10,24,30,32,34,37],program:24,progress:[17,34,37],project:[11,23,24,27],promot:30,prompt:35,proper:[32,34],properli:20,propos:18,protect:[1,5,7,9,21,30,31,34],protectsystem:[34,37],protocol:[9,11],provid:[19,21,22,27],proxi:[1,5,6,9,14,28,30,32,34,35,36,37,38],proxif:[7,9],proxifi:12,proxy_add_x_forwarded_for:[4,9],proxy_buff:9,proxy_http:7,proxy_http_modul:7,proxy_modul:7,proxy_pass:[4,9],proxy_set_head:[4,9],proxy_uwsgi_modul:7,proxypass:[7,34,37],proxypreservehost:7,psi:27,public_host:34,public_url:[34,35,36,38],public_url_morti:[36,37],public_url_path_morti:35,publicli:18,publish:22,publishedd:22,pull:[8,15,18,21,27,29],purpos:[14,22,26],push:[21,24],py3:24,pybabel:29,pybuild:23,pyclean:24,pyenv:[10,11,24,38],pygment:27,pylint:23,pylintrc:24,pypi:[24,27],python2:[11,20],python3:[2,10,11,20,26],python:[2,4,10,11,14,17,23,26,27,30,38],pythonhom:11,pythonpath:11,qout:36,quadratur:30,qualiti:[2,24,27],queri:[13,18,19,22,28,32,33],question:[27,32],qui:27,quickstart:[21,23,24,30],quiet:24,quit:[7,21,24],qwer:33,rais:18,random:[22,32],rang:[3,11,22,28],rangl:27,rate:4,rather:19,raw:27,reach:27,reactiv:14,read:[18,21,24,26,35],readability_:27,reader:27,readlin:18,readm:[4,7,11,12],readthedoc:11,real:[4,9],realli:6,reason:[7,11,16,20,24,27],rebuild:[21,24],rebum:27,recommend:[2,4,6,11,21,22,24,27,35],reconsid:21,record:27,redefin:22,redirect:13,reduc:21,ref:[34,37],refer:[1,27,32],referenc:27,refnam:27,regardless:32,regular:18,reinstal:[34,38],rel:[9,27,36],releas:[20,24,36],releng:36,reload:11,rememb:[11,21],remot:36,remote_addr:[4,9],remov:[11,13,32,34,35,36,37,38],renam:28,render:2,replac:[7,9,10,16,25],repo:21,repositori:[10,16,36],request:[5,7,9,14,18,19,21,23,25,27,32],request_timeout:14,request_uri:7,requesthead:7,requir:[2,7,13,20,21,22,23,24,26,27,28],requisit:24,reset:32,resourc:9,respect:[10,21,32,34,37],respons:14,rest:[19,23,30],restart:[5,9,10,11,12,15,34,37],restrict:19,restructuredtext:27,result:[1,2,5,6,7,9,13,14,18,23,27,28,30,32,37,38],result_proxi:[7,9,12,37],results_on_new_tab:28,retriev:29,return42:[27,38],return_cod:18,rever:7,revers:[1,5,6,9,34,35,36,37],rewrit:[0,13],rfc:27,rhel:[2,7,9,10,11,27],rid:[24,36],right:[11,19,25,27,30],rightmost:27,rigth:27,road:22,roboag:4,robot:[24,26],robotframework:20,role:23,rolenam:27,roll:36,romanian:14,root:[7,9,24,36],rotat:27,round:21,rout:[5,7,9,27],row:27,rowspan:27,rspan:27,rss:[4,28],rst:[21,27],rst_titl:36,rule:[4,21,34],run:[2,4,6,7,8,9,11,12,14,17,18,19,21,22,23,25,27,29,32,34,35,37,38],runtimeerror:18,russian:14,ryzen:10,sadipsc:27,safe:[3,28],safe_search:0,safesearch:[27,28],same:[4,10,13,14,22,27],sampl:[5,27,34],san:2,sanctu:27,satisfi:26,save:7,sc2031:36,sc2034:[35,36],scalabl:27,scale:[27,36],scaleabl:27,scan:11,schedul:[18,20],scheme:[4,9],schroeding:27,scope:21,scrapi:4,scratch:2,script:[1,4,5,7,9,10,26,34,35,36,37,38],script_nam:9,scroll:13,sdist:24,sea:27,search:[3,4,5,13,14,18,19,21,22,23,27,30,31,32],search_on_category_select:[13,28],search_path:22,search_str:22,searx:[0,1,2,4,5,6,7,8,11,12,14,15,17,18,21,22,24,25,26,27,28,29,31,33,34,35,37],searx_instance_nam:38,searx_internal_http:38,searx_internal_url:35,searx_settings_path:[10,11],searx_url:[24,35],searx_userag:14,sec:4,second:[10,14,27],secret:[14,19],secret_kei:14,section:[9,14,24,27],secur:30,sed:[10,27],see:[2,4,7,8,9,11,12,14,18,19,21,26,27,28,30,33,34,36],seed:22,seeder:22,select:[13,24,27,32,33,36],selenium:26,self:[13,16,30,34,36,37,38],self_inform:28,semant:21,send:[2,4,14,32],sens:27,sent:32,separ:[19,21,27,28,34,37],seri:24,serif:2,serv:[21,32,36],server:[4,5,6,11,14,26,36,37],server_nam:9,servic:[4,5,6,9,11,12,27,28,30,32,34,35,36,37,38],service_home_bas:35,service_us:[34,35,37,38],service_ussr:35,session:[10,26],set:[2,3,5,7,9,10,11,12,16,18,24,26,27,28,29,30,32,33,34,35,36,37,38],setenvif:7,sethandl:7,setup:[1,2,4,5,6,7,9,10,11,23,27,30,34,37],seznambot:4,share:[7,11,19,36,38],she:[19,32],shell:[5,10,34,35,36,37,38],shellcheck:[2,10,27,35,36],ship:9,shortcut:[0,3,14,19,22,27],should:[6,7,9,14,16,20,21,27,29],show:[1,2,7,9,27,34,35,36,37],shown:[6,7,10,27],side:27,sign:27,signifi:27,similar:[11,27],simpl:[24,28,34,37],simplest:27,simpli:[4,21,24,28,34,35,37,38],simplifi:[4,24,34,37,38],sinc:[9,16,24,27],singl:[7,9,11,32,36],sit:27,site:[0,4,5,7,14,22,27,28,34,37,38],size:22,skeleton:18,skill:23,skip:26,slow:14,slurp:4,small:[22,38],smtbot:4,snap:36,snapcraft:36,snippet:12,social:0,sock:14,socket:[7,9,11],soft:23,softwar:[34,37],sold:32,solut:19,solv:[4,19],some:[1,6,7,11,14,19,21,24,27,34,35,36,37,38],someon:32,someth:[21,24],sometim:16,sourc:[10,14,20,23,24,27,29,32,34,36,37],source_fil:29,source_ip:14,source_lang:29,space:14,span:27,spars:27,spdx:[35,36],speak:11,special:[6,11,22],specif:[11,14,22,36],specifi:[11,14,22,28],sphinx:21,splinter:20,split:21,spoilt:6,sponsor:[16,18,19,20],src:[4,9,10,11,38],srv:7,ssl:[22,30],stabl:14,stack:[26,36],stage:27,standalon:16,standard:[7,21,22,36],start:[1,4,7,9,10,11,21,22,24,30,34,36,37,38],startpag:28,stash:[15,24],stat:27,statist:27,statu:[34,35,37,38],stdout:18,step:[1,5,6,17,21,30,38],stet:27,stone:19,stop:[4,7,9,10,11,24,34,36,37,38],storag:36,store:[22,32],strang:11,street:22,strict:19,string:[19,22,28,29],stroke:27,strong:27,structur:[21,23],stub:27,stuff:27,style:[23,28],sub:[21,27],subdir:9,subdirectori:9,subject:27,submit:21,subnet:7,subprocess:18,subrul:4,subscript:27,subsect:27,subshel:36,substitut:23,sudo:[2,6,7,9,10,11,15,26,27,34,35,36,37,38],suffix:14,suggest:[1,25],suit:35,suitabl:27,sup:27,superscript:27,supervisor:16,support:[2,3,5,9,10,11,14,17,19,21,22,27,28,30,32,34,36,37],sure:[8,10,20],surround:27,svg:2,svg_imag:27,symbol:11,symlink:9,syntax:[28,30,31],syslog:[34,37],system:[10,11,19,20,21,24,27,34,35,37],systemctl:[7,9,11,15],systemd:[11,34,37,38],tab:[13,23,28,36],tabl:[18,23],tailor:32,take:[11,14,16,21,29,36],taken:[27,35],takimata:27,tar:[24,34,37],target:[21,23,27,30,34,36,37],task:[6,10,27,36],tcp_nodelai:10,tell:22,templat:[11,18,22,23],tempor:27,term:[7,27],termin:10,test123:38,test:[2,7,9,10,20,21,23,36,38],texliv:2,text:[0,22,27],textstyl:27,tfrac:27,than:[14,27,30],thei:[11,14,19,27,32],them:[11,14,24,27,35],theme:[14,23,24,28],themes_path:14,themselv:19,therefor:[6,27],thi:[4,6,7,8,9,10,11,12,13,14,16,18,19,20,22,24,25,26,27,28,32,34,35,36,37,38],thing:27,think:[21,24,27],third:[27,32],those:[18,29,32],thread:11,three:[21,25,27,32],through:[5,7,9,14,19,27,28,32],thu:[18,20,28,32],thumbnail:22,thumbnail_src:22,time:[4,14,20,21,22,27,28,32,36],time_rang:[0,28],time_range_support:[22,27],timeout:[3,14,22,27,35,37],timestamp:11,tip:[23,27],titl:22,todai:18,togeth:18,token:[18,19],too:[4,14,27,32],tool:[1,2,6,10,16,21,27,29,30,36],top:27,tor:[30,32],torrentfil:22,touch:[7,9,11,14],trace:26,track:[30,32],tracker:13,tracker_url_remov:28,trademark:27,traffic:[7,9],train:27,transform:27,transifex:[21,23],transifexrc:29,translat:[14,23,30],transpar:36,travi:[20,26],tree:24,troubleshoot:35,trust:[19,30,32],ttf:2,tupl:25,turn:[21,26],twice:10,twine:24,two:[11,21,27,28],txt:[20,24,27],type:[0,21,22,24,28,29,32,34,36,37],typic:[1,27],typo:27,ubu1604:36,ubu1804:36,ubu1910:36,ubu2004:36,ubuntu:[2,7,9,10,11,15,27,36],uds:7,ugli:[16,27],uid:11,ullamco:27,ultrasecretkei:[10,14],unam:[10,36],uncom:14,uncommon:21,under:[19,22],understand:[16,27],unfortun:21,unicod:23,uninstal:[24,35],unit:[11,21,24,34,37,38],unit_test:[24,26],univers:10,unix:[7,9,11],unknown:[32,34,37],unless:19,unlik:32,unspecifi:22,untouch:24,updat:[5,14,21,23,30,34,37,38],update_dev_packag:26,update_packag:[10,15],upload:24,upstream:11,url:[0,7,9,12,13,14,21,22,24,32,35,36,37,38],urlencod:22,usag:[6,7,9,24,27,34,36,37,38],use:[2,4,6,7,9,11,12,14,18,19,21,22,24,26,27,30,31,34,35,36,37,38],used:[7,9,14,20,21,22,27,30,32,35],useful:[14,35],user:[4,5,7,9,11,13,14,19,21,22,27,30,32,35,38],useradd:[10,34,37],userag:4,useragent_suffix:14,uses:[11,14,22,27,32],using:[4,7,9,11,14,17,21,24,26,27,29,30],usr:[4,7,9,10,11,34,35,37,38],usual:[20,32],utf:[27,35,36],util:[1,2,4,6,7,9,12,24,30],uwsgi:[1,2,5,9,10,15,30,38],uwsgi_param:9,uwsgi_pass:9,uwsgisocket:7,valid:[22,26,28],valu:[0,9,18,22,27,28,35],variabl:[22,24,37],variant:27,variou:[21,25],vassal:11,vector:27,vendor:21,veniam:27,venv3:20,venv:[2,10,26],verbos:[10,24,35],veri:35,verifi:22,vero:27,version:[10,13,20,27,34,37],via:[7,9,11,16,33],view:[23,32],viewbox:27,vim:[0,13,28],vim_hotkei:13,virtual:[7,9],virtualenv:[2,10,11,20,24,26,38],virualenv:[10,24],visist:27,visit:[10,27,32],voluptua:27,vpn:32,vulner:32,wai:[11,18,21,22,27,32],wait:[14,18],want:[14,19,20,21,24,27,28,32,35,36],wantedbi:[34,37],warn:[2,7,9,27,36],watch:21,web:[4,10,14,16,24,34,36,38],webapp:[10,11,14,20,24,27],webcrawl:4,webserv:9,websit:0,weight:[14,27],weigth:[3,14],weird:21,welcom:[7,9],well:27,were:[18,19,20],werkzeug:24,wget:[4,34,37],what:[11,27,36],whatev:[8,24,36],when:[2,7,13,14,20,25,26,27,32],where:[4,14,27],whether:[26,32],which:[1,4,7,9,11,14,16,18,19,21,22,24,27,28,30,32,34,37],whl:24,who:[11,16,18,32],whole:[7,25],why:[27,30,31],wide:21,widen:27,width:27,wiki:[0,9,18,19,27,36],wikipedia:[14,28,33],window:13,wish:14,within:[24,27],without:[2,14,22,30,32],won:[14,20],wonderfal:8,word:[25,27,28],work:[9,10,14,21,22,24,26,32],worker:11,workingdirectori:[34,37],world:[21,27,32],worri:20,worth:[11,32],would:19,wrap:9,wrong:24,wsgi:[9,11],www:[2,7,27,29,36],wysiwyg:21,xdg:24,xetex:2,xgd:10,xml:27,xmln:27,xxxx:27,xzf:[34,37],yacybot:4,yahoo:4,yandexbot:4,yandexmobilebot:4,year:[20,28],yes:[34,37],yet:[21,22,24],yml:[3,5,7,9,10,11,12,16,18,24,26,28,30,37,38],you:[1,2,4,6,7,8,9,10,11,14,17,18,21,24,26,27,28,30,32,33,34,35,36,37,38],your:[2,4,6,7,9,10,11,12,13,14,16,17,20,21,23,24,25,27,30,34,35,36,37,38],your_morty_proxy_kei:12,yourself:21,yyyi:27,zero:18,zgrab:4,zlib1g:[2,10],zzzz:27},titles:["Administration API","Architecture","Buildhosts","Engines","How to protect an instance","Administrator documentation","Installation","Install with apache","Docker installation","Install with nginx","Step by step installation","uwsgi","How to setup result proxy","Plugins builtin","<code class=\"docutils literal notranslate\"><span class=\"pre\">settings.yml</span></code>","How to update","Searx admin interface","Blog","Preparation for offline engines","Limit access to your searx engines","Introducing Python 3 support","How to contribute","Engine overview","Developer documentation","Makefile Targets","Plugins","Development Quickstart","reST primer","Search API","Translation","Welcome to searx","User documentation","Why use a private instance?","Search syntax","<code class=\"docutils literal notranslate\"><span class=\"pre\">utils/filtron.sh</span></code>","Tooling box <code class=\"docutils literal notranslate\"><span class=\"pre\">utils/*</span></code>","<code class=\"docutils literal notranslate\"><span class=\"pre\">utils/lxc.sh</span></code>","<code class=\"docutils literal notranslate\"><span class=\"pre\">utils/morty.sh</span></code>","<code class=\"docutils literal notranslate\"><span class=\"pre\">utils/searx.sh</span></code>"],titleterms:{"default":[3,13,22],"public":[7,9,32],"return":22,The:[7,9,21],about:[27,32],access:19,acknowledg:[16,18,19,20],activ:24,admin:16,administr:[0,5],admonit:27,aka:27,alltogeth:11,anchor:27,apach:7,api:[0,28],architectur:1,argument:22,articl:[2,27],ascii:27,bar:0,basic:27,bibliograph:27,block:27,blog:17,box:[4,35],bug:20,build:[2,21,24,26,27],buildhost:[2,36],built:[3,13],builtin:13,bullet:27,check:10,clean:[21,24],code:[21,22,27],command:[35,36],commit:21,common:35,compil:26,conclus:32,configur:[0,3,4,10,13,22],consequ:32,content:[2,4,7,9,10,11,14,21,22,24,27],contribut:21,creat:[10,21,34,37],csv:27,data:0,debian:7,debug:26,definit:27,depend:10,deploi:21,design:21,develop:[18,23,26],direct:21,disabl:[7,9],distributor:11,doc:[2,21,24],docker:8,document:[5,21,23,31],doe:32,dot:27,drop:24,emb:0,engin:[3,14,18,19,22],entri:25,environ:[24,26,27,35],equat:27,exampl:[22,25,27,33],ext:27,extlink:27,fact:20,featur:30,field:27,figur:27,file:[22,27],filtron:[4,34],flat:27,foo:27,fork:24,found:20,fun:20,further:[1,3,4,7,9,11,12,13,14,25,27,28,34,36,37,38],gate:27,gener:[22,27],get:0,github:21,global:14,good:21,graphviz:27,grid:27,hackabl:21,head:27,hello:27,highlight:27,hlist:27,hook:25,horizont:27,how:[4,12,15,20,21,26,32],http:[7,9],hyperlink:27,imag:[22,27],init:29,inlin:27,instal:[6,7,8,9,10,16,34,36,37,38],instanc:[4,32],interfac:16,internet:[7,9],intersphinx:27,introduc:20,javascript:26,kernel:27,kiss:27,latex:27,layout:7,limit:19,line:27,link:27,lint:2,list:27,liter:27,live:[21,24],log:[7,9],lxc:36,make:[22,24,26],makefil:[24,26],map:22,markup:27,math:27,matter:27,morti:37,name:27,need:2,nest:27,next:[18,19],nginx:9,note:27,offlin:18,ordinari:27,origin:11,overrid:22,overview:[22,34,36,37,38],packag:10,page:24,paragraph:27,paramet:28,pars:22,pass:22,plugin:[13,25],point:25,post:25,pre:25,prepar:18,prime:21,primer:27,privaci:[21,32],privat:[19,32],process:27,progress:18,project:29,protect:[4,32],proxi:[7,12],pybuild:24,pyenv:26,pylint:24,python:[20,24],quickstart:26,quot:27,read:[1,3,4,7,9,11,12,13,14,25,27,28,34,36,37,38],readabl:27,ref:27,render:27,request:[4,22],requir:29,respons:0,rest:[21,27],restart:7,result:[12,22,25],revers:7,role:27,rout:4,run:[20,24,26,36],sampl:[0,4],script:[2,6],search:[0,25,28,33],searx:[9,10,16,19,20,30,32,36,38],see:32,server:[7,9],servic:7,set:[14,22],setup:[12,24,26,35,36],shell:2,sidebar:27,simpl:27,site:9,skill:27,smart:27,soft:27,some:2,sourc:[21,26],space:27,specif:27,sphinx:[2,27],step:[10,18,19],structur:27,style:26,substitut:27,suit:36,support:[7,20],svg:27,syntax:[27,33],tab:27,tabl:27,target:[24,26],templat:27,test:[24,26],theme:26,thi:2,through:4,time:[3,13],tip:26,titl:27,tool:[4,35],torrent:22,transifex:29,translat:[21,29],truth:27,unicod:27,unit:26,updat:[15,29],upgrad:20,upstream:24,url:27,use:32,user:[10,31,34,37],using:[20,32],util:[34,35,36,37,38],uwsgi:[7,11],video:22,view:27,welcom:30,what:32,why:32,work:2,yml:[14,22],you:20,your:[19,26]}})
user/index.html+12−4
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,9 +44,17 @@
4444 <div class="section" id="user-documentation">
4545<h1>User documentation<a class="headerlink" href="#user-documentation" title="Permalink to this headline">¶</a></h1>
4646<div class="toctree-wrapper compound">
47+<p class="caption"><span class="caption-text">Contents</span></p>
4748<ul>
48−<li class="toctree-l1"><a class="reference internal" href="search_syntax.html">Search syntax</a></li>
49−<li class="toctree-l1"><a class="reference internal" href="own-instance.html">Why use a private instance?</a></li>
49+<li class="toctree-l1"><a class="reference internal" href="search_syntax.html">Search syntax</a><ul>
50+<li class="toctree-l2"><a class="reference internal" href="search_syntax.html#examples">Examples</a></li>
51+</ul>
52+</li>
53+<li class="toctree-l1"><a class="reference internal" href="own-instance.html">Why use a private instance?</a><ul>
54+<li class="toctree-l2"><a class="reference internal" href="own-instance.html#how-does-searx-protect-privacy">How does searx protect privacy?</a></li>
55+<li class="toctree-l2"><a class="reference internal" href="own-instance.html#conclusion">Conclusion</a></li>
56+</ul>
57+</li>
5058</ul>
5159</div>
5260</div>
@@ -100,7 +108,7 @@
100108
101109 <div class="footer" role="contentinfo">
102110 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
103− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
111+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
104112 </div>
105113 <script src="../_static/version_warning_offset.js"></script>
106114
user/own-instance.html+7−4
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,8 +44,11 @@
4444
4545 <div class="section" id="why-use-a-private-instance">
4646<h1>Why use a private instance?<a class="headerlink" href="#why-use-a-private-instance" title="Permalink to this headline">¶</a></h1>
47−<p>“Is it worth to run my own instance?” is a common question among searx users.
48−Before answering this question, see what options a searx user has.</p>
47+<blockquote>
48+<div><p><em>“Is it worth to run my own instance?”</em></p>
49+</div></blockquote>
50+<p>.. is a common question among searx users. Before answering this question,
51+see what options a searx user has.</p>
4952<p>Public instances are open to everyone who has access to its URL. Usually, these
5053are operated by unknown parties (from the users’ point of view). Private
5154instances can be used by a select group of people. It is for example a searx of
@@ -161,7 +164,7 @@ instance, have access to a privacy respecting search service.</p>
161164
162165 <div class="footer" role="contentinfo">
163166 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
164− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
167+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
165168 </div>
166169 <script src="../_static/version_warning_offset.js"></script>
167170
user/search_syntax.html+2−2
@@ -1,7 +1,7 @@
11
22<!DOCTYPE html>
33
4−<html xmlns="http://www.w3.org/1999/xhtml">
4+<html>
55 <head>
66 <meta charset="utf-8" />
77 <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -129,7 +129,7 @@ categories and languages.</p>
129129
130130 <div class="footer" role="contentinfo">
131131 &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
132− Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
132+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
133133 </div>
134134 <script src="../_static/version_warning_offset.js"></script>
135135
utils/filtron.sh.htmlnew file+301
@@ -0,0 +1,301 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>utils/filtron.sh &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="utils/morty.sh" href="morty.sh.html" />
25+ <link rel="prev" title="utils/searx.sh" href="searx.sh.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="morty.sh.html" title="utils/morty.sh"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="searx.sh.html" title="utils/searx.sh"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="utils-filtron-sh">
52+<span id="filtron-sh"></span><h1><code class="docutils literal notranslate"><span class="pre">utils/filtron.sh</span></code><a class="headerlink" href="#utils-filtron-sh" title="Permalink to this headline">¶</a></h1>
53+<div class="sidebar">
54+<p class="sidebar-title">further reading</p>
55+<ul class="simple">
56+<li><p><a class="reference internal" href="../admin/filtron.html#searx-filtron"><span class="std std-ref">How to protect an instance</span></a></p></li>
57+<li><p><a class="reference internal" href="../admin/architecture.html#architecture"><span class="std std-ref">Architecture</span></a></p></li>
58+<li><p><a class="reference internal" href="../admin/installation.html#installation"><span class="std std-ref">Installation</span></a> (<a class="reference internal" href="../admin/installation-nginx.html#installation-nginx"><span class="std std-ref">nginx</span></a> &amp; <a class="reference internal" href="../admin/installation-apache.html#installation-apache"><span class="std std-ref">apache</span></a>)</p></li>
59+</ul>
60+</div>
61+<p>To simplify installation and maintenance of a filtron instance you can use the
62+script <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/filtron.sh">git://utils/filtron.sh</a>. In most cases you will install <a class="reference external" href="https://github.com/asciimoo/filtron">filtron</a>
63+simply by running the command:</p>
64+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/filtron.sh install all
65+</pre></div>
66+</div>
67+<p>The script adds a <code class="docutils literal notranslate"><span class="pre">${SERVICE_USER}</span></code> (default:<code class="docutils literal notranslate"><span class="pre">filtron</span></code>) and installs <a class="reference external" href="https://github.com/asciimoo/filtron">filtron</a>
68+into this user account:</p>
69+<ol class="arabic simple">
70+<li><p>Create a separated user account (<code class="docutils literal notranslate"><span class="pre">filtron</span></code>).</p></li>
71+<li><p>Download and install <a class="reference external" href="https://golang.org/">Go</a> binary in user’s $HOME (<code class="docutils literal notranslate"><span class="pre">~filtron</span></code>).</p></li>
72+<li><p>Install filtron with the package management from <a class="reference external" href="https://golang.org/">Go</a> (<code class="docutils literal notranslate"><span class="pre">go</span> <span class="pre">get</span> <span class="pre">-v</span> <span class="pre">-u</span>
73+<span class="pre">github.com/asciimoo/filtron</span></code>)</p></li>
74+<li><p>Setup a proper rule configuration <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/templates/etc/filtron/rules.json">[ref]</a> (<code class="docutils literal notranslate"><span class="pre">/etc/filtron/rules.json</span></code>).</p></li>
75+<li><p>Setup a systemd service unit <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/templates/lib/systemd/system/filtron.service">[ref]</a>
76+(<code class="docutils literal notranslate"><span class="pre">/lib/systemd/system/filtron.service</span></code>).</p></li>
77+</ol>
78+<div class="section" id="create-user">
79+<h2>Create user<a class="headerlink" href="#create-user" title="Permalink to this headline">¶</a></h2>
80+<div class="sphinx-tabs docutils container">
81+<div class="ui top attached tabular menu sphinx-menu docutils container">
82+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
83+<div class="docutils container">
84+<p>bash</p>
85+</div>
86+</div>
87+</div>
88+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
89+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H useradd --shell /bin/bash --system <span class="se">\</span>
90+ --home-dir /usr/local/filtron <span class="se">\</span>
91+ --comment Privacy-respecting metasearch engine filtron
92+
93+$ sudo -H mkdir /usr/local/filtron
94+$ sudo -H chown -R filtron:filtron /usr/local/filtron
95+</pre></div>
96+</div>
97+</div>
98+</div>
99+</div>
100+<div class="section" id="install-go">
101+<h2>Install go<a class="headerlink" href="#install-go" title="Permalink to this headline">¶</a></h2>
102+<div class="sphinx-tabs docutils container">
103+<div class="ui top attached tabular menu sphinx-menu docutils container">
104+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
105+<div class="docutils container">
106+<p>bash</p>
107+</div>
108+</div>
109+</div>
110+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
111+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ cat &gt; /usr/local/filtron/.go_env <span class="s">&lt;&lt;EOF</span>
112+<span class="s">export GOPATH=/usr/local/filtron/go-apps</span>
113+<span class="s">export PATH=$PATH:/usr/local/filtron/local/go/bin:$GOPATH/bin</span>
114+<span class="s">EOF</span>
115+$ sudo -i -u filtron
116+<span class="o">(</span>filtron<span class="o">)</span> $ <span class="nb">echo</span> <span class="s1">&#39;source /usr/local/filtron/.go_env&#39;</span> &gt;&gt; ~/.profile
117+<span class="o">(</span>filtron<span class="o">)</span> $ mkdir /usr/local/filtron/local
118+<span class="o">(</span>filtron<span class="o">)</span> $ wget --progress<span class="o">=</span>bar -O go1.13.5.linux-amd64.tar.gz <span class="se">\</span>
119+ https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
120+<span class="o">(</span>filtron<span class="o">)</span> $ tar -C /usr/local/filtron/local/go -xzf go1.13.5.linux-amd64.tar.gz
121+<span class="o">(</span>filtron<span class="o">)</span> $ which go
122+/usr/local/filtron/local/go/bin/go
123+</pre></div>
124+</div>
125+</div>
126+</div>
127+</div>
128+<div class="section" id="install-filtron">
129+<h2>Install filtron<a class="headerlink" href="#install-filtron" title="Permalink to this headline">¶</a></h2>
130+<p>Install <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/templates/etc/filtron/rules.json">rules.json</a> at
131+<code class="docutils literal notranslate"><span class="pre">/etc/filtron/rules.json</span></code> (see <a class="reference internal" href="../admin/filtron.html#sample-configuration-of-filtron"><span class="std std-ref">Sample configuration of filtron</span></a>) and
132+install filtron software and systemd unit:</p>
133+<div class="sphinx-tabs docutils container">
134+<div class="ui top attached tabular menu sphinx-menu docutils container">
135+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
136+<div class="docutils container">
137+<p>bash</p>
138+</div>
139+</div>
140+</div>
141+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
142+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -i -u filtron
143+<span class="o">(</span>filtron<span class="o">)</span> $ go get -v -u github.com/asciimoo/filtron
144+</pre></div>
145+</div>
146+</div>
147+</div>
148+<div class="sphinx-tabs docutils container">
149+<div class="ui top attached tabular menu sphinx-menu docutils container">
150+<div class="active item sphinx-data-tab-c3lzdGVtZA== docutils container">
151+<div class="docutils container">
152+<p>systemd</p>
153+</div>
154+</div>
155+</div>
156+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-c3lzdGVtZA== active docutils container">
157+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">[</span>Unit<span class="o">]</span>
158+
159+<span class="nv">Description</span><span class="o">=</span>filtron
160+<span class="nv">After</span><span class="o">=</span>syslog.target
161+<span class="nv">After</span><span class="o">=</span>network.target
162+
163+<span class="o">[</span>Service<span class="o">]</span>
164+
165+<span class="nv">Type</span><span class="o">=</span>simple
166+<span class="nv">User</span><span class="o">=</span>filtron
167+<span class="nv">Group</span><span class="o">=</span>filtron
168+<span class="nv">WorkingDirectory</span><span class="o">=</span>/usr/local/filtron
169+<span class="nv">ExecStart</span><span class="o">=</span>/usr/local/filtron/go-apps/bin/filtron -api <span class="s1">&#39;127.0.0.1:4005&#39;</span> -listen <span class="s1">&#39;127.0.0.1:4004&#39;</span> -rules <span class="s1">&#39;/etc/filtron/rules.json&#39;</span> -target <span class="s1">&#39;127.0.0.1:8888&#39;</span>
170+
171+<span class="nv">Restart</span><span class="o">=</span>always
172+<span class="nv">Environment</span><span class="o">=</span><span class="nv">USER</span><span class="o">=</span>filtron <span class="nv">HOME</span><span class="o">=</span>/usr/local/filtron
173+
174+<span class="c1"># Some distributions may not support these hardening directives. If you cannot</span>
175+<span class="c1"># start the service due to an unknown option, comment out the ones not supported</span>
176+<span class="c1"># by your version of systemd.</span>
177+
178+<span class="nv">ProtectSystem</span><span class="o">=</span>full
179+<span class="nv">PrivateDevices</span><span class="o">=</span>yes
180+<span class="nv">PrivateTmp</span><span class="o">=</span>yes
181+<span class="nv">NoNewPrivileges</span><span class="o">=</span><span class="nb">true</span>
182+
183+<span class="o">[</span>Install<span class="o">]</span>
184+
185+<span class="nv">WantedBy</span><span class="o">=</span>multi-user.target
186+</pre></div>
187+</div>
188+</div>
189+</div>
190+</div>
191+<div class="section" id="overview">
192+<span id="filtron-sh-overview"></span><h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
193+<p>The <code class="docutils literal notranslate"><span class="pre">--help</span></code> output of the script is largely self-explanatory
194+(<a class="reference internal" href="index.html#toolboxing-common"><span class="std std-ref">Common commands &amp; environment</span></a>):</p>
195+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage::
196+ filtron.sh shell
197+ filtron.sh install [all|user|rules]
198+ filtron.sh update [filtron]
199+ filtron.sh remove [all]
200+ filtron.sh activate [service]
201+ filtron.sh deactivate [service]
202+ filtron.sh inspect [service]
203+ filtron.sh option [debug-on|debug-off]
204+ filtron.sh apache [install|remove]
205+ filtron.sh nginx [install|remove]
206+
207+shell
208+ start interactive shell from user filtron
209+install / remove
210+ :all: complete setup of filtron service
211+ :user: add/remove service user &#39;filtron&#39; (/usr/local/filtron)
212+ :rules: reinstall filtron rules /etc/filtron/rules.json
213+update filtron
214+ Update filtron installation (/usr/local/filtron)
215+activate service
216+ activate and start service daemon (systemd unit)
217+deactivate service
218+ stop and deactivate service daemon (systemd unit)
219+inspect service
220+ show service status and log
221+option
222+ set one of the available options
223+apache (http://192.168.1.127/searx)
224+ :install: apache site with a reverse proxy (ProxyPass)
225+ :remove: apache site searx.conf
226+nginx (http://192.168.1.127/searx)
227+ :install: nginx site with a reverse proxy (ProxyPass)
228+ :remove: nginx site searx.conf
229+
230+filtron rules: /etc/filtron/rules.json
231+
232+If needed, set PUBLIC_URL of your WEB service in the &#39;.config.sh&#39; file::
233+ PUBLIC_URL : http://192.168.1.127/searx
234+ PUBLIC_HOST : 192.168.1.127
235+ SERVICE_USER : filtron
236+ FILTRON_TARGET : 127.0.0.1:8888
237+ FILTRON_API : 127.0.0.1:4005
238+ FILTRON_LISTEN : 127.0.0.1:4004
239+</pre></div>
240+</div>
241+</div>
242+</div>
243+
244+
245+ </div>
246+ </div>
247+ </div>
248+ <span id="sidebar-top"></span>
249+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
250+ <div class="sphinxsidebarwrapper">
251+
252+
253+ <p class="logo"><a href="../index.html">
254+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
255+ </a></p>
256+
257+
258+ <h3>Project Links</h3>
259+ <ul>
260+ <li><a href="https://github.com/asciimoo/searx">Source</a>
261+
262+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
263+
264+ <li><a href="https://searx.space/">Public instances</a>
265+
266+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
267+ </ul><h3>Navigation</h3>
268+<ul>
269+ <li><a href="../index.html">Overview</a>
270+ <ul>
271+ <li><a href="index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a>
272+ <ul>
273+ <li>Previous: <a href="searx.sh.html" title="previous chapter"><code class="docutils literal notranslate"><span class="pre">utils/searx.sh</span></code></a>
274+ <li>Next: <a href="morty.sh.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">utils/morty.sh</span></code></a></ul>
275+ </li>
276+ </ul>
277+ </li>
278+</ul>
279+<div id="searchbox" style="display: none" role="search">
280+ <h3 id="searchlabel">Quick search</h3>
281+ <div class="searchformwrapper">
282+ <form class="search" action="../search.html" method="get">
283+ <input type="text" name="q" aria-labelledby="searchlabel" />
284+ <input type="submit" value="Go" />
285+ </form>
286+ </div>
287+</div>
288+<script>$('#searchbox').show(0);</script>
289+ </div>
290+ </div>
291+ <div class="clearer"></div>
292+ </div>
293+
294+ <div class="footer" role="contentinfo">
295+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
296+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
297+ </div>
298+ <script src="../_static/version_warning_offset.js"></script>
299+
300+ </body>
301+</html>
utils/index.htmlnew file+217
@@ -0,0 +1,217 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>Tooling box utils/* &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
12+ <script src="../_static/jquery.js"></script>
13+ <script src="../_static/underscore.js"></script>
14+ <script src="../_static/doctools.js"></script>
15+ <script src="../_static/language_data.js"></script>
16+ <link rel="index" title="Index" href="../genindex.html" />
17+ <link rel="search" title="Search" href="../search.html" />
18+ <link rel="next" title="utils/searx.sh" href="searx.sh.html" />
19+ <link rel="prev" title="reST primer" href="../dev/reST.html" />
20+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
21+
22+ </head><body>
23+ <div class="related" role="navigation" aria-label="related navigation">
24+ <h3>Navigation</h3>
25+ <ul>
26+ <li class="right" style="margin-right: 10px">
27+ <a href="../genindex.html" title="General Index"
28+ accesskey="I">index</a></li>
29+ <li class="right" >
30+ <a href="searx.sh.html" title="utils/searx.sh"
31+ accesskey="N">next</a> |</li>
32+ <li class="right" >
33+ <a href="../dev/reST.html" title="reST primer"
34+ accesskey="P">previous</a> |</li>
35+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
36+ </ul>
37+ </div>
38+
39+ <div class="document">
40+ <div class="documentwrapper">
41+ <div class="bodywrapper">
42+ <div class="body" role="main">
43+
44+ <div class="section" id="tooling-box-utils">
45+<span id="toolboxing"></span><span id="searx-utils"></span><h1>Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code><a class="headerlink" href="#tooling-box-utils" title="Permalink to this headline">¶</a></h1>
46+<p>In the folder <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/">git://utils/</a> we maintain some tools useful for admins and
47+developers.</p>
48+<div class="toctree-wrapper compound">
49+<p class="caption"><span class="caption-text">Contents</span></p>
50+<ul>
51+<li class="toctree-l1"><a class="reference internal" href="searx.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/searx.sh</span></code></a><ul>
52+<li class="toctree-l2"><a class="reference internal" href="searx.sh.html#install">Install</a></li>
53+<li class="toctree-l2"><a class="reference internal" href="searx.sh.html#overview">Overview</a></li>
54+</ul>
55+</li>
56+<li class="toctree-l1"><a class="reference internal" href="filtron.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/filtron.sh</span></code></a><ul>
57+<li class="toctree-l2"><a class="reference internal" href="filtron.sh.html#create-user">Create user</a></li>
58+<li class="toctree-l2"><a class="reference internal" href="filtron.sh.html#install-go">Install go</a></li>
59+<li class="toctree-l2"><a class="reference internal" href="filtron.sh.html#install-filtron">Install filtron</a></li>
60+<li class="toctree-l2"><a class="reference internal" href="filtron.sh.html#overview">Overview</a></li>
61+</ul>
62+</li>
63+<li class="toctree-l1"><a class="reference internal" href="morty.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/morty.sh</span></code></a><ul>
64+<li class="toctree-l2"><a class="reference internal" href="morty.sh.html#create-user">Create user</a></li>
65+<li class="toctree-l2"><a class="reference internal" href="morty.sh.html#install-go">Install go</a></li>
66+<li class="toctree-l2"><a class="reference internal" href="morty.sh.html#install-morty">Install morty</a></li>
67+<li class="toctree-l2"><a class="reference internal" href="morty.sh.html#overview">Overview</a></li>
68+</ul>
69+</li>
70+<li class="toctree-l1"><a class="reference internal" href="lxc.sh.html"><code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span></code></a><ul>
71+<li class="toctree-l2"><a class="reference internal" href="lxc.sh.html#install-suite">Install suite</a></li>
72+<li class="toctree-l2"><a class="reference internal" href="lxc.sh.html#running-commands">Running commands</a></li>
73+<li class="toctree-l2"><a class="reference internal" href="lxc.sh.html#setup-searx-buildhost">Setup searx buildhost</a></li>
74+<li class="toctree-l2"><a class="reference internal" href="lxc.sh.html#overview">Overview</a></li>
75+<li class="toctree-l2"><a class="reference internal" href="lxc.sh.html#searx-suite">searx suite</a></li>
76+</ul>
77+</li>
78+</ul>
79+</div>
80+<div class="section" id="common-commands-environment">
81+<span id="toolboxing-common"></span><h2>Common commands &amp; environment<a class="headerlink" href="#common-commands-environment" title="Permalink to this headline">¶</a></h2>
82+<p>Scripts to maintain services often dispose of common commands and environments.</p>
83+<dl>
84+<dt><code class="docutils literal notranslate"><span class="pre">shell</span></code><span class="classifier">command</span></dt><dd><p>Opens a shell from the service user <code class="docutils literal notranslate"><span class="pre">${SERVICE_USSR}</span></code>, very helpful for
85+troubleshooting.</p>
86+</dd>
87+<dt><code class="docutils literal notranslate"><span class="pre">inspect</span> <span class="pre">service</span></code><span class="classifier">command</span></dt><dd><p>Shows status and log of the service, most often you have a option to enable
88+more verbose debug logs. Very helpful for debugging, but be careful not to
89+enable debugging in a production environment!</p>
90+</dd>
91+<dt><code class="docutils literal notranslate"><span class="pre">FORCE_TIMEOUT</span></code><span class="classifier">environment</span></dt><dd><p>Sets timeout for interactive prompts. If you want to run a script in batch
92+job, with defaults choices, set <code class="docutils literal notranslate"><span class="pre">FORCE_TIMEOUT=0</span></code>. By example; to install a
93+reverse proxy for filtron on all containers of the <a class="reference internal" href="lxc.sh.html#lxc-searx-env"><span class="std std-ref">searx suite</span></a> use</p>
94+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh apache install
95+</pre></div>
96+</div>
97+</dd>
98+</dl>
99+</div>
100+<div class="section" id="tooling-box-setup">
101+<span id="toolboxing-setup"></span><h2>Tooling box setup<a class="headerlink" href="#tooling-box-setup" title="Permalink to this headline">¶</a></h2>
102+<p>The main setup is done in the <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/.config.sh">git://.config.sh</a> (read also <a class="reference internal" href="../dev/makefile.html#makefile-setup"><span class="std std-ref">Makefile setup</span></a>).</p>
103+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8; mode: sh -*-</span>
104+<span class="c1"># SPDX-License-Identifier: AGPL-3.0-or-later</span>
105+<span class="c1"># shellcheck shell=bash disable=SC2034</span>
106+<span class="c1">#</span>
107+<span class="c1"># This environment is used by ./utils scripts like filtron.sh or searx.sh. The</span>
108+<span class="c1"># default values are *most flexible* and *best maintained*, you normally not</span>
109+<span class="c1"># need to change the defaults (except PUBLIC_URL).</span>
110+<span class="c1">#</span>
111+<span class="c1"># Before you change any value here you have to uninstall any previous</span>
112+<span class="c1"># installation. Further is it recommended to backup your changes simply by</span>
113+<span class="c1"># adding them to you local brand (git branch)::</span>
114+<span class="c1">#</span>
115+<span class="c1"># git add .config</span>
116+
117+<span class="c1"># The public URL of the searx instance: PUBLIC_URL=&quot;https://mydomain.xy/searx&quot;</span>
118+<span class="c1"># The default is taken from ./utils/brand.env.</span>
119+
120+<span class="nv">PUBLIC_URL</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">SEARX_URL</span><span class="si">}</span><span class="s2">&quot;</span>
121+
122+<span class="k">if</span> <span class="o">[[</span> <span class="si">${</span><span class="nv">PUBLIC_URL</span><span class="si">}</span> <span class="o">==</span> <span class="s2">&quot;https://searx.me&quot;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
123+ <span class="c1"># hint: Linux containers do not have DNS entries, lets use IPs</span>
124+ <span class="nv">PUBLIC_URL</span><span class="o">=</span><span class="s2">&quot;http://</span><span class="k">$(</span>primary_ip<span class="k">)</span><span class="s2">/searx&quot;</span>
125+<span class="k">fi</span>
126+
127+<span class="c1"># searx.sh</span>
128+<span class="c1"># ---------</span>
129+
130+<span class="c1"># SEARX_INTERNAL_URL=&quot;127.0.0.1:8888&quot;</span>
131+
132+<span class="c1"># Only change, if you maintain a searx brand in your searx fork.</span>
133+<span class="c1"># GIT_BRANCH=&quot;${GIT_BRANCH:-master}&quot;</span>
134+
135+<span class="c1"># filtron.sh</span>
136+<span class="c1"># ----------</span>
137+
138+<span class="c1"># FILTRON_API=&quot;127.0.0.1:4005&quot;</span>
139+<span class="c1"># FILTRON_LISTEN=&quot;127.0.0.1:4004&quot;</span>
140+<span class="c1"># FILTRON_TARGET=&quot;127.0.0.1:8888&quot;</span>
141+
142+<span class="c1"># morty.sh</span>
143+<span class="c1"># --------</span>
144+
145+<span class="c1"># morty listen address</span>
146+<span class="c1"># MORTY_LISTEN=&quot;127.0.0.1:3000&quot;</span>
147+<span class="c1"># PUBLIC_URL_PATH_MORTY=&quot;/morty/&quot;</span>
148+
149+<span class="c1"># system services</span>
150+<span class="c1"># ---------------</span>
151+
152+<span class="c1"># Common $HOME folder of the service accounts</span>
153+<span class="c1"># SERVICE_HOME_BASE=&quot;/usr/local&quot;</span>
154+
155+<span class="c1"># **experimental**: Set SERVICE_USER to run all services by one account, but be</span>
156+<span class="c1"># aware that removing discrete components might conflict!</span>
157+<span class="c1"># SERVICE_USER=searx</span>
158+</pre></div>
159+</div>
160+</div>
161+</div>
162+
163+
164+ </div>
165+ </div>
166+ </div>
167+ <span id="sidebar-top"></span>
168+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
169+ <div class="sphinxsidebarwrapper">
170+
171+
172+ <p class="logo"><a href="../index.html">
173+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
174+ </a></p>
175+
176+
177+ <h3>Project Links</h3>
178+ <ul>
179+ <li><a href="https://github.com/asciimoo/searx">Source</a>
180+
181+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
182+
183+ <li><a href="https://searx.space/">Public instances</a>
184+
185+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
186+ </ul><h3>Navigation</h3>
187+<ul>
188+ <li><a href="../index.html">Overview</a>
189+ <ul>
190+ <li>Previous: <a href="../dev/reST.html" title="previous chapter">reST primer</a>
191+ <li>Next: <a href="searx.sh.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">utils/searx.sh</span></code></a>
192+ </ul>
193+ </li>
194+</ul>
195+<div id="searchbox" style="display: none" role="search">
196+ <h3 id="searchlabel">Quick search</h3>
197+ <div class="searchformwrapper">
198+ <form class="search" action="../search.html" method="get">
199+ <input type="text" name="q" aria-labelledby="searchlabel" />
200+ <input type="submit" value="Go" />
201+ </form>
202+ </div>
203+</div>
204+<script>$('#searchbox').show(0);</script>
205+ </div>
206+ </div>
207+ <div class="clearer"></div>
208+ </div>
209+
210+ <div class="footer" role="contentinfo">
211+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
212+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
213+ </div>
214+ <script src="../_static/version_warning_offset.js"></script>
215+
216+ </body>
217+</html>
utils/lxc.sh.htmlnew file+361
@@ -0,0 +1,361 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>utils/lxc.sh &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
12+ <script src="../_static/jquery.js"></script>
13+ <script src="../_static/underscore.js"></script>
14+ <script src="../_static/doctools.js"></script>
15+ <script src="../_static/language_data.js"></script>
16+ <link rel="index" title="Index" href="../genindex.html" />
17+ <link rel="search" title="Search" href="../search.html" />
18+ <link rel="next" title="Blog" href="../blog/index.html" />
19+ <link rel="prev" title="utils/morty.sh" href="morty.sh.html" />
20+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
21+
22+ </head><body>
23+ <div class="related" role="navigation" aria-label="related navigation">
24+ <h3>Navigation</h3>
25+ <ul>
26+ <li class="right" style="margin-right: 10px">
27+ <a href="../genindex.html" title="General Index"
28+ accesskey="I">index</a></li>
29+ <li class="right" >
30+ <a href="../blog/index.html" title="Blog"
31+ accesskey="N">next</a> |</li>
32+ <li class="right" >
33+ <a href="morty.sh.html" title="utils/morty.sh"
34+ accesskey="P">previous</a> |</li>
35+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
36+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a> &#187;</li>
37+ </ul>
38+ </div>
39+
40+ <div class="document">
41+ <div class="documentwrapper">
42+ <div class="bodywrapper">
43+ <div class="body" role="main">
44+
45+ <div class="section" id="utils-lxc-sh">
46+<span id="lxc-sh"></span><h1><code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span></code><a class="headerlink" href="#utils-lxc-sh" title="Permalink to this headline">¶</a></h1>
47+<div class="sidebar">
48+<p class="sidebar-title">further reading</p>
49+<ul class="simple">
50+<li><p><a class="reference external" href="https://snapcraft.io">snap</a>, <a class="reference external" href="https://snapcraft.io/lxd">snapcraft LXD</a></p></li>
51+<li><p><a class="reference external" href="https://linuxcontainers.org/lxc/introduction/">LXC</a>, <a class="reference external" href="https://linuxcontainers.org/lxd/introduction/">LXD</a></p></li>
52+<li><p><a class="reference external" href="https://uk.images.linuxcontainers.org/">LXC/LXD Image Server</a></p></li>
53+<li><p><a class="reference external" href="https://github.com/lxc/lxd">LXD&#64;github</a></p></li>
54+</ul>
55+</div>
56+<p>With the use of <em>Linux Containers</em> (<a class="reference external" href="https://linuxcontainers.org/lxc/introduction/">LXC</a>) we can scale our tasks over a stack of
57+containers, what we call the: <em>lxc suite</em>. The <em>searx suite</em>
58+(<a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/lxc-searx.env">lxc-searx.env</a>) is loaded by default, every time
59+you start the <code class="docutils literal notranslate"><span class="pre">lxc.sh</span></code> script (<em>you do not need to care about</em>).</p>
60+<p>Before you can start with containers, you need to install and initiate <a class="reference external" href="https://linuxcontainers.org/lxd/introduction/">LXD</a>
61+once:</p>
62+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ snap install lxd
63+$ lxd init --auto
64+</pre></div>
65+</div>
66+<p>To make use of the containers from the <em>searx suite</em>, you have to build the
67+<a class="reference internal" href="#lxc-sh-help"><span class="std std-ref">LXC suite containers</span></a> initial. But be warned, <strong>this might
68+take some time</strong>:</p>
69+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh build
70+</pre></div>
71+</div>
72+<p>A cup of coffee later, your LXC suite is build up and you can run whatever task
73+you want / in a selected or even in all <a class="reference internal" href="#lxc-sh-help"><span class="std std-ref">LXC suite containers</span></a>. If you do not want to build all containers, <strong>you can build just
74+one</strong>:</p>
75+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh build searx-ubu1804
76+</pre></div>
77+</div>
78+<p><em>Good to know …</em></p>
79+<p>Eeach container shares the root folder of the repository and the
80+command <code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span> <span class="pre">cmd</span></code> <strong>handles relative path names transparent</strong>,
81+compare output of:</p>
82+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh cmd -- ls -la Makefile
83+...
84+</pre></div>
85+</div>
86+<p>In the containers, you can run what ever you want, e.g. to start a bash use:</p>
87+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh cmd searx-ubu1804 bash
88+INFO: [searx-ubu1804] bash
89+root@searx-ubu1804:/share/searx#
90+</pre></div>
91+</div>
92+<p>If there comes the time you want to <strong>get rid off all</strong> the containers and
93+<strong>clean up local images</strong> just type:</p>
94+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh remove
95+$ sudo -H ./utils/lxc.sh remove images
96+</pre></div>
97+</div>
98+<div class="section" id="install-suite">
99+<h2>Install suite<a class="headerlink" href="#install-suite" title="Permalink to this headline">¶</a></h2>
100+<p>To install the complete <a class="reference internal" href="#lxc-searx-env"><span class="std std-ref">searx suite (includes searx, morty &amp; filtron)</span></a> into all <a class="reference external" href="https://linuxcontainers.org/lxc/introduction/">LXC</a> use:</p>
101+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo -H ./utils/lxc.sh install suite
102+</pre></div>
103+</div>
104+<p>The command above installs a searx suite (see <a class="reference internal" href="../admin/installation.html#installation-scripts"><span class="std std-ref">Installation scripts</span></a>). To
105+get the IP (URL) of the filtron service in the containers use <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">suite</span></code>
106+command. To test instances from containers just open the URLs in your
107+WEB-Browser:</p>
108+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo ./utils/lxc.sh show suite | grep filtron
109+[searx-ubu1604] INFO: (eth0) filtron: http://n.n.n.246:4004/ http://n.n.n.246/searx
110+[searx-ubu1804] INFO: (eth0) filtron: http://n.n.n.147:4004/ http://n.n.n.147/searx
111+[searx-ubu1910] INFO: (eth0) filtron: http://n.n.n.140:4004/ http://n.n.n.140/searx
112+[searx-ubu2004] INFO: (eth0) filtron: http://n.n.n.18:4004/ http://n.n.n.18/searx
113+[searx-fedora31] INFO: (eth0) filtron: http://n.n.n.46:4004/ http://n.n.n.46/searx
114+[searx-archlinux] INFO: (eth0) filtron: http://n.n.n.32:4004/ http://n.n.n.32/searx
115+</pre></div>
116+</div>
117+<p>To <a class="reference internal" href="../admin/installation-nginx.html#installation-nginx"><span class="std std-ref">install a nginx</span></a> reverse proxy for filtron and
118+morty use (or alternatively use <a class="reference internal" href="../admin/installation-apache.html#installation-apache"><span class="std std-ref">apache</span></a>):</p>
119+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh nginx install
120+sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/morty.sh nginx install
121+</pre></div>
122+</div>
123+</div>
124+<div class="section" id="running-commands">
125+<h2>Running commands<a class="headerlink" href="#running-commands" title="Permalink to this headline">¶</a></h2>
126+<p><strong>Inside containers, you can use make or run scripts</strong> from the
127+<a class="reference internal" href="index.html#toolboxing"><span class="std std-ref">Tooling box utils/*</span></a>. By example: to setup a <a class="reference internal" href="../admin/buildhosts.html#buildhosts"><span class="std std-ref">Buildhosts</span></a> and run the
128+Makefile target <code class="docutils literal notranslate"><span class="pre">test</span></code> in the <a class="reference external" href="https://www.archlinux.org/">archlinux</a> container:</p>
129+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/lxc.sh cmd searx-archlinux ./utils/searx.sh buildhost
130+sudo -H ./utils/lxc.sh cmd searx-archlinux make test
131+</pre></div>
132+</div>
133+</div>
134+<div class="section" id="setup-searx-buildhost">
135+<h2>Setup searx buildhost<a class="headerlink" href="#setup-searx-buildhost" title="Permalink to this headline">¶</a></h2>
136+<p>You can <strong>install the searx buildhost environment</strong> into one or all containers.
137+The installation procedure to set up a <a class="reference internal" href="../admin/buildhosts.html#buildhosts"><span class="std std-ref">build host</span></a> takes its
138+time. Installation in all containers will take more time (time for another cup
139+of coffee).:</p>
140+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/lxc.sh cmd -- ./utils/searx.sh buildhost
141+</pre></div>
142+</div>
143+<p>To build (live) documentation inside a <a class="reference external" href="https://www.archlinux.org/">archlinux</a> container:</p>
144+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/lxc.sh cmd searx-archlinux make docs-clean docs-live
145+...
146+[I 200331 15:00:42 server:296] Serving on http://0.0.0.0:8080
147+</pre></div>
148+</div>
149+<p>To get IP of the container and the port number <em>live docs</em> is listening:</p>
150+<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo ./utils/lxc.sh show suite | grep docs-live
151+...
152+[searx-archlinux] INFO: (eth0) docs-live: http://n.n.n.12:8080/
153+</pre></div>
154+</div>
155+</div>
156+<div class="section" id="overview">
157+<span id="lxc-sh-help"></span><h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
158+<p>The <code class="docutils literal notranslate"><span class="pre">--help</span></code> output of the script is largely self-explanatory:</p>
159+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage::
160+ lxc.sh build [containers|&lt;name&gt;]
161+ lxc.sh copy [images]
162+ lxc.sh remove [containers|&lt;name&gt;|images]
163+ lxc.sh [start|stop] [containers|&lt;name&gt;]
164+ lxc.sh show [images|suite|info|config [&lt;name&gt;]]
165+ lxc.sh cmd [--|&lt;name&gt;] &#39;...&#39;
166+ lxc.sh install [suite|base [&lt;name&gt;]]
167+
168+build
169+ :containers: build, launch all containers and &#39;install base&#39; packages
170+ :&lt;name&gt;: build, launch container &lt;name&gt; and &#39;install base&#39; packages
171+copy:
172+ :images: copy remote images of the suite into local storage
173+remove
174+ :containers: delete all &#39;containers&#39; or only &lt;container-name&gt;
175+ :images: delete local images of the suite
176+start/stop
177+ :containers: start/stop all &#39;containers&#39; from the suite
178+ :&lt;name&gt;: start/stop container &lt;name&gt; from suite
179+show
180+ :info: show info of all (or &lt;name&gt;) containers from LXC suite
181+ :config: show config of all (or &lt;name&gt;) containers from the LXC suite
182+ :suite: show services of all (or &lt;name&gt;) containers from the LXC suite
183+ :images: show information of local images
184+cmd
185+ use single qoutes to evaluate in container&#39;s bash, e.g.: &#39;echo $(hostname)&#39;
186+ -- run command &#39;...&#39; in all containers of the LXC suite
187+ :&lt;name&gt;: run command &#39;...&#39; in container &lt;name&gt;
188+install
189+ :base: prepare LXC; install basic packages
190+ :suite: install LXC searx suite into all (or &lt;name&gt;) containers
191+
192+LXC suite: searx --&gt; http://192.168.1.127/searx
193+ suite includes searx, morty &amp; filtron
194+suite images:
195+ ubu1604 ubu1804 ubu1910 ubu2004 fedora31 archlinux
196+suite containers:
197+ searx-ubu1604 searx-ubu1804 searx-ubu1910 searx-ubu2004 searx-fedora31
198+ searx-archlinux
199+</pre></div>
200+</div>
201+</div>
202+<div class="section" id="searx-suite">
203+<span id="lxc-searx-env"></span><h2>searx suite<a class="headerlink" href="#searx-suite" title="Permalink to this headline">¶</a></h2>
204+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-</span>
205+<span class="c1"># SPDX-License-Identifier: AGPL-3.0-or-later</span>
206+<span class="c1"># shellcheck shell=bash</span>
207+
208+<span class="c1"># This file is a setup of a LXC suite. It is sourced from different context, do</span>
209+<span class="c1"># not manipulate the environment directly, implement functions and manipulate</span>
210+<span class="c1"># environment only is subshells!</span>
211+
212+<span class="c1"># ----------------------------------------------------------------------------</span>
213+<span class="c1"># config</span>
214+<span class="c1"># ----------------------------------------------------------------------------</span>
215+
216+<span class="c1"># shellcheck disable=SC2034</span>
217+<span class="nv">LXC_SUITE_NAME</span><span class="o">=</span><span class="s2">&quot;searx&quot;</span>
218+lxc_set_suite_env<span class="o">()</span> <span class="o">{</span>
219+ <span class="c1"># name of https://images.linuxcontainers.org</span>
220+ <span class="nb">export</span> <span class="nv">LINUXCONTAINERS_ORG_NAME</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">LINUXCONTAINERS_ORG_NAME</span><span class="k">:-</span><span class="nv">images</span><span class="si">}</span><span class="s2">&quot;</span>
221+ <span class="nb">export</span> <span class="nv">LXC_HOST_PREFIX</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">LXC_SUITE_NAME</span><span class="k">:-</span><span class="nv">searx</span><span class="si">}</span><span class="s2">&quot;</span>
222+ <span class="nb">export</span> <span class="nv">LXC_SUITE</span><span class="o">=(</span>
223+
224+ <span class="c1"># to disable containers, comment out lines ..</span>
225+
226+ <span class="c1"># end of standard support see https://wiki.ubuntu.com/Releases</span>
227+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:ubuntu/16.04&quot;</span> <span class="s2">&quot;ubu1604&quot;</span> <span class="c1"># April 2021</span>
228+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:ubuntu/18.04&quot;</span> <span class="s2">&quot;ubu1804&quot;</span> <span class="c1"># April 2023</span>
229+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:ubuntu/19.10&quot;</span> <span class="s2">&quot;ubu1910&quot;</span> <span class="c1"># July 2020</span>
230+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:ubuntu/20.04&quot;</span> <span class="s2">&quot;ubu2004&quot;</span> <span class="c1"># future (EOL 2030)</span>
231+
232+ <span class="c1"># EOL see https://fedoraproject.org/wiki/Releases</span>
233+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:fedora/31&quot;</span> <span class="s2">&quot;fedora31&quot;</span>
234+
235+ <span class="c1"># rolling releases see https://www.archlinux.org/releng/releases/</span>
236+ <span class="s2">&quot;</span><span class="nv">$LINUXCONTAINERS_ORG_NAME</span><span class="s2">:archlinux&quot;</span> <span class="s2">&quot;archlinux&quot;</span>
237+ <span class="o">)</span>
238+
239+ <span class="nv">PUBLIC_URL</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">PUBLIC_URL</span><span class="k">:-</span><span class="nv">http</span><span class="p">://</span><span class="k">$(</span>uname -n<span class="k">)</span><span class="p">/searx</span><span class="si">}</span><span class="s2">&quot;</span>
240+ <span class="k">if</span> in_container<span class="p">;</span> <span class="k">then</span>
241+ <span class="c1"># container hostnames do not have a DNS entry: use primary IP!</span>
242+ <span class="nv">PUBLIC_URL</span><span class="o">=</span><span class="s2">&quot;http://</span><span class="k">$(</span>primary_ip<span class="k">)</span><span class="s2">/searx&quot;</span>
243+
244+ <span class="c1"># make GUEST&#39;s services public to the HOST</span>
245+ <span class="nv">FILTRON_API</span><span class="o">=</span><span class="s2">&quot;0.0.0.0:4005&quot;</span>
246+ <span class="nv">FILTRON_LISTEN</span><span class="o">=</span><span class="s2">&quot;0.0.0.0:4004&quot;</span>
247+ <span class="nv">MORTY_LISTEN</span><span class="o">=</span><span class="s2">&quot;0.0.0.0:3000&quot;</span>
248+
249+ <span class="c1"># export LXC specific environment</span>
250+ <span class="nb">export</span> PUBLIC_URL FILTRON_API FILTRON_LISTEN MORTY_LISTEN
251+ <span class="k">fi</span>
252+<span class="o">}</span>
253+
254+lxc_suite_install_info<span class="o">()</span> <span class="o">{</span>
255+ <span class="o">(</span>
256+ lxc_set_suite_env
257+ cat <span class="s">&lt;&lt;EOF</span>
258+<span class="s">LXC suite: ${LXC_SUITE_NAME} --&gt; ${PUBLIC_URL}</span>
259+<span class="s"> suite includes searx, morty &amp; filtron</span>
260+<span class="s">suite images:</span>
261+<span class="s">$(echo &quot; ${LOCAL_IMAGES[*]}&quot; | $FMT)</span>
262+<span class="s">suite containers:</span>
263+<span class="s">$(echo &quot; ${CONTAINERS[*]}&quot; | $FMT)</span>
264+<span class="s">EOF</span>
265+ <span class="o">)</span>
266+ <span class="o">}</span>
267+
268+lxc_suite_install<span class="o">()</span> <span class="o">{</span>
269+ <span class="o">(</span>
270+ lxc_set_suite_env
271+ <span class="nv">FORCE_TIMEOUT</span><span class="o">=</span>0
272+ <span class="nb">export</span> FORCE_TIMEOUT
273+ <span class="s2">&quot;</span><span class="si">${</span><span class="nv">LXC_REPO_ROOT</span><span class="si">}</span><span class="s2">/utils/searx.sh&quot;</span> install all
274+ <span class="s2">&quot;</span><span class="si">${</span><span class="nv">LXC_REPO_ROOT</span><span class="si">}</span><span class="s2">/utils/morty.sh&quot;</span> install all
275+ <span class="s2">&quot;</span><span class="si">${</span><span class="nv">LXC_REPO_ROOT</span><span class="si">}</span><span class="s2">/utils/filtron.sh&quot;</span> install all
276+
277+ rst_title <span class="s2">&quot;suite installation finished (</span><span class="k">$(</span>hostname<span class="k">)</span><span class="s2">)&quot;</span> part
278+ lxc_suite_info
279+ <span class="nb">echo</span>
280+ <span class="o">)</span>
281+<span class="o">}</span>
282+
283+lxc_suite_info<span class="o">()</span> <span class="o">{</span>
284+ <span class="o">(</span>
285+ lxc_set_suite_env
286+ <span class="k">for</span> ip in <span class="k">$(</span>global_IPs<span class="k">)</span> <span class="p">;</span> <span class="k">do</span>
287+ <span class="k">if</span> <span class="o">[[</span> <span class="nv">$ip</span> <span class="o">=</span>~ .*:.* <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
288+ info_msg <span class="s2">&quot;(</span><span class="si">${</span><span class="nv">ip</span><span class="p">%|*</span><span class="si">}</span><span class="s2">) IPv6: http://[</span><span class="si">${</span><span class="nv">ip</span><span class="p">#*|</span><span class="si">}</span><span class="s2">]&quot;</span>
289+ <span class="k">else</span>
290+ <span class="c1"># IPv4:</span>
291+ <span class="c1"># shellcheck disable=SC2034,SC2031</span>
292+ info_msg <span class="s2">&quot;(</span><span class="si">${</span><span class="nv">ip</span><span class="p">%|*</span><span class="si">}</span><span class="s2">) filtron: http://</span><span class="si">${</span><span class="nv">ip</span><span class="p">#*|</span><span class="si">}</span><span class="s2">:4004/ </span><span class="nv">$PUBLIC_URL</span><span class="s2">&quot;</span>
293+ info_msg <span class="s2">&quot;(</span><span class="si">${</span><span class="nv">ip</span><span class="p">%|*</span><span class="si">}</span><span class="s2">) morty: http://</span><span class="si">${</span><span class="nv">ip</span><span class="p">#*|</span><span class="si">}</span><span class="s2">:3000/ </span><span class="nv">$PUBLIC_URL_MORTY</span><span class="s2">&quot;</span>
294+ info_msg <span class="s2">&quot;(</span><span class="si">${</span><span class="nv">ip</span><span class="p">%|*</span><span class="si">}</span><span class="s2">) docs-live: http://</span><span class="si">${</span><span class="nv">ip</span><span class="p">#*|</span><span class="si">}</span><span class="s2">:8080/&quot;</span>
295+ <span class="k">fi</span>
296+ <span class="k">done</span>
297+ <span class="o">)</span>
298+<span class="o">}</span>
299+</pre></div>
300+</div>
301+</div>
302+</div>
303+
304+
305+ </div>
306+ </div>
307+ </div>
308+ <span id="sidebar-top"></span>
309+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
310+ <div class="sphinxsidebarwrapper">
311+
312+
313+ <p class="logo"><a href="../index.html">
314+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
315+ </a></p>
316+
317+
318+ <h3>Project Links</h3>
319+ <ul>
320+ <li><a href="https://github.com/asciimoo/searx">Source</a>
321+
322+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
323+
324+ <li><a href="https://searx.space/">Public instances</a>
325+
326+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
327+ </ul><h3>Navigation</h3>
328+<ul>
329+ <li><a href="../index.html">Overview</a>
330+ <ul>
331+ <li><a href="index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a>
332+ <ul>
333+ <li>Previous: <a href="morty.sh.html" title="previous chapter"><code class="docutils literal notranslate"><span class="pre">utils/morty.sh</span></code></a>
334+ <li>Next: <a href="../blog/index.html" title="next chapter">Blog</a></ul>
335+ </li>
336+ </ul>
337+ </li>
338+</ul>
339+<div id="searchbox" style="display: none" role="search">
340+ <h3 id="searchlabel">Quick search</h3>
341+ <div class="searchformwrapper">
342+ <form class="search" action="../search.html" method="get">
343+ <input type="text" name="q" aria-labelledby="searchlabel" />
344+ <input type="submit" value="Go" />
345+ </form>
346+ </div>
347+</div>
348+<script>$('#searchbox').show(0);</script>
349+ </div>
350+ </div>
351+ <div class="clearer"></div>
352+ </div>
353+
354+ <div class="footer" role="contentinfo">
355+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
356+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
357+ </div>
358+ <script src="../_static/version_warning_offset.js"></script>
359+
360+ </body>
361+</html>
utils/morty.sh.htmlnew file+304
@@ -0,0 +1,304 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>utils/morty.sh &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" />
12+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" />
13+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" />
14+ <link rel="stylesheet" type="text/css" href="../_static/sphinx_tabs/tabs.css" />
15+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
16+ <script src="../_static/jquery.js"></script>
17+ <script src="../_static/underscore.js"></script>
18+ <script src="../_static/doctools.js"></script>
19+ <script src="../_static/language_data.js"></script>
20+ <script src="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.js"></script>
21+ <script src="../_static/sphinx_tabs/tabs.js"></script>
22+ <link rel="index" title="Index" href="../genindex.html" />
23+ <link rel="search" title="Search" href="../search.html" />
24+ <link rel="next" title="utils/lxc.sh" href="lxc.sh.html" />
25+ <link rel="prev" title="utils/filtron.sh" href="filtron.sh.html" />
26+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
27+
28+ </head><body>
29+ <div class="related" role="navigation" aria-label="related navigation">
30+ <h3>Navigation</h3>
31+ <ul>
32+ <li class="right" style="margin-right: 10px">
33+ <a href="../genindex.html" title="General Index"
34+ accesskey="I">index</a></li>
35+ <li class="right" >
36+ <a href="lxc.sh.html" title="utils/lxc.sh"
37+ accesskey="N">next</a> |</li>
38+ <li class="right" >
39+ <a href="filtron.sh.html" title="utils/filtron.sh"
40+ accesskey="P">previous</a> |</li>
41+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
42+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a> &#187;</li>
43+ </ul>
44+ </div>
45+
46+ <div class="document">
47+ <div class="documentwrapper">
48+ <div class="bodywrapper">
49+ <div class="body" role="main">
50+
51+ <div class="section" id="utils-morty-sh">
52+<span id="morty-sh"></span><h1><code class="docutils literal notranslate"><span class="pre">utils/morty.sh</span></code><a class="headerlink" href="#utils-morty-sh" title="Permalink to this headline">¶</a></h1>
53+<div class="sidebar">
54+<p class="sidebar-title">further reading</p>
55+<ul class="simple">
56+<li><p><a class="reference internal" href="../admin/architecture.html#architecture"><span class="std std-ref">Architecture</span></a></p></li>
57+<li><p><a class="reference internal" href="../admin/installation.html#installation"><span class="std std-ref">Installation</span></a> (<a class="reference internal" href="../admin/installation-nginx.html#installation-nginx"><span class="std std-ref">nginx</span></a> &amp; <a class="reference internal" href="../admin/installation-apache.html#installation-apache"><span class="std std-ref">apache</span></a>)</p></li>
58+<li><p><a class="reference internal" href="../admin/morty.html#searx-morty"><span class="std std-ref">How to setup result proxy</span></a></p></li>
59+</ul>
60+</div>
61+<p>To simplify installation and maintenance of a <a class="reference external" href="https://github.com/asciimoo/morty">morty</a> instance you can use the
62+script <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/morty.sh">git://utils/morty.sh</a>. In most cases you will install <a class="reference external" href="https://github.com/asciimoo/morty">morty</a> simply by
63+running the command:</p>
64+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/morty.sh install all
65+</pre></div>
66+</div>
67+<p>The script adds a <code class="docutils literal notranslate"><span class="pre">${SERVICE_USER}</span></code> (default:<code class="docutils literal notranslate"><span class="pre">morty</span></code>) and installs <a class="reference external" href="https://github.com/asciimoo/morty">morty</a>
68+into this user account:</p>
69+<ol class="arabic simple">
70+<li><p>Create a separated user account (<code class="docutils literal notranslate"><span class="pre">morty</span></code>).</p></li>
71+<li><p>Download and install <a class="reference external" href="https://golang.org/">Go</a> binary in user’s $HOME (<code class="docutils literal notranslate"><span class="pre">~morty</span></code>).</p></li>
72+<li><p>Install <a class="reference external" href="https://github.com/asciimoo/morty">morty</a> with the package management from <a class="reference external" href="https://golang.org/">Go</a> (<code class="docutils literal notranslate"><span class="pre">go</span> <span class="pre">get</span> <span class="pre">-v</span> <span class="pre">-u</span>
73+<span class="pre">github.com/asciimoo/morty</span></code>)</p></li>
74+<li><p>Setup a systemd service unit <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/templates/lib/systemd/system/morty.service">[ref]</a>
75+(<code class="docutils literal notranslate"><span class="pre">/lib/systemd/system/morty.service</span></code>).</p></li>
76+</ol>
77+<div class="admonition hint">
78+<p class="admonition-title">Hint</p>
79+<p>To add morty to your searx instance read chapter <a class="reference internal" href="../admin/morty.html#searx-morty"><span class="std std-ref">How to setup result proxy</span></a>.</p>
80+</div>
81+<div class="section" id="create-user">
82+<h2>Create user<a class="headerlink" href="#create-user" title="Permalink to this headline">¶</a></h2>
83+<div class="sphinx-tabs docutils container">
84+<div class="ui top attached tabular menu sphinx-menu docutils container">
85+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
86+<div class="docutils container">
87+<p>bash</p>
88+</div>
89+</div>
90+</div>
91+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
92+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$ sudo -H useradd --shell /bin/bash --system <span class="se">\</span>
93+ --home-dir /usr/local/morty <span class="se">\</span>
94+ --comment Privacy-respecting metasearch engine morty
95+
96+$ sudo -H mkdir /usr/local/morty
97+$ sudo -H chown -R morty:morty /usr/local/morty
98+</pre></div>
99+</div>
100+</div>
101+</div>
102+</div>
103+<div class="section" id="install-go">
104+<h2>Install go<a class="headerlink" href="#install-go" title="Permalink to this headline">¶</a></h2>
105+<div class="sphinx-tabs docutils container">
106+<div class="ui top attached tabular menu sphinx-menu docutils container">
107+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
108+<div class="docutils container">
109+<p>bash</p>
110+</div>
111+</div>
112+</div>
113+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
114+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ cat &gt; /usr/local/morty/.go_env <span class="s">&lt;&lt;EOF</span>
115+<span class="s">export GOPATH=/usr/local/morty/go-apps</span>
116+<span class="s">export PATH=$PATH:/usr/local/morty/local/go/bin:$GOPATH/bin</span>
117+<span class="s">EOF</span>
118+$ sudo -i -u morty
119+<span class="o">(</span>morty<span class="o">)</span> $ <span class="nb">echo</span> <span class="s1">&#39;source /usr/local/morty/.go_env&#39;</span> &gt;&gt; ~/.profile
120+<span class="o">(</span>morty<span class="o">)</span> $ mkdir /usr/local/morty/local
121+<span class="o">(</span>morty<span class="o">)</span> $ wget --progress<span class="o">=</span>bar -O go1.13.5.linux-amd64.tar.gz <span class="se">\</span>
122+ https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
123+<span class="o">(</span>morty<span class="o">)</span> $ tar -C /usr/local/morty/local/go -xzf go1.13.5.linux-amd64.tar.gz
124+<span class="o">(</span>morty<span class="o">)</span> $ which go
125+/usr/local/morty/local/go/bin/go
126+</pre></div>
127+</div>
128+</div>
129+</div>
130+</div>
131+<div class="section" id="install-morty">
132+<h2>Install morty<a class="headerlink" href="#install-morty" title="Permalink to this headline">¶</a></h2>
133+<p>Install morty software and systemd unit:</p>
134+<div class="sphinx-tabs docutils container">
135+<div class="ui top attached tabular menu sphinx-menu docutils container">
136+<div class="active item sphinx-data-tab-YmFzaA== docutils container">
137+<div class="docutils container">
138+<p>bash</p>
139+</div>
140+</div>
141+</div>
142+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-YmFzaA== active docutils container">
143+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ sudo -i -u morty
144+<span class="o">(</span>morty<span class="o">)</span> $ go get -v -u github.com/asciimoo/morty
145+</pre></div>
146+</div>
147+</div>
148+</div>
149+<div class="sphinx-tabs docutils container">
150+<div class="ui top attached tabular menu sphinx-menu docutils container">
151+<div class="active item sphinx-data-tab-c3lzdGVtZA== docutils container">
152+<div class="docutils container">
153+<p>systemd</p>
154+</div>
155+</div>
156+</div>
157+<div class="ui bottom attached sphinx-tab tab segment sphinx-data-tab-c3lzdGVtZA== active docutils container">
158+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">[</span>Unit<span class="o">]</span>
159+
160+<span class="nv">Description</span><span class="o">=</span>morty
161+<span class="nv">After</span><span class="o">=</span>syslog.target
162+<span class="nv">After</span><span class="o">=</span>network.target
163+
164+<span class="o">[</span>Service<span class="o">]</span>
165+
166+<span class="nv">Type</span><span class="o">=</span>simple
167+<span class="nv">User</span><span class="o">=</span>morty
168+<span class="nv">Group</span><span class="o">=</span>morty
169+<span class="nv">WorkingDirectory</span><span class="o">=</span>/usr/local/morty
170+<span class="nv">ExecStart</span><span class="o">=</span>/usr/local/morty/go-apps/bin/morty -key <span class="s1">&#39;&#39;</span> -listen <span class="s1">&#39;127.0.0.1:3000&#39;</span> -timeout 5
171+
172+<span class="nv">Restart</span><span class="o">=</span>always
173+<span class="nv">Environment</span><span class="o">=</span><span class="nv">USER</span><span class="o">=</span>morty <span class="nv">HOME</span><span class="o">=</span>/usr/local/morty <span class="nv">DEBUG</span><span class="o">=</span><span class="nb">false</span>
174+
175+<span class="c1"># Some distributions may not support these hardening directives. If you cannot</span>
176+<span class="c1"># start the service due to an unknown option, comment out the ones not supported</span>
177+<span class="c1"># by your version of systemd.</span>
178+
179+<span class="nv">ProtectSystem</span><span class="o">=</span>full
180+<span class="nv">PrivateDevices</span><span class="o">=</span>yes
181+<span class="nv">PrivateTmp</span><span class="o">=</span>yes
182+<span class="nv">NoNewPrivileges</span><span class="o">=</span><span class="nb">true</span>
183+
184+<span class="o">[</span>Install<span class="o">]</span>
185+
186+<span class="nv">WantedBy</span><span class="o">=</span>multi-user.target
187+</pre></div>
188+</div>
189+</div>
190+</div>
191+</div>
192+<div class="section" id="overview">
193+<span id="morty-sh-overview"></span><h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
194+<p>The <code class="docutils literal notranslate"><span class="pre">--help</span></code> output of the script is largely self-explanatory
195+(<a class="reference internal" href="index.html#toolboxing-common"><span class="std std-ref">Common commands &amp; environment</span></a>):</p>
196+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage::
197+ morty.sh shell
198+ morty.sh install [all|user]
199+ morty.sh update [morty]
200+ morty.sh remove [all]
201+ morty.sh activate [service]
202+ morty.sh deactivate [service]
203+ morty.sh inspect [service]
204+ morty.sh option [debug-on|debug-off]
205+ morty.sh apache [install|remove]
206+ morty.sh nginx [install|remove]
207+ morty.sh info [searx]
208+
209+shell
210+ start interactive shell from user morty
211+install / remove
212+ all: complete setup of morty service
213+ user: add/remove service user &#39;morty&#39; (/usr/local/morty)
214+update morty
215+ Update morty installation (/usr/local/morty)
216+activate service
217+ activate and start service daemon (systemd unit)
218+deactivate service
219+ stop and deactivate service daemon (systemd unit)
220+inspect service
221+ show service status and log
222+option
223+ set one of the available options
224+apache : http://192.168.1.127/morty/
225+ :install: apache site with a reverse proxy (ProxyPass)
226+ :remove: apache site morty.conf
227+nginx (http://192.168.1.127/morty/)
228+ :install: nginx site with a reverse proxy (ProxyPass)
229+ :remove: nginx site morty.conf
230+
231+If needed, set the environment variables in the &#39;.config.sh&#39; file::
232+ PUBLIC_URL_MORTY: http://192.168.1.127/morty/
233+ MORTY_LISTEN: 127.0.0.1:3000
234+ SERVICE_USER: morty
235+
236+To activate result and image proxy in searx, edit settings.yml (read:
237+https://asciimoo.github.io/searx/admin/morty.html)::
238+ result_proxy:
239+ url : http://192.168.1.127/morty/
240+ server:
241+ image_proxy : True
242+</pre></div>
243+</div>
244+</div>
245+</div>
246+
247+
248+ </div>
249+ </div>
250+ </div>
251+ <span id="sidebar-top"></span>
252+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
253+ <div class="sphinxsidebarwrapper">
254+
255+
256+ <p class="logo"><a href="../index.html">
257+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
258+ </a></p>
259+
260+
261+ <h3>Project Links</h3>
262+ <ul>
263+ <li><a href="https://github.com/asciimoo/searx">Source</a>
264+
265+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
266+
267+ <li><a href="https://searx.space/">Public instances</a>
268+
269+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
270+ </ul><h3>Navigation</h3>
271+<ul>
272+ <li><a href="../index.html">Overview</a>
273+ <ul>
274+ <li><a href="index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a>
275+ <ul>
276+ <li>Previous: <a href="filtron.sh.html" title="previous chapter"><code class="docutils literal notranslate"><span class="pre">utils/filtron.sh</span></code></a>
277+ <li>Next: <a href="lxc.sh.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">utils/lxc.sh</span></code></a></ul>
278+ </li>
279+ </ul>
280+ </li>
281+</ul>
282+<div id="searchbox" style="display: none" role="search">
283+ <h3 id="searchlabel">Quick search</h3>
284+ <div class="searchformwrapper">
285+ <form class="search" action="../search.html" method="get">
286+ <input type="text" name="q" aria-labelledby="searchlabel" />
287+ <input type="submit" value="Go" />
288+ </form>
289+ </div>
290+</div>
291+<script>$('#searchbox').show(0);</script>
292+ </div>
293+ </div>
294+ <div class="clearer"></div>
295+ </div>
296+
297+ <div class="footer" role="contentinfo">
298+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
299+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
300+ </div>
301+ <script src="../_static/version_warning_offset.js"></script>
302+
303+ </body>
304+</html>
utils/searx.sh.htmlnew file+177
@@ -0,0 +1,177 @@
1+
2+<!DOCTYPE html>
3+
4+<html>
5+ <head>
6+ <meta charset="utf-8" />
7+ <meta name="viewport" content="width=device-width, initial-scale=1">
8+ <title>utils/searx.sh &#8212; Searx Documentation (Searx-0.16.0.tex)</title>
9+ <link rel="stylesheet" href="../_static/searx.css" type="text/css" />
10+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
11+ <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
12+ <script src="../_static/jquery.js"></script>
13+ <script src="../_static/underscore.js"></script>
14+ <script src="../_static/doctools.js"></script>
15+ <script src="../_static/language_data.js"></script>
16+ <link rel="index" title="Index" href="../genindex.html" />
17+ <link rel="search" title="Search" href="../search.html" />
18+ <link rel="next" title="utils/filtron.sh" href="filtron.sh.html" />
19+ <link rel="prev" title="Tooling box utils/*" href="index.html" />
20+ <script>DOCUMENTATION_OPTIONS.URL_ROOT = '../';</script>
21+
22+ </head><body>
23+ <div class="related" role="navigation" aria-label="related navigation">
24+ <h3>Navigation</h3>
25+ <ul>
26+ <li class="right" style="margin-right: 10px">
27+ <a href="../genindex.html" title="General Index"
28+ accesskey="I">index</a></li>
29+ <li class="right" >
30+ <a href="filtron.sh.html" title="utils/filtron.sh"
31+ accesskey="N">next</a> |</li>
32+ <li class="right" >
33+ <a href="index.html" title="Tooling box utils/*"
34+ accesskey="P">previous</a> |</li>
35+ <li class="nav-item nav-item-0"><a href="../index.html">Searx Documentation (Searx-0.16.0.tex)</a> &#187;</li>
36+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a> &#187;</li>
37+ </ul>
38+ </div>
39+
40+ <div class="document">
41+ <div class="documentwrapper">
42+ <div class="bodywrapper">
43+ <div class="body" role="main">
44+
45+ <div class="section" id="utils-searx-sh">
46+<span id="searx-sh"></span><h1><code class="docutils literal notranslate"><span class="pre">utils/searx.sh</span></code><a class="headerlink" href="#utils-searx-sh" title="Permalink to this headline">¶</a></h1>
47+<div class="sidebar">
48+<p class="sidebar-title">further reading</p>
49+<ul class="simple">
50+<li><p><a class="reference internal" href="../admin/architecture.html#architecture"><span class="std std-ref">Architecture</span></a></p></li>
51+<li><p><a class="reference internal" href="../admin/installation.html#installation"><span class="std std-ref">Installation</span></a></p></li>
52+<li><p><a class="reference internal" href="../admin/installation-nginx.html#installation-nginx"><span class="std std-ref">Install with nginx</span></a></p></li>
53+<li><p><a class="reference internal" href="../admin/installation-apache.html#installation-apache"><span class="std std-ref">Install with apache</span></a></p></li>
54+</ul>
55+</div>
56+<p>To simplify installation and maintenance of a searx instance you can use the
57+script <a class="reference external" href="https://github.com/asciimoo/searx/blob/master/utils/searx.sh">git://utils/searx.sh</a>.</p>
58+<div class="section" id="install">
59+<h2>Install<a class="headerlink" href="#install" title="Permalink to this headline">¶</a></h2>
60+<p>In most cases you will install searx simply by running the command:</p>
61+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo -H ./utils/searx.sh install all
62+</pre></div>
63+</div>
64+<p>The script adds a <code class="docutils literal notranslate"><span class="pre">${SERVICE_USER}</span></code> (default:<code class="docutils literal notranslate"><span class="pre">searx</span></code>) and installs searx
65+into this user account. The installation is described in chapter
66+<a class="reference internal" href="../admin/installation-searx.html#installation-basic"><span class="std std-ref">Step by step installation</span></a>.</p>
67+</div>
68+<div class="section" id="overview">
69+<span id="intranet-reverse-proxy"></span><h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
70+<p>The <code class="docutils literal notranslate"><span class="pre">--help</span></code> output of the script is largely self-explanatory
71+(<a class="reference internal" href="index.html#toolboxing-common"><span class="std std-ref">Common commands &amp; environment</span></a>):</p>
72+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage::
73+ searx.sh shell
74+ searx.sh install [all|user|searx-src|pyenv|uwsgi|packages|buildhost]
75+ searx.sh update [searx]
76+ searx.sh remove [all|user|pyenv|searx-src]
77+ searx.sh activate [service]
78+ searx.sh deactivate [service]
79+ searx.sh inspect [service]
80+ searx.sh option [debug-[on|off]|image-proxy-[on|off]|result-proxy &lt;url&gt; &lt;key&gt;]
81+ searx.sh apache [install|remove]
82+
83+shell
84+ start interactive shell from user searx
85+install / remove
86+ :all: complete (de-) installation of searx service
87+ :user: add/remove service user &#39;searx&#39; (/usr/local/searx)
88+ :searx-src: clone https://github.com/asciimoo/searx
89+ :pyenv: create/remove virtualenv (python) in /usr/local/searx/searx-pyenv
90+ :uwsgi: install searx uWSGI application
91+ :settings: reinstall settings from /800GBPCIex4/share/test123/return42-searx/searx/settings.yml
92+ :packages: install needed packages from OS package manager
93+ :buildhost: install packages from OS package manager needed by buildhosts
94+update searx
95+ Update searx installation (/usr/local/searx)
96+activate service
97+ activate and start service daemon (systemd unit)
98+deactivate service
99+ stop and deactivate service daemon (systemd unit)
100+inspect service
101+ run some small tests and inspect service&#39;s status and log
102+option
103+ set one of the available options
104+apache
105+ :install: apache site with the searx uwsgi app
106+ :remove: apache site
107+
108+searx settings: /etc/searx/settings.yml
109+
110+If needed, set PUBLIC_URL of your WEB service in the &#39;.config.sh&#39; file::
111+ PUBLIC_URL : http://192.168.1.127/searx
112+ SEARX_INSTANCE_NAME : searx@192.168.1.127
113+ SERVICE_USER : searx
114+ SEARX_INTERNAL_HTTP : http://127.0.0.1:8888
115+</pre></div>
116+</div>
117+</div>
118+</div>
119+
120+
121+ </div>
122+ </div>
123+ </div>
124+ <span id="sidebar-top"></span>
125+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
126+ <div class="sphinxsidebarwrapper">
127+
128+
129+ <p class="logo"><a href="../index.html">
130+ <img class="logo" src="../_static/searx_logo_small.png" alt="Logo"/>
131+ </a></p>
132+
133+
134+ <h3>Project Links</h3>
135+ <ul>
136+ <li><a href="https://github.com/asciimoo/searx">Source</a>
137+
138+ <li><a href="https://github.com/asciimoo/searx/wiki">Wiki</a>
139+
140+ <li><a href="https://searx.space/">Public instances</a>
141+
142+ <li><a href="https://twitter.com/Searx_engine">Twitter</a>
143+ </ul><h3>Navigation</h3>
144+<ul>
145+ <li><a href="../index.html">Overview</a>
146+ <ul>
147+ <li><a href="index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a>
148+ <ul>
149+ <li>Previous: <a href="index.html" title="previous chapter">Tooling box <code class="docutils literal notranslate"><span class="pre">utils/*</span></code></a>
150+ <li>Next: <a href="filtron.sh.html" title="next chapter"><code class="docutils literal notranslate"><span class="pre">utils/filtron.sh</span></code></a></ul>
151+ </li>
152+ </ul>
153+ </li>
154+</ul>
155+<div id="searchbox" style="display: none" role="search">
156+ <h3 id="searchlabel">Quick search</h3>
157+ <div class="searchformwrapper">
158+ <form class="search" action="../search.html" method="get">
159+ <input type="text" name="q" aria-labelledby="searchlabel" />
160+ <input type="submit" value="Go" />
161+ </form>
162+ </div>
163+</div>
164+<script>$('#searchbox').show(0);</script>
165+ </div>
166+ </div>
167+ <div class="clearer"></div>
168+ </div>
169+
170+ <div class="footer" role="contentinfo">
171+ &#169; Copyright 2015-2020, Adam Tauber, Noémi Ványi.
172+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.1.
173+ </div>
174+ <script src="../_static/version_warning_offset.js"></script>
175+
176+ </body>
177+</html>