From 9492b500703be0a7c57a421d34be723849a60308 Mon Sep 17 00:00:00 2001 From: Adam Tauber Date: Sun, 8 Feb 2015 10:42:30 +0100 Subject: [PATCH] [enh] fabfile to setup searx with uwsgi+nginx under debian based distros --- utils/fabfile.py | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 utils/fabfile.py diff --git a/utils/fabfile.py b/utils/fabfile.py new file mode 100644 index 000000000..4b356c54a --- /dev/null +++ b/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)