2025-10-14 11:42:57 +05:00
|
|
|
|
"""
|
|
|
|
|
|
Инициализация FastAPI-приложения GONETS.
|
|
|
|
|
|
|
|
|
|
|
|
Содержимое модуля:
|
|
|
|
|
|
- Создание экземпляра приложения FastAPI с метаданными (title, description, version).
|
|
|
|
|
|
- Подключение CORS-политики через `CORSMiddlewareConfig` с заранее заданными
|
|
|
|
|
|
доверенными источниками (localhost и стандартные порты фронтенда).
|
|
|
|
|
|
- Монтаж корневого роутера `api.router`, который инкапсулирует все `v1`-эндпоинты
|
|
|
|
|
|
(auth, subnet, ip, network, ufw, websocket, settings).
|
|
|
|
|
|
- Инициализация `NetworkService` на уровне приложения для подготовки сетевой
|
|
|
|
|
|
подсистемы (например, ленивые проверки окружения/зависимостей).
|
|
|
|
|
|
- Точка входа для локального запуска через `uvicorn` (режим разработки с reload).
|
|
|
|
|
|
|
|
|
|
|
|
Замечания по развертыванию:
|
|
|
|
|
|
- В прод-среде приложение запускается через `systemd` юнит `gonets.service`,
|
|
|
|
|
|
где в качестве команды используется `python3 SRV/main.py`.
|
|
|
|
|
|
- Для TLS можно использовать закомментированную строку с указанием
|
|
|
|
|
|
`ssl_keyfile` и `ssl_certfile` (сертификаты ожидаются в `/etc/gonets/certs`).
|
|
|
|
|
|
|
|
|
|
|
|
Безопасность и окружение:
|
|
|
|
|
|
- Перекрестные запросы (CORS) ограничены списком localhost-источников, что
|
|
|
|
|
|
соответствует типичной локальной разработке (Vite/DevServer и т.д.).
|
|
|
|
|
|
- Все пути и сервисы, требующие повышенных прав (например, системные команды),
|
|
|
|
|
|
должны выполняться в соответствующем окружении с необходимыми разрешениями.
|
|
|
|
|
|
"""
|
2025-06-09 10:17:12 +05:00
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
|
import uvicorn
|
|
|
|
|
|
from api.router import router
|
|
|
|
|
|
from config.cors import CORSMiddlewareConfig
|
|
|
|
|
|
from services.network_service import NetworkService
|
2025-11-19 15:03:02 +05:00
|
|
|
|
import logging
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
|
|
# Логируем в файл logs/app.log и одновременно в stdout
|
|
|
|
|
|
LOG_DIR = Path(__file__).resolve().parent / "logs"
|
|
|
|
|
|
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
LOG_FILE = LOG_DIR / "app.log"
|
|
|
|
|
|
logging.basicConfig(
|
|
|
|
|
|
level=logging.INFO,
|
|
|
|
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
|
|
|
|
handlers=[
|
|
|
|
|
|
logging.StreamHandler(),
|
|
|
|
|
|
logging.FileHandler(LOG_FILE, encoding="utf-8"),
|
|
|
|
|
|
],
|
|
|
|
|
|
force=True, # переопределяем базовую конфигурацию, заданную в импортируемых модулях
|
|
|
|
|
|
)
|
|
|
|
|
|
# Глушим шум от hot-reload watchdog
|
|
|
|
|
|
logging.getLogger("watchfiles").setLevel(logging.WARNING)
|
2025-06-09 10:17:12 +05:00
|
|
|
|
|
|
|
|
|
|
app = FastAPI(
|
|
|
|
|
|
title="GONETS",
|
|
|
|
|
|
description="Панель для управления системными сервисами Linux",
|
2025-06-25 16:56:03 +05:00
|
|
|
|
version="0.0.3",
|
2025-06-09 10:17:12 +05:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
cors_config = CORSMiddlewareConfig(app)
|
|
|
|
|
|
cors_config.add_cors_middleware()
|
|
|
|
|
|
|
|
|
|
|
|
app.include_router(router)
|
|
|
|
|
|
|
|
|
|
|
|
network_service = NetworkService()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2025-08-11 13:56:43 +05:00
|
|
|
|
#uvicorn.run("main:app", host='0.0.0.0', port=8001, reload=True, ssl_keyfile="/etc/gonets/certs/gonets.key", ssl_certfile="/etc/gonets/certs/gonets.crt")
|
2025-10-14 11:44:44 +05:00
|
|
|
|
|
2025-08-11 13:56:43 +05:00
|
|
|
|
uvicorn.run("main:app", host="0.0.0.0", port=8001, reload=True)
|