118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | 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) |