mirror of
https://github.com/frappe/bench.git
synced 2025-01-24 15:38:25 +00:00
Merge branch 'develop' into staging
This commit is contained in:
commit
7d6dccbb61
@ -7,6 +7,7 @@ import click
|
|||||||
|
|
||||||
# imports - module imports
|
# imports - module imports
|
||||||
from bench.utils import exec_cmd, run_playbook, which
|
from bench.utils import exec_cmd, run_playbook, which
|
||||||
|
from bench.utils.cli import SugaredOption
|
||||||
|
|
||||||
|
|
||||||
@click.group(help="Setup command group for enabling setting up a Frappe environment")
|
@click.group(help="Setup command group for enabling setting up a Frappe environment")
|
||||||
@ -25,13 +26,23 @@ def setup_sudoers(user):
|
|||||||
|
|
||||||
|
|
||||||
@click.command("nginx", help="Generate configuration files for NGINX")
|
@click.command("nginx", help="Generate configuration files for NGINX")
|
||||||
|
@click.option(
|
||||||
|
"--logging", default="combined", type=click.Choice(["none", "site", "combined"])
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--log_format",
|
||||||
|
help="Specify the log_format for nginx. Use none or '' to not set a value.",
|
||||||
|
only_if_set=["logging"],
|
||||||
|
cls=SugaredOption,
|
||||||
|
default="main",
|
||||||
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"--yes", help="Yes to regeneration of nginx config file", default=False, is_flag=True
|
"--yes", help="Yes to regeneration of nginx config file", default=False, is_flag=True
|
||||||
)
|
)
|
||||||
def setup_nginx(yes=False):
|
def setup_nginx(yes=False, logging="combined", log_format=None):
|
||||||
from bench.config.nginx import make_nginx_conf
|
from bench.config.nginx import make_nginx_conf
|
||||||
|
|
||||||
make_nginx_conf(bench_path=".", yes=yes)
|
make_nginx_conf(bench_path=".", yes=yes, logging=logging, log_format=log_format)
|
||||||
|
|
||||||
|
|
||||||
@click.command("reload-nginx", help="Checks NGINX config file and reloads service")
|
@click.command("reload-nginx", help="Checks NGINX config file and reloads service")
|
||||||
@ -49,17 +60,25 @@ def reload_nginx():
|
|||||||
@click.option(
|
@click.option(
|
||||||
"--skip-redis", help="Skip redis configuration", is_flag=True, default=False
|
"--skip-redis", help="Skip redis configuration", is_flag=True, default=False
|
||||||
)
|
)
|
||||||
def setup_supervisor(user=None, yes=False, skip_redis=False):
|
@click.option(
|
||||||
|
"--skip-supervisord",
|
||||||
|
help="Skip supervisord configuration",
|
||||||
|
is_flag=True,
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
def setup_supervisor(user=None, yes=False, skip_redis=False, skip_supervisord=False):
|
||||||
from bench.utils import get_cmd_output
|
from bench.utils import get_cmd_output
|
||||||
from bench.config.supervisor import (
|
from bench.config.supervisor import (
|
||||||
update_supervisord_config,
|
check_supervisord_config,
|
||||||
generate_supervisor_config,
|
generate_supervisor_config,
|
||||||
)
|
)
|
||||||
|
|
||||||
which("supervisorctl", raise_err=True)
|
which("supervisorctl", raise_err=True)
|
||||||
|
|
||||||
if "Permission denied" in get_cmd_output("supervisorctl status"):
|
if not skip_supervisord and "Permission denied" in get_cmd_output(
|
||||||
update_supervisord_config(user=user, yes=yes)
|
"supervisorctl status"
|
||||||
|
):
|
||||||
|
check_supervisord_config(user=user)
|
||||||
|
|
||||||
generate_supervisor_config(bench_path=".", user=user, yes=yes, skip_redis=skip_redis)
|
generate_supervisor_config(bench_path=".", user=user, yes=yes, skip_redis=skip_redis)
|
||||||
|
|
||||||
|
@ -9,11 +9,12 @@ import click
|
|||||||
|
|
||||||
# imports - module imports
|
# imports - module imports
|
||||||
import bench
|
import bench
|
||||||
|
import bench.config
|
||||||
from bench.bench import Bench
|
from bench.bench import Bench
|
||||||
from bench.utils import get_bench_name
|
from bench.utils import get_bench_name
|
||||||
|
|
||||||
|
|
||||||
def make_nginx_conf(bench_path, yes=False):
|
def make_nginx_conf(bench_path, yes=False, logging=None, log_format=None):
|
||||||
conf_path = os.path.join(bench_path, "config", "nginx.conf")
|
conf_path = os.path.join(bench_path, "config", "nginx.conf")
|
||||||
|
|
||||||
if not yes and os.path.exists(conf_path):
|
if not yes and os.path.exists(conf_path):
|
||||||
@ -45,6 +46,12 @@ def make_nginx_conf(bench_path, yes=False):
|
|||||||
"random_string": "".join(random.choice(string.ascii_lowercase) for i in range(7)),
|
"random_string": "".join(random.choice(string.ascii_lowercase) for i in range(7)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if logging and logging != "none":
|
||||||
|
_log_format = ""
|
||||||
|
if log_format and log_format != "none":
|
||||||
|
_log_format = log_format
|
||||||
|
template_vars["logging"] = {"level": logging, "log_format": _log_format}
|
||||||
|
|
||||||
if allow_rate_limiting:
|
if allow_rate_limiting:
|
||||||
template_vars.update(
|
template_vars.update(
|
||||||
{
|
{
|
||||||
@ -280,8 +287,6 @@ def use_wildcard_certificate(bench_path, ret):
|
|||||||
|
|
||||||
|
|
||||||
def get_error_pages():
|
def get_error_pages():
|
||||||
import bench
|
|
||||||
|
|
||||||
bench_app_path = os.path.abspath(bench.__path__[0])
|
bench_app_path = os.path.abspath(bench.__path__[0])
|
||||||
templates = os.path.join(bench_app_path, "config", "templates")
|
templates = os.path.join(bench_app_path, "config", "templates")
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import bench
|
|||||||
from bench.config.nginx import make_nginx_conf
|
from bench.config.nginx import make_nginx_conf
|
||||||
from bench.config.supervisor import (
|
from bench.config.supervisor import (
|
||||||
generate_supervisor_config,
|
generate_supervisor_config,
|
||||||
update_supervisord_config,
|
check_supervisord_config,
|
||||||
)
|
)
|
||||||
from bench.config.systemd import generate_systemd_config
|
from bench.config.systemd import generate_systemd_config
|
||||||
from bench.bench import Bench
|
from bench.bench import Bench
|
||||||
@ -48,7 +48,7 @@ def setup_production(user, bench_path=".", yes=False):
|
|||||||
generate_systemd_config(bench_path=bench_path, user=user, yes=yes)
|
generate_systemd_config(bench_path=bench_path, user=user, yes=yes)
|
||||||
else:
|
else:
|
||||||
print("Setting Up supervisor...")
|
print("Setting Up supervisor...")
|
||||||
update_supervisord_config(user=user, yes=yes)
|
check_supervisord_config(user=user)
|
||||||
generate_supervisor_config(bench_path=bench_path, user=user, yes=yes)
|
generate_supervisor_config(bench_path=bench_path, user=user, yes=yes)
|
||||||
|
|
||||||
print("Setting Up NGINX...")
|
print("Setting Up NGINX...")
|
||||||
|
@ -79,10 +79,11 @@ def get_supervisord_conf():
|
|||||||
return possibility
|
return possibility
|
||||||
|
|
||||||
|
|
||||||
def update_supervisord_config(user=None, yes=False):
|
def check_supervisord_config(user=None):
|
||||||
"""From bench v5.x, we're moving to supervisor running as user"""
|
"""From bench v5.x, we're moving to supervisor running as user"""
|
||||||
|
# i don't think bench should be responsible for this but we're way past this now...
|
||||||
|
# removed updating supervisord conf & reload in Aug 2022 - gavin@frappe.io
|
||||||
import configparser
|
import configparser
|
||||||
from bench.config.production_setup import service
|
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
user = getpass.getuser()
|
user = getpass.getuser()
|
||||||
@ -125,20 +126,3 @@ def update_supervisord_config(user=None, yes=False):
|
|||||||
print(
|
print(
|
||||||
f"Update your {supervisord_conf} with the following values:\n[{section}]\n{contents}"
|
f"Update your {supervisord_conf} with the following values:\n[{section}]\n{contents}"
|
||||||
)
|
)
|
||||||
return
|
|
||||||
|
|
||||||
if not yes:
|
|
||||||
click.confirm(
|
|
||||||
f"{supervisord_conf} will be updated with the following values:\n{supervisord_conf_changes}\nDo you want to continue?",
|
|
||||||
abort=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(supervisord_conf, "w") as f:
|
|
||||||
config.write(f)
|
|
||||||
logger.log(f"Updated supervisord.conf at '{supervisord_conf}'")
|
|
||||||
except Exception as e:
|
|
||||||
logger.log(f"Updating supervisord.conf failed due to '{e}'")
|
|
||||||
|
|
||||||
# Reread supervisor configuration, reload supervisord and supervisorctl, restart services that were started
|
|
||||||
service("supervisor", "reload")
|
|
||||||
|
@ -114,10 +114,19 @@ server {
|
|||||||
|
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
|
|
||||||
# logs in var
|
{% if logging %}
|
||||||
access_log /var/log/nginx/{{ site_name }}_access.log main;
|
{%- if logging.level == "site" -%}
|
||||||
|
|
||||||
|
access_log /var/log/nginx/{{ site_name }}_access.log {{ logging.log_format }};
|
||||||
error_log /var/log/nginx/{{ site_name }}_error.log;
|
error_log /var/log/nginx/{{ site_name }}_error.log;
|
||||||
|
|
||||||
|
{%- elif logging.level == "combined" -%}
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log {{ logging.log_format }};
|
||||||
|
error_log /var/log/nginx/error.log;
|
||||||
|
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
# optimizations
|
# optimizations
|
||||||
sendfile on;
|
sendfile on;
|
||||||
|
@ -38,8 +38,7 @@ def execute(bench_path):
|
|||||||
if not os.path.exists(new_directory):
|
if not os.path.exists(new_directory):
|
||||||
os.makedirs(new_directory)
|
os.makedirs(new_directory)
|
||||||
|
|
||||||
for archived_site_path in old_directory.glob("*"):
|
old_directory.rename(new_directory)
|
||||||
archived_site_path.rename(new_directory)
|
|
||||||
|
|
||||||
click.secho(f"Archived sites are now stored under {new_directory}")
|
click.secho(f"Archived sites are now stored under {new_directory}")
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from typing import List
|
||||||
import click
|
import click
|
||||||
from click.core import _check_multicommand
|
from click.core import _check_multicommand
|
||||||
|
|
||||||
@ -34,6 +35,27 @@ class MultiCommandGroup(click.Group):
|
|||||||
self.commands[_name] = cmd
|
self.commands[_name] = cmd
|
||||||
|
|
||||||
|
|
||||||
|
class SugaredOption(click.Option):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.only_if_set: List = kwargs.pop("only_if_set")
|
||||||
|
kwargs["help"] = (
|
||||||
|
kwargs.get("help", "")
|
||||||
|
+ f". Option is acceptable only if {', '.join(self.only_if_set)} is used."
|
||||||
|
)
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def handle_parse_result(self, ctx, opts, args):
|
||||||
|
current_opt = self.name in opts
|
||||||
|
if current_opt and self.only_if_set:
|
||||||
|
for opt in self.only_if_set:
|
||||||
|
if opt not in opts:
|
||||||
|
deafaults_set = [x.default for x in ctx.command.params if x.name == opt]
|
||||||
|
if not deafaults_set:
|
||||||
|
raise click.UsageError(f"Illegal Usage: Set '{opt}' before '{self.name}'.")
|
||||||
|
|
||||||
|
return super().handle_parse_result(ctx, opts, args)
|
||||||
|
|
||||||
|
|
||||||
def use_experimental_feature(ctx, param, value):
|
def use_experimental_feature(ctx, param, value):
|
||||||
if not value:
|
if not value:
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user