Files
local-dns/scripts/cert_renew_restart.py

91 lines
3.8 KiB
Python
Raw Normal View History

2025-11-21 15:52:02 +03:00
# cert_renew_restart.py
2025-11-21 15:54:11 +03:00
import subprocess
import shutil
from pathlib import Path
from common import *
2025-11-21 15:52:02 +03:00
def generate_mkcert_command():
"""Генерирует команду для mkcert с указанием всех доменов"""
services = read_services_config()
domains = [f"{service['name']}.local" for service in services['services']]
domains.append("*.local")
# Создаем PowerShell команду
domains_str = " ".join([f'"{domain}"' for domain in domains])
powershell_cmd = f'mkcert {domains_str}'
return powershell_cmd
def copy_and_rename_certificates():
"""Копирует и переименовывает сертификаты из Windows в WSL"""
# Определяем пути
windows_certs_path = Path("C:/store/certs")
wsl_certs_path = Path.home() / "projects" / "docker" / "network" / "certs"
# Создаем директорию для сертификатов в WSL
wsl_certs_path.mkdir(parents=True, exist_ok=True)
# Находим сгенерированные mkcert файлы
cert_files = list(windows_certs_path.glob("_wildcard.local+*.pem"))
if not cert_files:
print("Сертификаты не найдены в C:/store/certs")
return False
# Предполагаем, что mkcert генерирует файлы в формате _wildcard.domain+N.pem
cert_file = cert_files[0]
key_file = cert_files[0].with_name(cert_file.name.replace(".pem", "-key.pem"))
if not key_file.exists():
print(f"Файл ключа не найден: {key_file}")
return False
# Копируем и переименовываем
target_cert = wsl_certs_path / "wildcard.local.pem"
target_key = wsl_certs_path / "wildcard.local.key"
shutil.copy2(cert_file, target_cert)
shutil.copy2(key_file, target_key)
# Создаем копии для default
default_cert = wsl_certs_path / "default.crt"
default_key = wsl_certs_path / "default.key"
shutil.copy2(target_cert, default_cert)
shutil.copy2(target_key, default_key)
print(f"Сертификаты скопированы в {wsl_certs_path}")
return True
def main():
print("Обновление сертификатов и перезапуск сервисов...")
2025-11-21 15:54:11 +03:00
# Настройка проекта
setup_project()
2025-11-21 15:52:02 +03:00
# Выводим команду для генерации сертификатов
mkcert_cmd = generate_mkcert_command()
print("\nДля генерации сертификатов выполните в PowerShell (от администратора):")
print(f"cd C:\\store\\certs")
print(mkcert_cmd)
print()
# Ждем подтверждения пользователя
input("Нажмите Enter после генерации сертификатов в PowerShell...")
# Копируем сертификаты
if not copy_and_rename_certificates():
print("Не удалось скопировать сертификаты")
sys.exit(1)
# Перезапускаем nginx-proxy для загрузки новых сертификатов
print("Перезапуск nginx-proxy...")
if not run_docker_command("docker-compose restart nginx-proxy"):
print("Не удалось перезапустить nginx-proxy")
# Если restart не сработал, пробуем поднять контейнеры
if not run_docker_command("docker-compose up -d"):
print("Не удалось поднять контейнеры")
sys.exit(1)
print("Сертификаты обновлены и сервисы перезапущены!")
if __name__ == "__main__":
main()