示例#1
0
文件: api.py 项目: Hoedic/fab_taxi
def deploy_api(commit='master'):
    now = int(time.time())
    require.files.directory(env.deployment_dir(now))
    with cd(env.deployment_dir(now)):
        run(u'wget {}'.format(env.apitaxi_archive.format(commit)))
        run('unzip {}.zip'.format(commit))
        if commit != 'master':
            run('mv APITaxi-{} APITaxi-master'.format(commit))

    with cd(env.apitaxi_dir(now)):
        require.python.virtualenv(env.apitaxi_venv_path(now))
        with python.virtualenv(env.apitaxi_venv_path(now)):
            python.install_pip(use_sudo=False)
            require.python.package('uwsgi')
            python.install_requirements('requirements.txt')
            put(environ['APITAXI_CONFIG_FILE'], env.apitaxi_config_path(now))
            with shell_env(APITAXI_CONFIG_FILE=env.apitaxi_config_path(now)):
                for i in range(1, 30):
                    if service.is_running('supervisor'):
                        break
                    time.sleep(1)
                run('python manage.py db upgrade')
                install_admin_user()
        deploy_front(now)
        deploy_nginx_api_site(now)
    if not service.is_running('nginx'):
        service.start('nginx')
    clean_directories(now)
    stop_old_processes(now)
    restart_stats_workers(now)
示例#2
0
文件: env.py 项目: odtvince/fab_taxi
def make_default_values():
    if not hasattr(env, 'apitaxi_dir'):
        env.apitaxi_dir = lambda now: env.deployment_dir(now) + '/APITaxi-master'
    if not hasattr(env, 'uwsgi_config_path'):
        env.uwsgi_config_path = lambda now: env.apitaxi_dir(now) + '/uwsgi.ini'
    if not hasattr(env, 'uwsgi_file'):
        env.uwsgi_file = lambda now: env.apitaxi_dir(now) + '/api_taxi.uwsgi'
    if not hasattr(env, 'apitaxi_venv_path'):
        env.apitaxi_venv_path = lambda now: env.deployment_dir(now) + '/venvAPITaxi'
    if not hasattr(env, 'apitaxi_config_path'):
        env.apitaxi_config_path = lambda now: env.apitaxi_dir(now) + '/APITaxi/prod_settings.py'
示例#3
0
文件: api.py 项目: Hoedic/fab_taxi
def deploy_front(now):
    with cd(env.deployment_dir(now)):
        run(u'wget {} -O front.zip'.format(env.fronttaxi_archive))
        run('unzip front.zip')
    with cd(env.fronttaxi_dir(now)), python.virtualenv(env.apitaxi_venv_path(now)):
        python.install_requirements('requirements.txt')
        put(environ['APITAXI_CONFIG_FILE'], env.fronttaxi_config_path(now))
示例#4
0
文件: api.py 项目: odtvince/fab_taxi
def deploy_api():
    now = int(time.time())
    require.files.directory(env.deployment_dir(now))
    with cd(env.deployment_dir(now)):
        run('wget https://github.com/openmaraude/APITaxi/archive/master.zip')
        run('unzip master.zip')

    with cd(env.apitaxi_dir(now)):
        require.python.virtualenv(env.apitaxi_venv_path(now))
        with python.virtualenv(env.apitaxi_venv_path(now)):
            python.install_pip()
            require.python.package('uwsgi')
            python.install_requirements('requirements.txt')
            put(environ['APITAXI_CONFIG_FILE'], env.apitaxi_config_path(now))
            run('python manage.py db upgrade')
        deploy_nginx_api_site(now)
    if not service.is_running('nginx'):
        service.start('nginx')
    clean_directories(now)
    stop_old_processes(now)
示例#5
0
def make_default_values():
    if not hasattr(env, 'apitaxi_dir'):
        env.apitaxi_dir = lambda now: env.deployment_dir(now) + '/APITaxi-master'
    if not hasattr(env, 'fronttaxi_dir'):
        env.fronttaxi_dir = lambda now: env.deployment_dir(now) + '/APITaxi_front-master'
    if not hasattr(env, 'uwsgi_api_config_path'):
        env.uwsgi_api_config_path = lambda now: env.apitaxi_dir(now) + '/uwsgi_api.ini'
    if not hasattr(env, 'uwsgi_front_config_path'):
        env.uwsgi_front_config_path = lambda now: env.fronttaxi_dir(now) + '/uwsgi_front.ini'
    if not hasattr(env, 'uwsgi_api_file'):
        env.uwsgi_api_file = lambda now: env.apitaxi_dir(now) + '/api_taxi.uwsgi'
    if not hasattr(env, 'uwsgi_front_file'):
        env.uwsgi_front_file = lambda now: env.fronttaxi_dir(now) + '/front_taxi.uwsgi'
    if not hasattr(env, 'apitaxi_venv_path'):
        env.apitaxi_venv_path = lambda now: env.deployment_dir(now) + '/venvAPITaxi'
    if not hasattr(env, 'apitaxi_config_path'):
        env.apitaxi_config_path = lambda now: env.apitaxi_dir(now) + '/APITaxi/prod_settings.py'
    if not hasattr(env, 'fronttaxi_config_path'):
        env.fronttaxi_config_path = lambda now: env.fronttaxi_dir(now) + '/APITaxi_front/prod_settings.py'
    if not hasattr(env, 'geotaxi_authentication'):
        env.geotaxi_authentication = False
