from fabric.api import cd, run, sudo, put from io 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/searx/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)