Files
local-dns/scripts/cert_renew_restart.py
Mikan a274d809f0 fix
2025-11-21 15:54:11 +03:00

91 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cert_renew_restart.py
import subprocess
import shutil
from pathlib import Path
from common import *
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("Обновление сертификатов и перезапуск сервисов...")
# Настройка проекта
setup_project()
# Выводим команду для генерации сертификатов
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()