installation-uwsgi.html 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. <!DOCTYPE html>
  2. <html lang="en" data-content_root="../">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>uWSGI &#8212; SearXNG Documentation (2025.4.30+fd33559cf)</title>
  8. <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=6625fa76" />
  9. <link rel="stylesheet" type="text/css" href="../_static/searxng.css?v=52e4ff28" />
  10. <link rel="stylesheet" type="text/css" href="../_static/tabs.css?v=a5c4661c" />
  11. <script src="../_static/documentation_options.js?v=b12b0e12"></script>
  12. <script src="../_static/doctools.js?v=9a2dae69"></script>
  13. <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
  14. <script data-project="searxng" data-version="2025.4.30+fd33559cf" src="../_static/describe_version.js?v=fa7f30d0"></script>
  15. <script src="../_static/tabs.js?v=3030b3cb"></script>
  16. <link rel="index" title="Index" href="../genindex.html" />
  17. <link rel="search" title="Search" href="../search.html" />
  18. <link rel="next" title="NGINX" href="installation-nginx.html" />
  19. <link rel="prev" title="Step by step installation" href="installation-searxng.html" />
  20. </head><body>
  21. <div class="related" role="navigation" aria-label="Related">
  22. <h3>Navigation</h3>
  23. <ul>
  24. <li class="right" style="margin-right: 10px">
  25. <a href="../genindex.html" title="General Index"
  26. accesskey="I">index</a></li>
  27. <li class="right" >
  28. <a href="../py-modindex.html" title="Python Module Index"
  29. >modules</a> |</li>
  30. <li class="right" >
  31. <a href="installation-nginx.html" title="NGINX"
  32. accesskey="N">next</a> |</li>
  33. <li class="right" >
  34. <a href="installation-searxng.html" title="Step by step installation"
  35. accesskey="P">previous</a> |</li>
  36. <li class="nav-item nav-item-0"><a href="../index.html">SearXNG Documentation (2025.4.30+fd33559cf)</a> &#187;</li>
  37. <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Administrator documentation</a> &#187;</li>
  38. <li class="nav-item nav-item-this"><a href="">uWSGI</a></li>
  39. </ul>
  40. </div>
  41. <div class="document">
  42. <div class="documentwrapper">
  43. <div class="bodywrapper">
  44. <div class="body" role="main">
  45. <section id="uwsgi">
  46. <span id="searxng-uwsgi"></span><h1>uWSGI<a class="headerlink" href="#uwsgi" title="Link to this heading">¶</a></h1>
  47. <aside class="sidebar">
  48. <p class="sidebar-title">further reading</p>
  49. <ul class="simple">
  50. <li><p><a class="reference external" href="https://www.freedesktop.org/software/systemd/man/systemd.unit.html">systemd.unit</a></p></li>
  51. <li><p><a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html">uWSGI Emperor</a></p></li>
  52. </ul>
  53. </aside>
  54. <nav class="contents local" id="contents">
  55. <ul class="simple">
  56. <li><p><a class="reference internal" href="#origin-uwsgi" id="id7">Origin uWSGI</a></p></li>
  57. <li><p><a class="reference internal" href="#distributors" id="id8">Distributors</a></p>
  58. <ul>
  59. <li><p><a class="reference internal" href="#debian-s-uwsgi-layout" id="id9">Debian’s uWSGI layout</a></p></li>
  60. </ul>
  61. </li>
  62. <li><p><a class="reference internal" href="#uwsgi-maintenance" id="id10">uWSGI maintenance</a></p></li>
  63. <li><p><a class="reference internal" href="#uwsgi-setup" id="id11">uWSGI setup</a></p></li>
  64. <li><p><a class="reference internal" href="#pitfalls-of-the-tyrant-mode" id="id12">Pitfalls of the Tyrant mode</a></p></li>
  65. </ul>
  66. </nav>
  67. <section id="origin-uwsgi">
  68. <h2><a class="toc-backref" href="#id7" role="doc-backlink">Origin uWSGI</a><a class="headerlink" href="#origin-uwsgi" title="Link to this heading">¶</a></h2>
  69. <p>How uWSGI is implemented by distributors varies. The uWSGI project itself
  70. recommends two methods:</p>
  71. <ol class="arabic simple">
  72. <li><p><a class="reference external" href="https://www.freedesktop.org/software/systemd/man/systemd.unit.html">systemd.unit</a> template file 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></li>
  73. </ol>
  74. <blockquote>
  75. <div><p>There is one <a class="reference external" href="http://0pointer.de/blog/projects/instances.html">systemd unit template</a> on the system installed and one <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files">uwsgi
  76. ini file</a> per uWSGI-app placed at dedicated locations. Take archlinux and a
  77. <code class="docutils literal notranslate"><span class="pre">searxng.ini</span></code> as example:</p>
  78. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemd</span> <span class="n">template</span> <span class="n">unit</span><span class="p">:</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">systemd</span><span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">@.</span><span class="n">service</span>
  79. <span class="n">contains</span><span class="p">:</span> <span class="p">[</span><span class="n">Service</span><span class="p">]</span>
  80. <span class="n">ExecStart</span><span class="o">=/</span><span class="n">usr</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">uwsgi</span> <span class="o">--</span><span class="n">ini</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/%</span><span class="n">I</span><span class="o">.</span><span class="n">ini</span>
  81. <span class="n">SearXNG</span> <span class="n">application</span><span class="p">:</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span>
  82. <span class="n">links</span> <span class="n">to</span><span class="p">:</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">apps</span><span class="o">-</span><span class="n">available</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span>
  83. </pre></div>
  84. </div>
  85. <p>The SearXNG app (template <code class="docutils literal notranslate"><span class="pre">/etc/uwsgi/%I.ini</span></code>) can be maintained as known
  86. from common systemd units:</p>
  87. <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>systemctl<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>uwsgi@searxng
  88. $<span class="w"> </span>systemctl<span class="w"> </span>start<span class="w"> </span>uwsgi@searxng
  89. $<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>uwsgi@searxng
  90. $<span class="w"> </span>systemctl<span class="w"> </span>stop<span class="w"> </span>uwsgi@searxng
  91. </pre></div>
  92. </div>
  93. </div></blockquote>
  94. <ol class="arabic simple" start="2">
  95. <li><p>The <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html">uWSGI Emperor</a> which fits for maintaining a large range of uwsgi
  96. apps and there is a <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting">Tyrant mode</a> to secure multi-user hosting.</p></li>
  97. </ol>
  98. <blockquote>
  99. <div><p>The Emperor mode is a special uWSGI instance that will monitor specific
  100. events. The Emperor mode (the service) is started by a (common, not template)
  101. systemd unit.</p>
  102. <p>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 ini file</a>s
  103. (also know as <em>vassals</em>). If a <em>vassal</em> is added, removed or the timestamp is
  104. modified, a corresponding action takes place: a new uWSGI instance is started,
  105. reload or stopped. Take Fedora and a <code class="docutils literal notranslate"><span class="pre">searxng.ini</span></code> as example:</p>
  106. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">to</span> <span class="n">install</span> <span class="o">&amp;</span> <span class="n">start</span> <span class="n">SearXNG</span> <span class="n">instance</span> <span class="n">create</span> <span class="o">--&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">.</span><span class="n">d</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span>
  107. <span class="n">to</span> <span class="n">reload</span> <span class="n">the</span> <span class="n">instance</span> <span class="n">edit</span> <span class="n">timestamp</span> <span class="o">--&gt;</span> <span class="n">touch</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">.</span><span class="n">d</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span>
  108. <span class="n">to</span> <span class="n">stop</span> <span class="n">instance</span> <span class="n">remove</span> <span class="n">ini</span> <span class="o">--&gt;</span> <span class="n">rm</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">.</span><span class="n">d</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span>
  109. </pre></div>
  110. </div>
  111. </div></blockquote>
  112. </section>
  113. <section id="distributors">
  114. <h2><a class="toc-backref" href="#id8" role="doc-backlink">Distributors</a><a class="headerlink" href="#distributors" title="Link to this heading">¶</a></h2>
  115. <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
  116. mostly offer their users, even if they differ in the way they implement both
  117. modes and their defaults. Another point they might differ in is the packaging of
  118. plugins (if so, compare <a class="reference internal" href="installation-searxng.html#install-packages"><span class="std std-ref">Install packages</span></a>) and what the default python
  119. interpreter is (python2 vs. python3).</p>
  120. <p>While archlinux does not start a uWSGI service by default, Fedora (RHEL) starts
  121. a Emperor in <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting">Tyrant mode</a> by default (you should have read <a class="reference internal" href="#uwsgi-tyrant-mode-pitfalls"><span class="std std-ref">Pitfalls of the Tyrant mode</span></a>). Worth to know; debian (ubuntu) follow a complete different
  122. approach, read see <a class="reference internal" href="#debian-s-uwsgi-layout"><span class="std std-ref">Debian’s uWSGI layout</span></a>.</p>
  123. <section id="debian-s-uwsgi-layout">
  124. <span id="id1"></span><h3><a class="toc-backref" href="#id9" role="doc-backlink">Debian’s uWSGI layout</a><a class="headerlink" href="#debian-s-uwsgi-layout" title="Link to this heading">¶</a></h3>
  125. <p>Be aware, Debian’s uWSGI layout is quite different from the standard uWSGI
  126. configuration. Your are familiar with <a class="reference internal" href="installation-apache.html#debian-s-apache-layout"><span class="std std-ref">Debian’s Apache layout</span></a>? .. they do a
  127. similar thing for the uWSGI infrastructure. The folders are:</p>
  128. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">apps</span><span class="o">-</span><span class="n">available</span><span class="o">/</span>
  129. <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">apps</span><span class="o">-</span><span class="n">enabled</span><span class="o">/</span>
  130. </pre></div>
  131. </div>
  132. <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>
  133. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">apps</span><span class="o">-</span><span class="n">available</span><span class="o">/</span><span class="n">searxng</span><span class="o">.</span><span class="n">ini</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">uwsgi</span><span class="o">/</span><span class="n">apps</span><span class="o">-</span><span class="n">enabled</span><span class="o">/</span>
  134. </pre></div>
  135. </div>
  136. <p>More details can be found in the <a class="reference external" href="https://salsa.debian.org/uwsgi-team/uwsgi/-/raw/debian/latest/debian/uwsgi.README.Debian">uwsgi.README.Debian</a>
  137. (<code class="docutils literal notranslate"><span class="pre">/usr/share/doc/uwsgi/README.Debian.gz</span></code>). Some commands you should know on
  138. Debian:</p>
  139. <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Commands recognized by init.d script
  140. ====================================
  141. You can issue to init.d script following commands:
  142. * start | starts daemon
  143. * stop | stops daemon
  144. * reload | sends to daemon SIGHUP signal
  145. * force-reload | sends to daemon SIGTERM signal
  146. * restart | issues &#39;stop&#39;, then &#39;start&#39; commands
  147. * status | shows status of daemon instance (running/not running)
  148. &#39;status&#39; command must be issued with exactly one argument: &#39;&lt;confname&gt;&#39;.
  149. Controlling specific instances of uWSGI
  150. =======================================
  151. You could control specific instance(s) by issuing:
  152. SYSTEMCTL_SKIP_REDIRECT=1 service uwsgi &lt;command&gt; &lt;confname&gt; &lt;confname&gt;...
  153. where:
  154. * &lt;command&gt; is one of &#39;start&#39;, &#39;stop&#39; etc.
  155. * &lt;confname&gt; is the name of configuration file (without extension)
  156. For example, this is how instance for /etc/uwsgi/apps-enabled/hello.xml is
  157. started:
  158. SYSTEMCTL_SKIP_REDIRECT=1 service uwsgi start hello
  159. </pre></div>
  160. </div>
  161. </section>
  162. </section>
  163. <section id="uwsgi-maintenance">
  164. <span id="id2"></span><h2><a class="toc-backref" href="#id10" role="doc-backlink">uWSGI maintenance</a><a class="headerlink" href="#uwsgi-maintenance" title="Link to this heading">¶</a></h2>
  165. <div class="sphinx-tabs docutils container">
  166. <div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-0-VWJ1bnR1IC8gZGViaWFu" aria-selected="true" class="sphinx-tabs-tab group-tab" id="tab-0-VWJ1bnR1IC8gZGViaWFu" name="VWJ1bnR1IC8gZGViaWFu" role="tab" tabindex="0">Ubuntu / debian</button><button aria-controls="panel-0-QXJjaCBMaW51eA==" aria-selected="false" class="sphinx-tabs-tab group-tab" id="tab-0-QXJjaCBMaW51eA==" name="QXJjaCBMaW51eA==" role="tab" tabindex="-1">Arch Linux</button><button aria-controls="panel-0-RmVkb3JhIC8gUkhFTA==" aria-selected="false" class="sphinx-tabs-tab group-tab" id="tab-0-RmVkb3JhIC8gUkhFTA==" name="RmVkb3JhIC8gUkhFTA==" role="tab" tabindex="-1">Fedora / RHEL</button></div><div aria-labelledby="tab-0-VWJ1bnR1IC8gZGViaWFu" class="sphinx-tabs-panel group-tab" id="panel-0-VWJ1bnR1IC8gZGViaWFu" name="VWJ1bnR1IC8gZGViaWFu" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># init.d --&gt; /usr/share/doc/uwsgi/README.Debian.gz</span>
  167. <span class="c1"># For uWSGI debian uses the LSB init process, this might be changed</span>
  168. <span class="c1"># one day, see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833067</span>
  169. create<span class="w"> </span>/etc/uwsgi/apps-available/searxng.ini
  170. enable:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>ln<span class="w"> </span>-s<span class="w"> </span>/etc/uwsgi/apps-available/searxng.ini<span class="w"> </span>/etc/uwsgi/apps-enabled/
  171. start:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>service<span class="w"> </span>uwsgi<span class="w"> </span>start<span class="w"> </span>searxng
  172. restart:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>service<span class="w"> </span>uwsgi<span class="w"> </span>restart<span class="w"> </span>searxng
  173. stop:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>service<span class="w"> </span>uwsgi<span class="w"> </span>stop<span class="w"> </span>searxng
  174. disable:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>rm<span class="w"> </span>/etc/uwsgi/apps-enabled/searxng.ini
  175. </pre></div>
  176. </div>
  177. </div><div aria-labelledby="tab-0-QXJjaCBMaW51eA==" class="sphinx-tabs-panel group-tab" hidden="true" id="panel-0-QXJjaCBMaW51eA==" name="QXJjaCBMaW51eA==" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># systemd --&gt; /usr/lib/systemd/system/uwsgi@.service</span>
  178. <span class="c1"># For uWSGI archlinux uses systemd template units, see</span>
  179. <span class="c1"># - http://0pointer.de/blog/projects/instances.html</span>
  180. <span class="c1"># - https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd</span>
  181. create:<span class="w"> </span>/etc/uwsgi/searxng.ini
  182. enable:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>systemctl<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>uwsgi@searxng
  183. start:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>systemctl<span class="w"> </span>start<span class="w"> </span>uwsgi@searxng
  184. restart:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>uwsgi@searxng
  185. stop:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>systemctl<span class="w"> </span>stop<span class="w"> </span>uwsgi@searxng
  186. disable:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>systemctl<span class="w"> </span>disable<span class="w"> </span>uwsgi@searxng
  187. </pre></div>
  188. </div>
  189. </div><div aria-labelledby="tab-0-RmVkb3JhIC8gUkhFTA==" class="sphinx-tabs-panel group-tab" hidden="true" id="panel-0-RmVkb3JhIC8gUkhFTA==" name="RmVkb3JhIC8gUkhFTA==" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># systemd --&gt; /usr/lib/systemd/system/uwsgi.service</span>
  190. <span class="c1"># The unit file starts uWSGI in emperor mode (/etc/uwsgi.ini), see</span>
  191. <span class="c1"># - https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html</span>
  192. create:<span class="w"> </span>/etc/uwsgi.d/searxng.ini
  193. restart:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>touch<span class="w"> </span>/etc/uwsgi.d/searxng.ini
  194. disable:<span class="w"> </span>sudo<span class="w"> </span>-H<span class="w"> </span>rm<span class="w"> </span>/etc/uwsgi.d/searxng.ini
  195. </pre></div>
  196. </div>
  197. </div></div>
  198. </section>
  199. <section id="uwsgi-setup">
  200. <span id="id3"></span><h2><a class="toc-backref" href="#id11" role="doc-backlink">uWSGI setup</a><a class="headerlink" href="#uwsgi-setup" title="Link to this heading">¶</a></h2>
  201. <p>Create the configuration ini-file according to your distribution and restart the
  202. uwsgi application. As shown below, the <a class="reference internal" href="installation-scripts.html#installation-scripts"><span class="std std-ref">Installation Script</span></a> installs by
  203. default:</p>
  204. <ul class="simple">
  205. <li><p>a uWSGI setup that listens on a socket and</p></li>
  206. <li><p>enables <a class="reference internal" href="settings/settings_ui.html#static-use-hash"><span class="std std-ref">cache busting</span></a>.</p></li>
  207. </ul>
  208. <div class="sphinx-tabs docutils container">
  209. <div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-1-VWJ1bnR1IC8gZGViaWFu" aria-selected="true" class="sphinx-tabs-tab group-tab" id="tab-1-VWJ1bnR1IC8gZGViaWFu" name="VWJ1bnR1IC8gZGViaWFu" role="tab" tabindex="0">Ubuntu / debian</button><button aria-controls="panel-1-QXJjaCBMaW51eA==" aria-selected="false" class="sphinx-tabs-tab group-tab" id="tab-1-QXJjaCBMaW51eA==" name="QXJjaCBMaW51eA==" role="tab" tabindex="-1">Arch Linux</button><button aria-controls="panel-1-RmVkb3JhIC8gUkhFTA==" aria-selected="false" class="sphinx-tabs-tab group-tab" id="tab-1-RmVkb3JhIC8gUkhFTA==" name="RmVkb3JhIC8gUkhFTA==" role="tab" tabindex="-1">Fedora / RHEL</button></div><div aria-labelledby="tab-1-VWJ1bnR1IC8gZGViaWFu" class="sphinx-tabs-panel group-tab" id="panel-1-VWJ1bnR1IC8gZGViaWFu" name="VWJ1bnR1IC8gZGViaWFu" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- mode: conf; coding: utf-8 -*-</span>
  210. <span class="o">[</span>uwsgi<span class="o">]</span>
  211. <span class="c1"># uWSGI core</span>
  212. <span class="c1"># ----------</span>
  213. <span class="c1">#</span>
  214. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
  215. <span class="c1"># Who will run the code / Hint: in emperor-tyrant mode uid &amp; gid setting will be</span>
  216. <span class="c1"># ignored [1]. Mode emperor-tyrant is the default on fedora (/etc/uwsgi.ini).</span>
  217. <span class="c1">#</span>
  218. <span class="c1"># [1] https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting</span>
  219. <span class="c1">#</span>
  220. <span class="nv">uid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  221. <span class="nv">gid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  222. <span class="c1"># set (python) default encoding UTF-8</span>
  223. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANG</span><span class="o">=</span>C.UTF-8
  224. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANGUAGE</span><span class="o">=</span>C.UTF-8
  225. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LC_ALL</span><span class="o">=</span>C.UTF-8
  226. <span class="c1"># chdir to specified directory before apps loading</span>
  227. <span class="nv">chdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src/searx
  228. <span class="c1"># SearXNG configuration (settings.yml)</span>
  229. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">SEARXNG_SETTINGS_PATH</span><span class="o">=</span>/etc/searxng/settings.yml
  230. <span class="c1"># disable logging for privacy</span>
  231. disable-logging<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  232. <span class="c1"># The right granted on the created socket</span>
  233. chmod-socket<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">666</span>
  234. <span class="c1"># Plugin to use and interpreter config</span>
  235. single-interpreter<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  236. <span class="c1"># enable master process</span>
  237. <span class="nv">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  238. <span class="c1"># load apps in each worker instead of the master</span>
  239. lazy-apps<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  240. <span class="c1"># load uWSGI plugins</span>
  241. <span class="nv">plugin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>python3,http
  242. <span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
  243. <span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
  244. <span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
  245. <span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
  246. <span class="c1"># default behaviour is for performance reasons.</span>
  247. enable-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  248. <span class="c1"># Number of workers (usually CPU count)</span>
  249. <span class="nv">workers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  250. <span class="nv">threads</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span>
  251. <span class="c1"># plugin: python</span>
  252. <span class="c1"># --------------</span>
  253. <span class="c1">#</span>
  254. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
  255. <span class="c1"># load a WSGI module</span>
  256. <span class="nv">module</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searx.webapp
  257. <span class="c1"># set PYTHONHOME/virtualenv</span>
  258. <span class="nv">virtualenv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searx-pyenv
  259. <span class="c1"># add directory (or glob) to pythonpath</span>
  260. <span class="nv">pythonpath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src
  261. <span class="c1"># speak to upstream</span>
  262. <span class="c1"># -----------------</span>
  263. <span class="nv">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/run/socket
  264. buffer-size<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">8192</span>
  265. <span class="c1"># uWSGI serves the static files and in settings.yml we use::</span>
  266. <span class="c1">#</span>
  267. <span class="c1"># ui:</span>
  268. <span class="c1"># static_use_hash: true</span>
  269. <span class="c1">#</span>
  270. static-map<span class="w"> </span><span class="o">=</span><span class="w"> </span>/static<span class="o">=</span>/usr/local/searxng/searxng-src/searx/static
  271. static-gzip-all<span class="w"> </span><span class="o">=</span><span class="w"> </span>True
  272. offload-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  273. </pre></div>
  274. </div>
  275. </div><div aria-labelledby="tab-1-QXJjaCBMaW51eA==" class="sphinx-tabs-panel group-tab" hidden="true" id="panel-1-QXJjaCBMaW51eA==" name="QXJjaCBMaW51eA==" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- mode: conf; coding: utf-8 -*-</span>
  276. <span class="o">[</span>uwsgi<span class="o">]</span>
  277. <span class="c1"># uWSGI core</span>
  278. <span class="c1"># ----------</span>
  279. <span class="c1">#</span>
  280. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
  281. <span class="c1"># Who will run the code</span>
  282. <span class="nv">uid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  283. <span class="nv">gid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  284. <span class="c1"># set (python) default encoding UTF-8</span>
  285. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANG</span><span class="o">=</span>C.UTF-8
  286. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANGUAGE</span><span class="o">=</span>C.UTF-8
  287. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LC_ALL</span><span class="o">=</span>C.UTF-8
  288. <span class="c1"># chdir to specified directory before apps loading</span>
  289. <span class="nv">chdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src/searx
  290. <span class="c1"># SearXNG configuration (settings.yml)</span>
  291. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">SEARXNG_SETTINGS_PATH</span><span class="o">=</span>/etc/searxng/settings.yml
  292. <span class="c1"># disable logging for privacy</span>
  293. <span class="nv">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>systemd
  294. disable-logging<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  295. <span class="c1"># The right granted on the created socket</span>
  296. chmod-socket<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">666</span>
  297. <span class="c1"># Plugin to use and interpreter config</span>
  298. single-interpreter<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  299. <span class="c1"># enable master process</span>
  300. <span class="nv">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  301. <span class="c1"># load apps in each worker instead of the master</span>
  302. lazy-apps<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  303. <span class="c1"># load uWSGI plugins</span>
  304. <span class="nv">plugin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>python
  305. <span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
  306. <span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
  307. <span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
  308. <span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
  309. <span class="c1"># default behaviour is for performance reasons.</span>
  310. enable-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  311. <span class="c1"># Number of workers (usually CPU count)</span>
  312. <span class="nv">workers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  313. <span class="nv">threads</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span>
  314. <span class="c1"># plugin: python</span>
  315. <span class="c1"># --------------</span>
  316. <span class="c1">#</span>
  317. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
  318. <span class="c1"># load a WSGI module</span>
  319. <span class="nv">module</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searx.webapp
  320. <span class="c1"># set PYTHONHOME/virtualenv</span>
  321. <span class="nv">virtualenv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searx-pyenv
  322. <span class="c1"># add directory (or glob) to pythonpath</span>
  323. <span class="nv">pythonpath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src
  324. <span class="c1"># speak to upstream</span>
  325. <span class="c1"># -----------------</span>
  326. <span class="nv">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/run/socket
  327. buffer-size<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">8192</span>
  328. <span class="c1"># uWSGI serves the static files and in settings.yml we use::</span>
  329. <span class="c1">#</span>
  330. <span class="c1"># ui:</span>
  331. <span class="c1"># static_use_hash: true</span>
  332. <span class="c1">#</span>
  333. static-map<span class="w"> </span><span class="o">=</span><span class="w"> </span>/static<span class="o">=</span>/usr/local/searxng/searxng-src/searx/static
  334. static-gzip-all<span class="w"> </span><span class="o">=</span><span class="w"> </span>True
  335. offload-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  336. </pre></div>
  337. </div>
  338. </div><div aria-labelledby="tab-1-RmVkb3JhIC8gUkhFTA==" class="sphinx-tabs-panel group-tab" hidden="true" id="panel-1-RmVkb3JhIC8gUkhFTA==" name="RmVkb3JhIC8gUkhFTA==" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- mode: conf; coding: utf-8 -*-</span>
  339. <span class="o">[</span>uwsgi<span class="o">]</span>
  340. <span class="c1"># uWSGI core</span>
  341. <span class="c1"># ----------</span>
  342. <span class="c1">#</span>
  343. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core</span>
  344. <span class="c1"># Who will run the code / Hint: in emperor-tyrant mode uid &amp; gid setting will be</span>
  345. <span class="c1"># ignored [1]. Mode emperor-tyrant is the default on fedora (/etc/uwsgi.ini).</span>
  346. <span class="c1">#</span>
  347. <span class="c1"># [1] https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting</span>
  348. <span class="c1">#</span>
  349. <span class="nv">uid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  350. <span class="nv">gid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searxng
  351. <span class="c1"># set (python) default encoding UTF-8</span>
  352. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANG</span><span class="o">=</span>C.UTF-8
  353. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LANGUAGE</span><span class="o">=</span>C.UTF-8
  354. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">LC_ALL</span><span class="o">=</span>C.UTF-8
  355. <span class="c1"># chdir to specified directory before apps loading</span>
  356. <span class="nv">chdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src/searx
  357. <span class="c1"># SearXNG configuration (settings.yml)</span>
  358. <span class="nv">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">SEARXNG_SETTINGS_PATH</span><span class="o">=</span>/etc/searxng/settings.yml
  359. <span class="c1"># disable logging for privacy</span>
  360. disable-logging<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  361. <span class="c1"># The right granted on the created socket</span>
  362. chmod-socket<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">666</span>
  363. <span class="c1"># Plugin to use and interpreter config</span>
  364. single-interpreter<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  365. <span class="c1"># enable master process</span>
  366. <span class="nv">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  367. <span class="c1"># load apps in each worker instead of the master</span>
  368. lazy-apps<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  369. <span class="c1"># load uWSGI plugins</span>
  370. <span class="nv">plugin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>python3,http
  371. <span class="c1"># By default the Python plugin does not initialize the GIL. This means your</span>
  372. <span class="c1"># app-generated threads will not run. If you need threads, remember to enable</span>
  373. <span class="c1"># them with enable-threads. Running uWSGI in multithreading mode (with the</span>
  374. <span class="c1"># threads options) will automatically enable threading support. This *strange*</span>
  375. <span class="c1"># default behaviour is for performance reasons.</span>
  376. enable-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span>
  377. <span class="c1"># Number of workers (usually CPU count)</span>
  378. <span class="nv">workers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  379. <span class="nv">threads</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span>
  380. <span class="c1"># plugin: python</span>
  381. <span class="c1"># --------------</span>
  382. <span class="c1">#</span>
  383. <span class="c1"># https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python</span>
  384. <span class="c1"># load a WSGI module</span>
  385. <span class="nv">module</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>searx.webapp
  386. <span class="c1"># set PYTHONHOME/virtualenv</span>
  387. <span class="nv">virtualenv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searx-pyenv
  388. <span class="c1"># add directory (or glob) to pythonpath</span>
  389. <span class="nv">pythonpath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/searxng-src
  390. <span class="c1"># speak to upstream</span>
  391. <span class="c1"># -----------------</span>
  392. <span class="nv">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>/usr/local/searxng/run/socket
  393. buffer-size<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">8192</span>
  394. <span class="c1"># uWSGI serves the static files and in settings.yml we use::</span>
  395. <span class="c1">#</span>
  396. <span class="c1"># ui:</span>
  397. <span class="c1"># static_use_hash: true</span>
  398. <span class="c1">#</span>
  399. static-map<span class="w"> </span><span class="o">=</span><span class="w"> </span>/static<span class="o">=</span>/usr/local/searxng/searxng-src/searx/static
  400. static-gzip-all<span class="w"> </span><span class="o">=</span><span class="w"> </span>True
  401. offload-threads<span class="w"> </span><span class="o">=</span><span class="w"> </span>%k
  402. </pre></div>
  403. </div>
  404. </div></div>
  405. </section>
  406. <section id="pitfalls-of-the-tyrant-mode">
  407. <span id="uwsgi-tyrant-mode-pitfalls"></span><h2><a class="toc-backref" href="#id12" role="doc-backlink">Pitfalls of the Tyrant mode</a><a class="headerlink" href="#pitfalls-of-the-tyrant-mode" title="Link to this heading">¶</a></h2>
  408. <p>The implementation of the process owners and groups in the <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting">Tyrant mode</a> is
  409. somewhat unusual and requires special consideration. In <a class="reference external" href="https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting">Tyrant mode</a> mode the
  410. Emperor will run the vassal using the UID/GID of the vassal configuration file
  411. (user and group of the app <code class="docutils literal notranslate"><span class="pre">.ini</span></code> file).</p>
  412. <p>Without option <code class="docutils literal notranslate"><span class="pre">emperor-tyrant-initgroups=true</span></code> in <code class="docutils literal notranslate"><span class="pre">/etc/uwsgi.ini</span></code> the
  413. process won’t get the additional groups, but this option is not available in
  414. 2.0.x branch (see <a class="reference external" href="https://github.com/unbit/uwsgi/issues/2099">#2099&#64;uWSGI</a>) the feature <a class="reference external" href="https://github.com/unbit/uwsgi/pull/752">#752&#64;uWSGI</a> has been merged (on
  415. Oct. 2014) to the master branch of uWSGI but had never been released; the last
  416. major release is from Dec. 2013, since the there had been only bugfix releases
  417. (see <a class="reference external" href="https://github.com/unbit/uwsgi/issues/2425">#2425uWSGI</a>). To shorten up:</p>
  418. <blockquote>
  419. <div><p><strong>In Tyrant mode, there is no way to get additional groups, and the uWSGI
  420. process misses additional permissions that may be needed.</strong></p>
  421. </div></blockquote>
  422. <p>For example on Fedora (RHEL): If you try to install a redis DB with socket
  423. communication and you want to connect to it from the SearXNG uWSGI, you will see a
  424. <em>Permission denied</em> in the log of your instance:</p>
  425. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>ERROR:searx.redisdb: [searxng (993)] can&#39;t connect redis DB ...
  426. ERROR:searx.redisdb: Error 13 connecting to unix socket: /usr/local/searxng-redis/run/redis.sock. Permission denied.
  427. ERROR:searx.plugins.limiter: init limiter DB failed!!!
  428. </pre></div>
  429. </div>
  430. <p>Even if your <em>searxng</em> user of the uWSGI process is added to additional groups
  431. to give access to the socket from the redis DB:</p>
  432. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ groups searxng
  433. searxng : searxng searxng-redis
  434. </pre></div>
  435. </div>
  436. <p>To see the effective groups of the uwsgi process, you have to look at the status
  437. of the process, by example:</p>
  438. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ ps -aef | grep &#39;/usr/sbin/uwsgi --ini searxng.ini&#39;
  439. searxng 93 92 0 12:43 ? 00:00:00 /usr/sbin/uwsgi --ini searxng.ini
  440. searxng 186 93 0 12:44 ? 00:00:01 /usr/sbin/uwsgi --ini searxng.ini
  441. </pre></div>
  442. </div>
  443. <p>Here you can see that the additional “Groups” of PID 186 are unset (missing gid
  444. of <code class="docutils literal notranslate"><span class="pre">searxng-redis</span></code>):</p>
  445. <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ cat /proc/186/task/186/status
  446. ...
  447. Uid: 993 993 993 993
  448. Gid: 993 993 993 993
  449. FDSize: 128
  450. Groups:
  451. ...
  452. </pre></div>
  453. </div>
  454. </section>
  455. </section>
  456. <div class="clearer"></div>
  457. </div>
  458. </div>
  459. </div>
  460. <span id="sidebar-top"></span>
  461. <div class="sphinxsidebar" role="navigation" aria-label="Main">
  462. <div class="sphinxsidebarwrapper">
  463. <p class="logo"><a href="../index.html">
  464. <img class="logo" src="../_static/searxng-wordmark.svg" alt="Logo of SearXNG"/>
  465. </a></p>
  466. <h3><a href="../index.html">Table of Contents</a></h3>
  467. <ul class="current">
  468. <li class="toctree-l1"><a class="reference internal" href="../user/index.html">User information</a></li>
  469. <li class="toctree-l1"><a class="reference internal" href="../own-instance.html">Why use a private instance?</a></li>
  470. <li class="toctree-l1 current"><a class="reference internal" href="index.html">Administrator documentation</a><ul class="current">
  471. <li class="toctree-l2"><a class="reference internal" href="settings/index.html">Settings</a></li>
  472. <li class="toctree-l2"><a class="reference internal" href="installation.html">Installation</a></li>
  473. <li class="toctree-l2"><a class="reference internal" href="installation-docker.html">Docker Container</a></li>
  474. <li class="toctree-l2"><a class="reference internal" href="installation-scripts.html">Installation Script</a></li>
  475. <li class="toctree-l2"><a class="reference internal" href="installation-searxng.html">Step by step installation</a></li>
  476. <li class="toctree-l2 current"><a class="current reference internal" href="#">uWSGI</a><ul>
  477. <li class="toctree-l3"><a class="reference internal" href="#origin-uwsgi">Origin uWSGI</a></li>
  478. <li class="toctree-l3"><a class="reference internal" href="#distributors">Distributors</a><ul>
  479. <li class="toctree-l4"><a class="reference internal" href="#debian-s-uwsgi-layout">Debian’s uWSGI layout</a></li>
  480. </ul>
  481. </li>
  482. <li class="toctree-l3"><a class="reference internal" href="#uwsgi-maintenance">uWSGI maintenance</a></li>
  483. <li class="toctree-l3"><a class="reference internal" href="#uwsgi-setup">uWSGI setup</a></li>
  484. <li class="toctree-l3"><a class="reference internal" href="#pitfalls-of-the-tyrant-mode">Pitfalls of the Tyrant mode</a></li>
  485. </ul>
  486. </li>
  487. <li class="toctree-l2"><a class="reference internal" href="installation-nginx.html">NGINX</a></li>
  488. <li class="toctree-l2"><a class="reference internal" href="installation-apache.html">Apache</a></li>
  489. <li class="toctree-l2"><a class="reference internal" href="update-searxng.html">SearXNG maintenance</a></li>
  490. <li class="toctree-l2"><a class="reference internal" href="answer-captcha.html">Answer CAPTCHA from server’s IP</a></li>
  491. <li class="toctree-l2"><a class="reference internal" href="searx.favicons.html">Favicons</a></li>
  492. <li class="toctree-l2"><a class="reference internal" href="searx.limiter.html">Limiter</a></li>
  493. <li class="toctree-l2"><a class="reference internal" href="api.html">Administration API</a></li>
  494. <li class="toctree-l2"><a class="reference internal" href="architecture.html">Architecture</a></li>
  495. <li class="toctree-l2"><a class="reference internal" href="plugins.html">List of plugins</a></li>
  496. <li class="toctree-l2"><a class="reference internal" href="buildhosts.html">Buildhosts</a></li>
  497. </ul>
  498. </li>
  499. <li class="toctree-l1"><a class="reference internal" href="../dev/index.html">Developer documentation</a></li>
  500. <li class="toctree-l1"><a class="reference internal" href="../utils/index.html">DevOps tooling box</a></li>
  501. <li class="toctree-l1"><a class="reference internal" href="../src/index.html">Source-Code</a></li>
  502. </ul>
  503. <h3>Project Links</h3>
  504. <ul>
  505. <li><a href="https://github.com/searxng/searxng/tree/master">Source</a>
  506. <li><a href="https://github.com/searxng/searxng/wiki">Wiki</a>
  507. <li><a href="https://searx.space">Public instances</a>
  508. <li><a href="https://github.com/searxng/searxng/issues">Issue Tracker</a>
  509. </ul><h3>Navigation</h3>
  510. <ul>
  511. <li><a href="../index.html">Overview</a>
  512. <ul>
  513. <li><a href="index.html">Administrator documentation</a>
  514. <ul>
  515. <li>Previous: <a href="installation-searxng.html" title="previous chapter">Step by step installation</a>
  516. <li>Next: <a href="installation-nginx.html" title="next chapter">NGINX</a></ul>
  517. </li>
  518. </ul>
  519. </li>
  520. </ul>
  521. <search id="searchbox" style="display: none" role="search">
  522. <h3 id="searchlabel">Quick search</h3>
  523. <div class="searchformwrapper">
  524. <form class="search" action="../search.html" method="get">
  525. <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
  526. <input type="submit" value="Go" />
  527. </form>
  528. </div>
  529. </search>
  530. <script>document.getElementById('searchbox').style.display = "block"</script>
  531. <div role="note" aria-label="source link">
  532. <h3>This Page</h3>
  533. <ul class="this-page-menu">
  534. <li><a href="../_sources/admin/installation-uwsgi.rst.txt"
  535. rel="nofollow">Show Source</a></li>
  536. </ul>
  537. </div>
  538. </div>
  539. </div>
  540. <div class="clearer"></div>
  541. </div>
  542. <div class="footer" role="contentinfo">
  543. &#169; Copyright SearXNG team.
  544. </div>
  545. </body>
  546. </html>