copied from internal repo

This commit is contained in:
Dragroth
2026-01-22 12:37:26 +01:00
parent a475364582
commit 7451b63f62
118 changed files with 17182 additions and 0 deletions

View File

@@ -0,0 +1,280 @@
import hashlib
import os
import random
import shutil
from jinja2 import Template
from conpeek_setup import util
def generate_upstream_name():
# Define a helper function to generate a 7-character MD5 hash from a random number
def generate_part():
random_number = str(random.randint(0, 32767)) # Equivalent to $RANDOM in bash
md5_hash = hashlib.md5(random_number.encode()).hexdigest()
return md5_hash[:7]
# Generate the upstream name by concatenating four parts with hyphens
upstream_name = f"{generate_part()}-{generate_part()}-{generate_part()}-{generate_part()}"
return upstream_name
def generate_custom_settings(template_file_path, config_location, app_installation_domain):
util.print_black_light(f"Preparing custom settings")
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"app_installation_domain": app_installation_domain[1:].replace(".", "\.")
}
output_text = template.render(data)
output_file = os.path.join(config_location, "custom_settings.conf")
with open(output_file, "w") as file:
file.write(output_text)
def generate_default_config(template_file_path, config_location, access_ip, cert_name):
util.print_black_light(f"Preparing default.conf")
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"nginx_ip": access_ip,
"network_domain": cert_name,
}
output_text = template.render(data)
output_file = os.path.join(config_location, "default.conf")
with open(output_file, "w") as file:
file.write(output_text)
def generate_config(template_file_path, config_location, listening_port, internal_ip, access_ip, external_ip, server_name, cert_name, app_installation_domain):
util.print_black_light(f"Preparing {server_name}{app_installation_domain}")
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"upstream_name": generate_upstream_name(),
"service_port": listening_port, # Example list of ports
"ip_v4": internal_ip,
"nginx_ip": access_ip,
"server_name": server_name + app_installation_domain,
"network_domain": cert_name,
"app_installation_domain": app_installation_domain[1:]
}
output_text = template.render(data)
output_file = os.path.join(config_location, server_name + app_installation_domain + ".conf")
with open(output_file, "w") as file:
file.write(output_text)
def generate_frontend_config(template_file_path, ready_config_location, internal_ip, server_name, app_name, app_installation_domain, service_port='brak_portu'):
util.print_black_light(f"Preparing {server_name}{app_installation_domain}")
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"internal_ip": internal_ip,
"server_name": server_name + app_installation_domain,
"app_name": app_name,
"service_port": service_port,
"app_installation_domain": app_installation_domain[1:]
}
output_text = template.render(data)
output_file = os.path.join(ready_config_location, server_name + app_installation_domain + ".conf")
with open(output_file, "w") as file:
file.write(output_text)
def run(config, developer_mode=False):
util.print_black_light("Preparing nginx file")
output_directory = os.path.join(util.get_output_path(), "etc/nginx")
template_nginx_directory = os.path.join(util.get_templates_path(), "nginx")
shutil.rmtree(output_directory, ignore_errors=True)
os.makedirs(output_directory, exist_ok=True)
internal_ip = config["new_machine_network"]["internal_ip"]
external_ip = config["new_machine_network"]["internal_ip"] # listen IP same as redirectIP, due to NAT in universal inteface in ŁDZ cloud
access_ip = config["new_machine_network"]["internal_ip"]
if config.has_option('new_machine_network', 'access_ip'):
access_ip = config["new_machine_network"]["access_ip"]
app_installation_domain = "." + config["new_machine_network"]["app_installation_domain"] # code fault, it must be this dot here, for fix in the future
cert_name = "conpeek_ssl"
tenant_data = util.get_minimal_configuration()
reverse_proxy_directory = os.path.join(util.get_output_path(), "etc/nginx/reverse_proxy")
shutil.rmtree(reverse_proxy_directory, ignore_errors=True)
os.makedirs(reverse_proxy_directory, exist_ok=True)
frontend_directory = os.path.join(util.get_output_path(), "etc/nginx/frontend")
shutil.rmtree(frontend_directory, ignore_errors=True)
os.makedirs(frontend_directory, exist_ok=True)
reverse_proxy_replacements = {
# api tenant login
f"{tenant_data['tenant_login_api_server_name']}": tenant_data['tenant_login_api_server_port'],
# api tenant
f"api-{tenant_data['api_tenant_name']}": tenant_data['api_tenant_port'],
# api operator
f"api-{tenant_data['operator_api_server_response_name']}": tenant_data['operator_api_server_response_port'],
# session_server
f"{tenant_data['session_server_name']}": tenant_data['private_api_port'],
f"public-api-{tenant_data['session_server_name']}": tenant_data['public_api_port'],
f"api-monitoring-{tenant_data['session_server_name']}": tenant_data['monitoring_initial_api_port'],
# cdr_server
f"api-{tenant_data['cdr_server_name']}": tenant_data['cdr_server_api_port'],
# report server
f"api-{tenant_data['report_server_name']}": tenant_data['report_server_api_port'],
# local contact db server
f"api-{tenant_data['local_contact_db_name']}": tenant_data['local_contact_db_api_port'],
f"public-api-{tenant_data['local_contact_db_name']}": tenant_data['local_contact_db_public_api_port'],
# hubspot server
f"api-{tenant_data['hubspot_server_name']}": tenant_data['hubspot_server_api_port'],
f"public-api-{tenant_data['hubspot_server_name']}": tenant_data['hubspot_server_public_api_port'],
# ticketing server
f"api-{tenant_data['ticketing_server_name']}": tenant_data['ticketing_server_api_port'],
# gus server
f"api-{tenant_data['gus_server_name']}": tenant_data['gus_server_public_api_port'],
# meets
f"{tenant_data['meets_server_name']}": tenant_data['meets_server_port'],
# bss api server
f"api-{tenant_data['tenant_bss_api_server_name']}": tenant_data['tenant_bss_api_server_initial_application_port'],
# sms server
f"api-{tenant_data['sms_server_name']}": tenant_data['sms_server_api_port'],
f"public-api-{tenant_data['sms_server_name']}": tenant_data['sms_server_public_api_port'],
# mailbox server
f"api-{tenant_data['mailbox_server_name']}": tenant_data['mailbox_server_api_port'],
f"public-api-{tenant_data['mailbox_server_name']}": tenant_data['mailbox_server_public_api_port'],
# facebook server
f"api-{tenant_data['facebook_server_name']}": tenant_data['facebook_server_api_port'],
f"public-api-{tenant_data['facebook_server_name']}": tenant_data['facebook_server_public_api_port'],
# messagebird server
f"api-{tenant_data['messagebird_server_name']}": tenant_data['messagebird_server_api_port'],
# tenant_web_polling_server
f"{tenant_data['api_tenant_web_polling_name']}": tenant_data['api_tenant_web_polling_port'],
# bot server
f"api-{tenant_data['bot_server_name']}": tenant_data['bot_server_api_port'],
# verto
f"api-{tenant_data['freeswitch_name']}": 6900,
f"verto-routing-{tenant_data['freeswitch_name']}": 9800,
f"verto-stun-{tenant_data['freeswitch_name']}": 9801,
f"verto-no-stun-{tenant_data['freeswitch_name']}": 9802,
f"verto-ext-stun-{tenant_data['freeswitch_name']}": 9803,
f"verto-ext-no-stun-{tenant_data['freeswitch_name']}": 9804,
# metrics
"invitation": 3900,
"conpeek-exporter": 9850,
"statsd-exporter": 9851,
"statsd-api-exporter": 9852,
"ping-exporter": 9853,
"node-exporter": 9854,
"freeswitch-exporter": 9855,
"process-exporter": 9856,
"docker-exporter": 9857,
# frontend
"app": 81,
"wallboard": 81,
"device": 81,
"operator": 81,
"docs": 81,
"desk": 81
}
if developer_mode:
reverse_proxy_replacements["app-prod"] = 81
for name in reverse_proxy_replacements.keys():
generate_config(os.path.join(template_nginx_directory, "nginx-proxy.tmpl"), reverse_proxy_directory, reverse_proxy_replacements[name], internal_ip, access_ip, external_ip, name, cert_name, app_installation_domain)
generate_custom_settings(os.path.join(template_nginx_directory, "custom_settings.tmpl"), reverse_proxy_directory, app_installation_domain)
generate_custom_settings(os.path.join(template_nginx_directory, "custom_settings.tmpl"), frontend_directory, app_installation_domain)
generate_default_config(os.path.join(template_nginx_directory, "default.tmpl"), reverse_proxy_directory, access_ip, cert_name)
reverse_proxy_wss_replacements = {
f"wss-{tenant_data['session_server_name']}": tenant_data['wss_port'],
f"wss-monitoring-{tenant_data['session_server_name']}": tenant_data['monitoring_initial_wss_port'],
f"wss-monitoring-{tenant_data['messaging_server_name']}": tenant_data['messaging_server_wss_port'],
f"wss-{tenant_data['user_notification_server_name']}": tenant_data['user_notification_server_wss_port'],
f"wss-{tenant_data['messaging_server_name']}": tenant_data['messaging_server_wss_port'],
}
for name in reverse_proxy_wss_replacements.keys():
generate_config(os.path.join(template_nginx_directory, "nginx-web-socket.tmpl"), reverse_proxy_directory, reverse_proxy_wss_replacements[name], internal_ip, access_ip, external_ip, name, cert_name, app_installation_domain)
frontend_replacements = {
"app": "app_tenant",
"wallboard": "app_wallboard",
"device": "app_device",
"operator": "app_operator"
}
if developer_mode:
generate_frontend_config(os.path.join(template_nginx_directory, "docker_frontend_production_template.tmpl"), frontend_directory, internal_ip, "app-prod", "app_tenant", app_installation_domain)
for name in frontend_replacements.keys():
generate_frontend_config(os.path.join(template_nginx_directory, "docker_frontend_template.tmpl"), frontend_directory, internal_ip, name, frontend_replacements[name], app_installation_domain)
# server specific
# docs
generate_frontend_config(os.path.join(template_nginx_directory, "docker_docs_template.tmpl"), frontend_directory, internal_ip, "docs", "docs", app_installation_domain)
# desk
generate_frontend_config(os.path.join(template_nginx_directory, "docker_desk_template.tmpl"), frontend_directory, internal_ip, "desk", "app_desk", app_installation_domain)
# api tenant plugin frontend
generate_frontend_config(os.path.join(template_nginx_directory, "tenant_plugin_frontend_template.tmpl"), frontend_directory, internal_ip, tenant_data['tenant_plugin_api_server_name'], None, app_installation_domain, tenant_data['tenant_plugin_api_server_initial_application_port'])
# api tenant plugin reverse proxy
generate_config(os.path.join(template_nginx_directory, "tenant_plugin_reverse_proxy_template.tmpl"), reverse_proxy_directory, tenant_data['tenant_plugin_api_server_initial_application_port'], internal_ip, access_ip, external_ip, tenant_data['tenant_plugin_api_server_name'], cert_name, app_installation_domain)
# file server
generate_config(os.path.join(template_nginx_directory, "nginx-file-server.tmpl"), reverse_proxy_directory, tenant_data['file_server_api_port'], internal_ip, access_ip, external_ip, f"api-{tenant_data['file_server_name']}", cert_name, app_installation_domain)
# messaging server
generate_config(os.path.join(template_nginx_directory, "nginx-messaging-server.tmpl"), reverse_proxy_directory, tenant_data['messaging_server_public_api_port'], internal_ip, access_ip, external_ip, f"api-{tenant_data['messaging_server_name']}", cert_name, app_installation_domain)
# api tenant plugin frontend
generate_frontend_config(os.path.join(template_nginx_directory, "tenant_web_polling_frontend_template.tmpl"), frontend_directory, internal_ip, tenant_data['api_tenant_web_polling_name'], None, app_installation_domain, tenant_data['api_tenant_web_polling_port'])
# api tenant plugin reverse proxy
generate_config(os.path.join(template_nginx_directory, "tenant_web_polling_reverse_proxy_template.tmpl"), reverse_proxy_directory, tenant_data['api_tenant_web_polling_port'], internal_ip, access_ip, external_ip, tenant_data['api_tenant_web_polling_name'], cert_name, app_installation_domain)
files_to_copy = [
"nginx.conf",
"nginx.conf_frontend"
]
for file in files_to_copy:
util.copy_file(os.path.join(template_nginx_directory, file), output_directory)
# custom docker entrypoint scripts
frontend_custom_template_directory = os.path.join(util.get_templates_path(), "nginx")
frontend_custom_directory = os.path.join(util.get_output_path(), "custom/frontend")
os.makedirs(frontend_custom_directory, exist_ok=True)
util.copy_file(os.path.join(frontend_custom_template_directory, "custom.sh"), frontend_custom_directory)
if config.has_option("custom", "operator_name"):
util.basic_on_location_sed(os.path.join(frontend_custom_directory, "custom.sh"), 'OPERATOR_NAME', config["custom"]["operator_name"])
else:
util.basic_on_location_sed(os.path.join(frontend_custom_directory, "custom.sh"), 'OPERATOR_NAME', 'Conpeek')