示例#6
0
文件: api.py 项目: Hoedic/fab_taxi
def clean_directories(now):
    l = run('for i in {}/deployment_*; do echo $i; done'.format(env.deploy_dir)).split("\n")
    for d in [d.replace('\r', '') for d in l]:
        if not files.is_dir(d):
            continue
        if d == env.deployment_dir(now):
            continue
        files.remove(d, recursive=True)

    l = run('for i in {}/apitaxi_*; do echo $i; done'.format(env.uwsgi_socket_dir)).split("\n")
    for f in [f.replace('\r', '') for f in l]:
        if f == env.uwsgi_socket_api(now):
            continue
        files.remove(f, use_sudo=True)
示例#7
0
文件: api.py 项目: odtvince/fab_taxi
def clean_directories(now):
    l = run('for i in {}/deployment_*; do echo $i; done'.format(env.uwsgi_dir)).split("\n")
    for d in l:
        if not files.is_dir(d):
            continue
        if d == env.deployment_dir(now):
            continue
        files.remove(d, recursive=True)

    l = run('for i in {}/apitaxi_*; do echo $i; done'.format(env.uwsgi_socket_dir)).split("\n")
    for f in l:
        if not files.is_file(f):
            continue
        if f == env.uwsgi_socket(now):
            continue
        files.remove(f)
示例#8
0
文件: api.py 项目: Hoedic/fab_taxi
def deploy_nginx_api_site(now):
    files.upload_template('templates/uwsgi.ini',  env.uwsgi_api_config_path(now),
        context={
           'config_path': env.apitaxi_config_path(now),
           'api_path': env.apitaxi_dir(now),
           'venv_path': env.apitaxi_venv_path(now),
           'uwsgi_file': env.uwsgi_api_file(now),
           'uwsgi_pid_file': env.uwsgi_api_pid_file(now),
           'uwsgi_log_file1': env.uwsgi_logdir + '/api_launcher.log',
           'uwsgi_log_file2': env.uwsgi_logdir + '/api_uwsgi.log',
           'uwsgi_launcher_logdir': env.uwsgi_launcher_logdir,
           'socket': env.uwsgi_socket_api(now),
           'processes': env.wsgi_processes,
           'threads': env.wsgi_threads,
           'now': now
       }
    )

    files.upload_template('templates/uwsgi.ini',  env.uwsgi_front_config_path(now),
        context={
           'config_path': env.fronttaxi_config_path(now),
           'api_path': env.fronttaxi_dir(now),
           'venv_path': env.apitaxi_venv_path(now),
           'uwsgi_file': env.uwsgi_front_file(now),
           'uwsgi_pid_file': env.uwsgi_front_pid_file(now),
           'uwsgi_log_file1': env.uwsgi_logdir + '/front_launcher.log',
           'uwsgi_log_file2': env.uwsgi_logdir + '/front_uwsgi.log',
           'socket': env.uwsgi_socket_front(now),
           'processes': env.wsgi_processes,
           'threads': env.wsgi_threads,
           'now': now
       }
    )

    uwsgi = path.join(env.apitaxi_venv_path(now), 'bin', 'uwsgi')
    require.supervisor.process('uwsgi_api_{}'.format(now),
        command='{} --ini {}'.format(uwsgi, env.uwsgi_api_config_path(now)),
        directory=env.apitaxi_venv_path(now),
        stdout_logfile = '/var/log/nginx/apitaxi.log',
        user='******'
    )

    require.supervisor.process('uwsgi_front_{}'.format(now),
        command='{} --ini {}'.format(uwsgi, env.uwsgi_front_config_path(now)),
        directory=env.apitaxi_venv_path(now),
        stdout_logfile = '/var/log/nginx/fronttaxi.log',
        user='******'
    )

    test_uwsgi_is_started(now)

    celery = path.join(env.apitaxi_venv_path(now), 'bin', 'celery')
    worker_name = 'send_hail_{}'.format(now)
    command = '{} worker --app=celery_worker.celery -Q {} -n {} --workdir={}'
    require.supervisor.process(worker_name,
        command=command.format(celery, worker_name, worker_name, env.apitaxi_dir(now)),
        directory=env.apitaxi_dir(now),
        stdout_logfile='/var/log/celery/send_hail.log',
        user='******',
        environment='APITAXI_CONFIG_FILE=prod_settings.py'
    )

    swagger_dir = install_swagger_ui()
    zupc_dir = install_zupc_cache()

    require.nginx.site('apitaxi',
        template_source='templates/nginx_site.conf',
        domain_name=getattr(env.conf_api, 'HOST', 'localhost'),
        env='NOW={}'.format(now),
        port=getattr(env.conf_api, 'PORT', 80),
        socket_api=env.uwsgi_socket_api(now),
        socket_front=env.uwsgi_socket_front(now),
        doc_dir=swagger_dir,
        zupc_cache_dir=zupc_dir
    )

    path_redis = '{}/redis.sh'.format(env.deployment_dir(now))
    require.files.template_file(path=path_redis,
                               template_source='templates/redis.sh',
                               context={'deployment_dir':env.deployment_dir(now)},
                               mode='770')
    require.supervisor.process('redis',
            command=path_redis,
            stdout_logfile='/var/log/redis/error.log'
    )