Browse Source

[enh] fabfile to setup searx with uwsgi+nginx under debian based distros

Adam Tauber 10 years ago
parent
commit
9492b50070
1 changed files with 117 additions and 0 deletions
  1. 117 0
      utils/fabfile.py

+ 117 - 0
utils/fabfile.py

@@ -0,0 +1,117 @@
+from fabric.api import cd, run, sudo, put
+from cStringIO import StringIO
+
+
+base_dir = '/usr/local'
+hostname = 'searx.me'
+searx_dir = base_dir + '/searx'
+searx_ve_dir = searx_dir + '/searx-ve'
+current_user = run('whoami').stdout.strip()
+
+uwsgi_file = '''
+[uwsgi]
+# Who will run the code
+uid = {user}
+gid = {user}
+
+# Number of workers
+workers = 8
+
+# The right granted on the created socket
+chmod-socket = 666
+
+# Plugin to use and interpretor config
+single-interpreter = true
+master = true
+plugin = python
+
+# Module to import
+module = searx.webapp
+
+# Virtualenv and python path
+virtualenv = {searx_ve_dir}
+pythonpath = {searx_dir}
+chdir = {searx_dir}/searx
+'''.format(user=current_user,
+           searx_dir=searx_dir,
+           searx_ve_dir=searx_ve_dir)
+
+nginx_config = '''
+server {{
+    listen 80;
+    server_name {hostname};
+    server_name www.{hostname};
+    root /usr/local/searx;
+
+    location / {{
+        include uwsgi_params;
+        uwsgi_pass unix:/run/uwsgi/app/searx/socket;
+    }}
+}}
+'''.format(hostname=hostname)
+
+
+def stop():
+    sudo('/etc/init.d/uwsgi stop')
+
+
+def start():
+    sudo('/etc/init.d/uwsgi start')
+
+
+def restart():
+    sudo('/etc/init.d/uwsgi restart')
+
+
+def init():
+    if not run('test -d ' + searx_dir, warn_only=True).failed:
+        return
+
+    sudo('apt-get update')
+
+    sudo('apt-get install git'
+         ' build-essential'
+         ' libxslt-dev'
+         ' python-dev'
+         ' python-virtualenv'
+         ' python-pybabel'
+         ' zlib1g-dev'
+         ' uwsgi'
+         ' uwsgi-plugin-python'
+         ' nginx')
+
+    sudo('mkdir -p ' + base_dir)
+
+    put(StringIO(nginx_config), '/etc/nginx/sites-enabled/searx', use_sudo=True)
+    sudo('/etc/init.d/nginx restart')
+
+    with cd(base_dir):
+        sudo('git clone https://github.com/asciimoo/searx')
+
+    sudo('chown -R {user}:{user} {searx_dir}'.format(user=current_user, searx_dir=searx_dir))
+    put(StringIO(uwsgi_file), searx_dir+'/uwsgi.ini')
+    sudo('ln -s {0}/uwsgi.ini /etc/uwsgi/apps-enabled/searx.ini'.format(searx_dir))
+
+    run('virtualenv {0}'.format(searx_ve_dir))
+
+    with cd(searx_dir):
+        run('source {0}/bin/activate && pip install -r requirements.txt'.format(searx_ve_dir))
+
+    start()
+
+
+def deploy():
+    init()
+
+    with cd(searx_dir):
+        run("git stash", warn_only=True)
+        run("git pull origin master")
+        run("git stash pop", warn_only=True)
+
+    restart()
+
+
+def clean():
+    sudo('rm -rf {searx_dir}'.format(searx_dir=searx_dir), warn_only=True)
+    sudo('rm /etc/uwsgi/apps-enabled/searx.ini', warn_only=True)
+    sudo('rm /etc/nginx/sites-enabled/searx', warn_only=True)