def install_requirements(upgrade=False, upgrade_strategy='only-if-needed'): """ Installs pip requirements """ project_dir = get_project_dir() requirements_pip = os.path.join(project_dir, 'requirements.pip') # it is necessary to cd into project dir to support relative # paths inside requirements correctly with cd(project_dir): if files.exists(requirements_pip, use_sudo=True): print(cyan("Installing requirements.pip on {}".format(env.stage))) with _virtualenv(env.venv_path): _install_requirements( requirements_pip, upgrade=upgrade, use_sudo=True, upgrade_strategy=upgrade_strategy) requirements_txt = os.path.join(project_dir, 'requirements.txt') if files.exists(requirements_txt, use_sudo=True): print(cyan("Installing requirements.txt on {}".format(env.stage))) with _virtualenv(env.venv_path): _install_requirements( requirements_txt, upgrade=upgrade, use_sudo=True, upgrade_strategy=upgrade_strategy) extra_requirements = ctx('virtualenv.extra_requirements', default=False) if extra_requirements and isinstance(extra_requirements, list): for req in extra_requirements: print(cyan("Installing {} on {}".format(req, env.stage))) with _virtualenv(env.venv_path): if req.startswith('./'): req = os.path.join(project_dir, req[:2]) fabtools.python.install(req, use_sudo=True)
def setup_settings(): """ Takes the dploy/<STAGE>_settings.py template and upload it to remote django project location (as local_settings.py) """ print(cyan("Setuping django settings project on {}".format(env.stage))) project_dir = get_project_dir() project_name = ctx('django.project_name') stage_settings = '{stage}_settings.py'.format(stage=env.stage) templates = [ os.path.join('./dploy/', stage_settings), os.path.join('./', project_name, 'local_settings.py-dist'), os.path.join('./', project_name, 'local_settings.py-default'), os.path.join('./', project_name, 'local_settings.py-example'), os.path.join('./', project_name, 'local_settings.py.dist'), os.path.join('./', project_name, 'local_settings.py.default'), os.path.join('./', project_name, 'local_settings.py.example'), ] template = select_template(templates) if not template: print(red('ERROR: the project does not have a settings template')) print("The project must provide at least one of these file:") print("\n - {}\n".format("\n - ".join(templates))) sys.exit(1) filename = os.path.basename(template) templates_dir = os.path.dirname(template) _settings_dest = os.path.join(project_dir, project_name, 'local_settings.py') upload_template(filename, _settings_dest, template_dir=templates_dir)
def setup(): """ System setup """ project_dir = get_project_dir() # we install system dependencies only when we are sure the project hasn't # been deployed yet if not files.exists(project_dir, use_sudo=True): execute(install_dependencies) execute(create_dirs)
def setup(): """ Configure uWSGI """ print(cyan('Configuring uwsgi {}'.format(env.stage))) project_dir = get_project_dir() wsgi_file = os.path.join(project_dir, ctx('django.project_name'), 'wsgi.py') uwsgi_ini = os.path.join(project_dir, 'uwsgi.ini') context = {'ctx': ctx, 'project_dir': project_dir, 'wsgi_file': wsgi_file} log_file = '{}/uwsgi.log'.format(ctx('logs.dirs.root')) sudo('touch {logfile}'.format(logfile=log_file)) sudo('chown {user}:{group} {logfile}'.format(logfile=log_file, user=ctx('system.user'), group=ctx('system.group'))) upload_template('uwsgi.template', uwsgi_ini, context=context)
def setup(): """ Configure supervisor to monitor the uwsgi process """ print(cyan('Configuring supervisor {}'.format(env.stage))) if not fabtools.deb.is_installed('supervisor'): fabtools.deb.install('supervisor') project_dir = get_project_dir() uwsgi_ini = os.path.join(project_dir, 'uwsgi.ini') name = ctx('supervisor.program_name') context = {'uwsgi_ini': uwsgi_ini} dest = os.path.join( ctx('supervisor.dirs.root'), '{}.conf'.format(ctx('nginx.server_name').replace('.', '_'))) upload_template('supervisor.template', dest, context=context) fabtools.supervisor.update_config() if fabtools.supervisor.process_status(name) == 'RUNNING': fabtools.supervisor.restart_process(name) elif fabtools.supervisor.process_status(name) == 'STOPPED': fabtools.supervisor.start_process(name)
def venv(i): venv_path = os.path.join(ctx('virtualenv.dirs.root'), ctx('virtualenv.name')) with cd(get_project_dir()): return sudo('{}/bin/{}'.format(venv_path, i))