mirror of
https://github.com/frappe/bench.git
synced 2025-01-08 00:04:38 +00:00
fix: easy-install for letsencrypt tls (#1424)
* fix: easy-install for letsencrypt tls * ci: change site for easy-install test * ci: set host header for easy-install ping test
This commit is contained in:
parent
c690e8e7f5
commit
eba0f7a54f
4
.github/workflows/easy-install.yml
vendored
4
.github/workflows/easy-install.yml
vendored
@ -25,8 +25,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python3 ${GITHUB_WORKSPACE}/easy-install.py -p -n actions_test --email test@frappe.io
|
python3 ${GITHUB_WORKSPACE}/easy-install.py -p -n actions_test --email test@frappe.io
|
||||||
docker compose -p actions_test exec backend bench version --format json
|
docker compose -p actions_test exec backend bench version --format json
|
||||||
docker compose -p actions_test exec backend bench --site site1.local list-apps --format json
|
docker compose -p actions_test exec backend bench --site site1.localhost list-apps --format json
|
||||||
result=$(curl -sk https://127.0.0.1/api/method/ping | jq -r ."message")
|
result=$(curl -H "Host: site1.localhost" -sk https://127.0.0.1/api/method/ping | jq -r ."message")
|
||||||
if [[ "$result" == "pong" ]]; then echo "New instance works fine"; else exit 1; fi
|
if [[ "$result" == "pong" ]]; then echo "New instance works fine"; else exit 1; fi
|
||||||
docker compose -p actions_test down
|
docker compose -p actions_test down
|
||||||
docker volume prune -f
|
docker volume prune -f
|
||||||
|
@ -73,13 +73,13 @@ def get_from_env(dir, file) -> Dict:
|
|||||||
|
|
||||||
def write_to_env(
|
def write_to_env(
|
||||||
wd: str,
|
wd: str,
|
||||||
site: str,
|
sites: list[str],
|
||||||
db_pass: str,
|
db_pass: str,
|
||||||
admin_pass: str,
|
admin_pass: str,
|
||||||
email: str,
|
email: str,
|
||||||
erpnext_version: str = None,
|
erpnext_version: str = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
site_name = site or ""
|
quoted_sites = ",".join([f"`{site}`" for site in sites]).strip(",")
|
||||||
example_env = get_from_env(wd, "example.env")
|
example_env = get_from_env(wd, "example.env")
|
||||||
erpnext_version = erpnext_version or example_env["ERPNEXT_VERSION"]
|
erpnext_version = erpnext_version or example_env["ERPNEXT_VERSION"]
|
||||||
with open(os.path.join(wd, ".env"), "w") as f:
|
with open(os.path.join(wd, ".env"), "w") as f:
|
||||||
@ -93,8 +93,8 @@ def write_to_env(
|
|||||||
"REDIS_QUEUE=redis-queue:6379\n",
|
"REDIS_QUEUE=redis-queue:6379\n",
|
||||||
"REDIS_SOCKETIO=redis-socketio:6379\n",
|
"REDIS_SOCKETIO=redis-socketio:6379\n",
|
||||||
f"LETSENCRYPT_EMAIL={email}\n",
|
f"LETSENCRYPT_EMAIL={email}\n",
|
||||||
f"FRAPPE_SITE_NAME_HEADER={site_name}\n",
|
f"SITE_ADMIN_PASS={admin_pass}\n",
|
||||||
f"SITE_ADMIN_PASS={admin_pass}",
|
f"SITES={quoted_sites}\n",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ def check_repo_exists() -> bool:
|
|||||||
return os.path.exists(os.path.join(os.getcwd(), "frappe_docker"))
|
return os.path.exists(os.path.join(os.getcwd(), "frappe_docker"))
|
||||||
|
|
||||||
|
|
||||||
def setup_prod(project: str, sitename: str, email: str, version: str = None) -> None:
|
def setup_prod(project: str, sites: list[str], email: str, version: str = None) -> None:
|
||||||
if check_repo_exists():
|
if check_repo_exists():
|
||||||
compose_file_name = os.path.join(os.path.expanduser("~"), f"{project}-compose.yml")
|
compose_file_name = os.path.join(os.path.expanduser("~"), f"{project}-compose.yml")
|
||||||
docker_repo_path = os.path.join(os.getcwd(), "frappe_docker")
|
docker_repo_path = os.path.join(os.getcwd(), "frappe_docker")
|
||||||
@ -129,7 +129,7 @@ def setup_prod(project: str, sitename: str, email: str, version: str = None) ->
|
|||||||
if not os.path.exists(os.path.join(docker_repo_path, ".env")):
|
if not os.path.exists(os.path.join(docker_repo_path, ".env")):
|
||||||
admin_pass = generate_pass()
|
admin_pass = generate_pass()
|
||||||
db_pass = generate_pass(9)
|
db_pass = generate_pass(9)
|
||||||
write_to_env(docker_repo_path, sitename, db_pass, admin_pass, email, version)
|
write_to_env(docker_repo_path, sites, db_pass, admin_pass, email, version)
|
||||||
cprint(
|
cprint(
|
||||||
"\nA .env file is generated with basic configs. Please edit it to fit to your needs \n",
|
"\nA .env file is generated with basic configs. Please edit it to fit to your needs \n",
|
||||||
level=3,
|
level=3,
|
||||||
@ -193,40 +193,13 @@ def setup_prod(project: str, sitename: str, email: str, version: str = None) ->
|
|||||||
cprint(" Docker Compose failed, please check the container logs\n", e)
|
cprint(" Docker Compose failed, please check the container logs\n", e)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
cprint(f"\nCreating site: {sitename} \n", level=3)
|
for sitename in sites:
|
||||||
|
create_site(sitename, project, db_pass, admin_pass)
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.run(
|
|
||||||
[
|
|
||||||
which("docker"),
|
|
||||||
"compose",
|
|
||||||
"-p",
|
|
||||||
project,
|
|
||||||
"exec",
|
|
||||||
"backend",
|
|
||||||
"bench",
|
|
||||||
"new-site",
|
|
||||||
sitename,
|
|
||||||
"--no-mariadb-socket",
|
|
||||||
"--db-root-password",
|
|
||||||
db_pass,
|
|
||||||
"--admin-password",
|
|
||||||
admin_pass,
|
|
||||||
"--install-app",
|
|
||||||
"erpnext",
|
|
||||||
"--set-default",
|
|
||||||
],
|
|
||||||
check=True,
|
|
||||||
)
|
|
||||||
logging.info("New site creation completed")
|
|
||||||
except Exception as e:
|
|
||||||
logging.error("Bench site creation failed", exc_info=True)
|
|
||||||
cprint("Bench Site creation failed\n", e)
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
else:
|
||||||
install_docker()
|
install_docker()
|
||||||
clone_frappe_docker_repo()
|
clone_frappe_docker_repo()
|
||||||
setup_prod(project, sitename, email, version) # Recursive
|
setup_prod(project, sites, email, version) # Recursive
|
||||||
|
|
||||||
|
|
||||||
def setup_dev_instance(project: str):
|
def setup_dev_instance(project: str):
|
||||||
@ -294,6 +267,43 @@ def install_docker():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def create_site(
|
||||||
|
sitename: str,
|
||||||
|
project: str,
|
||||||
|
db_pass: str,
|
||||||
|
admin_pass: str,
|
||||||
|
):
|
||||||
|
cprint(f"\nCreating site: {sitename} \n", level=3)
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.run(
|
||||||
|
[
|
||||||
|
which("docker"),
|
||||||
|
"compose",
|
||||||
|
"-p",
|
||||||
|
project,
|
||||||
|
"exec",
|
||||||
|
"backend",
|
||||||
|
"bench",
|
||||||
|
"new-site",
|
||||||
|
sitename,
|
||||||
|
"--no-mariadb-socket",
|
||||||
|
"--db-root-password",
|
||||||
|
db_pass,
|
||||||
|
"--admin-password",
|
||||||
|
admin_pass,
|
||||||
|
"--install-app",
|
||||||
|
"erpnext",
|
||||||
|
"--set-default",
|
||||||
|
],
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
logging.info("New site creation completed")
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Bench site creation failed for {sitename}", exc_info=True)
|
||||||
|
cprint(f"Bench Site creation failed for {sitename}\n", e)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description="Install Frappe with Docker")
|
parser = argparse.ArgumentParser(description="Install Frappe with Docker")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@ -305,8 +315,10 @@ if __name__ == "__main__":
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-s",
|
"-s",
|
||||||
"--sitename",
|
"--sitename",
|
||||||
help="The Site Name for your production site",
|
help="Site Name(s) for your production bench",
|
||||||
default="site1.local",
|
default=["site1.localhost"],
|
||||||
|
action='append',
|
||||||
|
dest='sites'
|
||||||
)
|
)
|
||||||
parser.add_argument("-n", "--project", help="Project Name", default="frappe")
|
parser.add_argument("-n", "--project", help="Project Name", default="frappe")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@ -326,6 +338,6 @@ if __name__ == "__main__":
|
|||||||
if "example.com" in args.email:
|
if "example.com" in args.email:
|
||||||
cprint("Emails with example.com not acceptable", level=1)
|
cprint("Emails with example.com not acceptable", level=1)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
setup_prod(args.project, args.sitename, args.email, args.version)
|
setup_prod(args.project, args.sites, args.email, args.version)
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
Loading…
Reference in New Issue
Block a user