| 
							
							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)
 |