| 
									
										
										
										
											2015-02-08 10:42:30 +01:00
										 |  |  | 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)) | 
					
						
							| 
									
										
										
										
											2016-07-11 13:52:37 +02:00
										 |  |  |     put(StringIO(uwsgi_file), searx_dir + '/uwsgi.ini') | 
					
						
							| 
									
										
										
										
											2015-02-08 10:42:30 +01:00
										 |  |  |     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) |