апдейт 4
This commit is contained in:
@@ -4,16 +4,40 @@ import xml.etree.ElementTree as ET
|
|||||||
import io
|
import io
|
||||||
import platform
|
import platform
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv(override=True)
|
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
|
def get_env_path() -> Path:
|
||||||
|
"""Возвращает тот же .env, который использует systemd на сервере.
|
||||||
|
|
||||||
|
На production deploy.sh подключает /mnt/wfl/.env через EnvironmentFile.
|
||||||
|
Для локальной разработки остаётся <project>/.env. Путь можно явно
|
||||||
|
переопределить переменной WFL_ENV_FILE.
|
||||||
|
"""
|
||||||
|
configured = str(os.getenv("WFL_ENV_FILE") or "").strip()
|
||||||
|
if configured:
|
||||||
|
return Path(configured)
|
||||||
|
|
||||||
|
production_env = Path("/mnt/wfl/.env")
|
||||||
|
if production_env.exists():
|
||||||
|
return production_env
|
||||||
|
|
||||||
|
return PROJECT_ROOT / ".env"
|
||||||
|
|
||||||
|
|
||||||
def _refresh_env() -> None:
|
def _refresh_env() -> None:
|
||||||
# Читаем .env заново перед скачиванием, чтобы изменение SYNO_PATH_VMIX_2
|
# ВАЖНО: не используем load_dotenv() без пути. Иначе /root/WFL/.env
|
||||||
# применялось без пересборки кода.
|
# может перезаписать значения из systemd EnvironmentFile=/mnt/wfl/.env.
|
||||||
load_dotenv(override=True)
|
env_path = get_env_path()
|
||||||
|
if env_path.exists():
|
||||||
|
load_dotenv(env_path, override=True)
|
||||||
|
|
||||||
|
|
||||||
|
_refresh_env()
|
||||||
|
|
||||||
|
|
||||||
def get_syno_settings() -> tuple[str | None, str | None, str | None]:
|
def get_syno_settings() -> tuple[str | None, str | None, str | None]:
|
||||||
@@ -203,12 +227,30 @@ def build_vmix_project_bytes(
|
|||||||
)
|
)
|
||||||
|
|
||||||
syno_url, syno_username, syno_password = get_syno_settings()
|
syno_url, syno_username, syno_password = get_syno_settings()
|
||||||
print(f"[vmix] source_key={source_key or '-'} preset_path={vmix_preset_path}")
|
env_path = get_env_path()
|
||||||
|
|
||||||
|
if not syno_url:
|
||||||
|
raise RuntimeError(f"Не задан SYNO_URL (env: {env_path})")
|
||||||
|
if not syno_username:
|
||||||
|
raise RuntimeError(f"Не задан SYNO_USERNAME (env: {env_path})")
|
||||||
|
if not syno_password:
|
||||||
|
raise RuntimeError(f"Не задан SYNO_PASSWORD (env: {env_path})")
|
||||||
|
|
||||||
|
# nasio ожидает имя хоста/IP отдельно от порта, поэтому убираем случайно
|
||||||
|
# добавленную схему https:// и завершающий slash.
|
||||||
|
normalized_syno_url = str(syno_url).strip().rstrip("/")
|
||||||
|
if normalized_syno_url.startswith(("http://", "https://")):
|
||||||
|
normalized_syno_url = urlparse(normalized_syno_url).hostname or normalized_syno_url
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"[vmix] source_key={source_key or '-'} preset_path={vmix_preset_path} "
|
||||||
|
f"nas={normalized_syno_url}:443 env={env_path}"
|
||||||
|
)
|
||||||
|
|
||||||
vmix_bio = nasio.load_bio(
|
vmix_bio = nasio.load_bio(
|
||||||
user=syno_username,
|
user=syno_username,
|
||||||
password=syno_password,
|
password=syno_password,
|
||||||
nas_ip=syno_url,
|
nas_ip=normalized_syno_url,
|
||||||
nas_port="443",
|
nas_port="443",
|
||||||
path=vmix_preset_path,
|
path=vmix_preset_path,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user