2
0
mirror of https://github.com/frappe/bench.git synced 2025-02-04 03:48:24 +00:00
bench/bench/config/production_setup.py
2016-07-28 17:55:08 +05:30

136 lines
4.3 KiB
Python
Executable File

from bench.utils import get_program, exec_cmd, get_cmd_output, fix_prod_setup_perms, get_bench_name, find_executable, CommandFailedError
from bench.config.supervisor import generate_supervisor_config
from bench.config.nginx import make_nginx_conf
import os, subprocess
def setup_production(user, bench_path='.'):
generate_supervisor_config(bench_path=bench_path, user=user)
make_nginx_conf(bench_path=bench_path)
fix_prod_setup_perms(bench_path, frappe_user=user)
remove_default_nginx_configs()
bench_name = get_bench_name(bench_path)
nginx_conf = '/etc/nginx/conf.d/{bench_name}.conf'.format(bench_name=bench_name)
supervisor_conf_extn = "ini" if is_centos7() else "conf"
supervisor_conf = os.path.join(get_supervisor_confdir(), '{bench_name}.{extn}'.format(
bench_name=bench_name, extn=supervisor_conf_extn))
# Check if symlink exists, If not then create it.
if not os.path.islink(supervisor_conf):
os.symlink(os.path.abspath(os.path.join(bench_path, 'config', 'supervisor.conf')), supervisor_conf)
if not os.path.islink(nginx_conf):
os.symlink(os.path.abspath(os.path.join(bench_path, 'config', 'nginx.conf')), nginx_conf)
reload_supervisor()
if os.environ.get('NO_SERVICE_RESTART'):
return
reload_nginx()
def disable_production(bench_path='.'):
bench_name = get_bench_name(bench_path)
# supervisorctl
supervisor_conf_extn = "ini" if is_centos7() else "conf"
supervisor_conf = os.path.join(get_supervisor_confdir(), '{bench_name}.{extn}'.format(
bench_name=bench_name, extn=supervisor_conf_extn))
if os.path.islink(supervisor_conf):
os.unlink(supervisor_conf)
exec_cmd('sudo supervisorctl reread')
exec_cmd('sudo supervisorctl update')
# nginx
nginx_conf = '/etc/nginx/conf.d/{bench_name}.conf'.format(bench_name=bench_name)
if os.path.islink(nginx_conf):
os.unlink(nginx_conf)
reload_nginx()
def service(service, option):
if os.path.basename(get_program(['systemctl']) or '') == 'systemctl' and is_running_systemd():
exec_cmd("sudo {service_manager} {option} {service}".format(service_manager='systemctl', option=option, service=service))
elif os.path.basename(get_program(['service']) or '') == 'service':
exec_cmd("sudo {service_manager} {service} {option} ".format(service_manager='service', service=service, option=option))
else:
# look for 'service_manager' and 'service_manager_command' in environment
service_manager = os.environ.get("BENCH_SERVICE_MANAGER")
if service_manager:
service_manager_command = (os.environ.get("BENCH_SERVICE_MANAGER_COMMAND")
or "{service_manager} {option} {service}").format(service_manager=service_manager, service=service, option=option)
exec_cmd(service_manager_command)
else:
raise Exception, 'No service manager found'
def get_supervisor_confdir():
possiblities = ('/etc/supervisor/conf.d', '/etc/supervisor.d/', '/etc/supervisord/conf.d', '/etc/supervisord.d')
for possiblity in possiblities:
if os.path.exists(possiblity):
return possiblity
def remove_default_nginx_configs():
default_nginx_configs = ['/etc/nginx/conf.d/default.conf', '/etc/nginx/sites-enabled/default']
for conf_file in default_nginx_configs:
if os.path.exists(conf_file):
os.unlink(conf_file)
def is_centos7():
return os.path.exists('/etc/redhat-release') and get_cmd_output("cat /etc/redhat-release | sed 's/Linux\ //g' | cut -d' ' -f3 | cut -d. -f1").strip() == '7'
def is_running_systemd():
with open('/proc/1/comm') as f:
comm = f.read().strip()
if comm == "init":
return False
elif comm == "systemd":
return True
return False
def reload_supervisor():
supervisorctl = find_executable('supervisorctl')
try:
# first try reread/update
exec_cmd('sudo {0} reread'.format(supervisorctl))
exec_cmd('sudo {0} update'.format(supervisorctl))
return
except CommandFailedError:
pass
try:
# something is wrong, so try reloading
exec_cmd('sudo {0} reload'.format(supervisorctl))
return
except CommandFailedError:
pass
try:
# then try restart for centos
service('supervisord', 'restart')
return
except CommandFailedError:
pass
try:
# else try restart for ubuntu / debian
service('supervisor', 'restart')
return
except CommandFailedError:
pass
def reload_nginx():
try:
subprocess.check_output(['sudo', find_executable('nginx'), '-t'])
except:
raise
service('nginx', 'reload')