50 lines
2.3 KiB
Bash
Executable File
50 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NGINX_CONF="${NGINX_CONF:-/etc/nginx/nginx.conf}"
|
|
LLM_PROXY_PATH="${LLM_PROXY_PATH:-/llm/}"
|
|
LLM_UPSTREAM="${LLM_UPSTREAM:-http://127.0.0.1:11435/}"
|
|
|
|
if [[ ! -f "$NGINX_CONF" ]]; then
|
|
echo "nginx config not found: $NGINX_CONF" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "run as root: sudo $0" >&2
|
|
exit 1
|
|
fi
|
|
|
|
backup_path="${NGINX_CONF}.webterm-llm-$(date +%Y%m%d-%H%M%S).bak"
|
|
cp "$NGINX_CONF" "$backup_path"
|
|
echo "backup created: $backup_path"
|
|
|
|
python3 - "$NGINX_CONF" "$LLM_PROXY_PATH" "$LLM_UPSTREAM" <<'PY'
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
config_path = Path(sys.argv[1])
|
|
location_path = sys.argv[2]
|
|
upstream = sys.argv[3]
|
|
text = config_path.read_text()
|
|
|
|
if f"location {location_path}" in text:
|
|
print(f"proxy location already present: {location_path}")
|
|
raise SystemExit(0)
|
|
|
|
target = """ location / {\n if ($valid_origin = "0") { return 403; }\n proxy_pass http://127.0.0.1:8080;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n"""
|
|
|
|
replacement = f""" location {location_path} {{\n if ($valid_origin = "0") {{ return 403; }}\n proxy_pass {upstream};\n proxy_http_version 1.1;\n proxy_connect_timeout 30s;\n proxy_send_timeout 300s;\n proxy_read_timeout 300s;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }}\n\n{target}"""
|
|
|
|
if target not in text:
|
|
print("target webterm location block not found in nginx.conf", file=sys.stderr)
|
|
raise SystemExit(1)
|
|
|
|
config_path.write_text(text.replace(target, replacement, 1))
|
|
print(f"inserted proxy location {location_path} -> {upstream}")
|
|
PY
|
|
|
|
nginx -t
|
|
echo "nginx config valid"
|
|
echo "reload when ready: sudo systemctl reload nginx"
|