searxng/utils/fabfile.py

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)