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