From 1d41d303f35a7ad4c5963bffe711f91dab5d0bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Wed, 26 Feb 2025 08:10:56 +0100 Subject: [PATCH] =?UTF-8?q?zmiana=20obslugi=20hase=C5=82,=20docker/podman?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 11 +++++ README.md | 106 +++++++++++++++++++++++++++++++++++++++------ app.py | 10 +++-- docker-compose.yml | 15 +++++++ start.sh | 21 +++++++++ 5 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 start.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6ba83f3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.13-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["python", "run_waitress.py"] diff --git a/README.md b/README.md index 931ea6e..1667fc1 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,101 @@ +# RouterOS Backup Manager -# RouterOS backup system +RouterOS Backup Manager to aplikacja Flask umożliwiająca zarządzanie kopiami zapasowymi urządzeń Mikrotik RouterOS. Aplikacja pozwala na eksport konfiguracji, tworzenie backupów binarnych, ich przechowywanie, porównywanie oraz przywracanie. -# Instalation: - - clone (to ex. /opt/routeros_backup) - - create venv - - install requirements via pip - - copy systemd service (routeros_backup.service) +## 🔧 Instalacja -# Start - - systemctl start routeros_backup.service - - go to http://IPADDRESS:5581 +### 1. Klonowanie repozytorium +```sh +git clone https://github.com/twoje-repo/routeros_backup.git +cd routeros_backup +``` -# Register, Login +### 2. Tworzenie i aktywacja środowiska wirtualnego (opcjonalnie) +```sh +python3 -m venv venv +source venv/bin/activate # Linux/macOS +venv\Scripts\activate # Windows +``` -# Configure devices, keys, backups, crons +### 3. Instalacja zależności +```sh +pip install -r requirements.txt +``` +### 4. Uruchomienie aplikacji lokalnie +```sh +python run_waitress.py +``` +Aplikacja będzie dostępna pod adresem: `http://127.0.0.1:5581/` -## Authors +--- -- [@linuxiarz.pl] \ No newline at end of file +## 📦 Uruchamianie w Dockerze + +1. **Zbudowanie obrazu Docker** +```sh +docker-compose build +``` + +2. **Uruchomienie kontenera** +```sh +docker-compose up -d +``` +Aplikacja uruchomi się na porcie `5581`. + +--- + +## 📚 Funkcjonalności + +- 🔐 System użytkowników (rejestracja, logowanie, zmiana hasła) +- 📡 Połączenie SSH do routerów MikroTik +- 🛠 Eksport konfiguracji i tworzenie backupów binarnych +- 🕵️‍♂️ Porównywanie backupów (`diff`) +- 📩 Powiadomienia e-mail oraz Pushover +- 📅 Harmonogram automatycznych backupów (APScheduler) +- 🧹 Automatyczne czyszczenie starych backupów i logów +- 🚀 Obsługa przez interfejs webowy + +--- + +## ⚙️ Konfiguracja + +### Zmiana ustawień +Plik `app.py` zawiera konfigurację bazy danych oraz inne ustawienia aplikacji: + +```python +app.config['SECRET_KEY'] = 'super-secret-key' +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///backup_routeros.db' +``` + +### 📬 Konfiguracja SMTP (E-mail) +Aby skonfigurować powiadomienia e-mail, wprowadź dane w sekcji ustawień: + +- Serwer SMTP +- Login/hasło SMTP +- Port (587 dla TLS, 465 dla SSL) + +### 📲 Powiadomienia Pushover +Aby włączyć powiadomienia Pushover, uzupełnij `pushover_token` oraz `pushover_userkey` w ustawieniach. + +--- + +## 🔍 API & Health Check +Aplikacja zawiera endpoint `/health`, który zwraca status bazy danych: + +```sh +curl http://127.0.0.1:5581/health +``` + +Przykładowa odpowiedź: +```json +{ + "status": "ok", + "timestamp": "2024-02-26T12:34:56Z" +} +``` + +--- + +## 🚀 Autor i licencja +Projekt stworzony przez Mateusz Grusczyńśki @linuxiarz.pl - dostępny na licencji MIT. \ No newline at end of file diff --git a/app.py b/app.py index 5701dea..9d142f6 100644 --- a/app.py +++ b/app.py @@ -27,7 +27,7 @@ from flask import ( url_for, session, flash, send_file ) from flask_sqlalchemy import SQLAlchemy -from passlib.hash import bcrypt +from passlib.context import CryptContext #from flask_wtf.csrf import CSRFProtect from apscheduler.schedulers.background import BackgroundScheduler @@ -56,14 +56,18 @@ os.makedirs(DATA_DIR, exist_ok=True) ############################################################################### # Modele bazy danych ############################################################################### +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(255), nullable=False) + def set_password(self, password): + self.password_hash = pwd_context.hash(password) + def check_password(self, password): - return bcrypt.verify(password, self.password_hash) + return pwd_context.verify(password, self.password_hash) class Router(db.Model): __tablename__ = 'routers' @@ -1345,7 +1349,7 @@ def change_password(): flash("Nowe hasło i potwierdzenie nie są zgodne.") return redirect(url_for('change_password')) - user.password_hash = bcrypt.hash(new_password) + user.password_hash = pwd_context.hash(new_password) db.session.commit() flash("Hasło zostało zmienione pomyślnie.") return redirect(url_for('dashboard')) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6191144 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile + container_name: routeros_backup + ports: + - "5581:5581" + environment: + - FLASK_ENV=production + restart: unless-stopped + volumes: + - ./data:/data diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..806086e --- /dev/null +++ b/start.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Sprawdzenie, czy podman jest dostępny +if command -v podman &> /dev/null; then + COMPOSE_CMD="podman-compose" + echo "🟢 Wykryto Podman, używam podman-compose..." +else + COMPOSE_CMD="docker-compose" + echo "🔵 Podman nie znaleziony, używam docker-compose..." +fi + +# Zatrzymanie i usunięcie kontenerów +$COMPOSE_CMD down + +# Odbudowa obrazu +$COMPOSE_CMD build + +# Uruchomienie w tle +$COMPOSE_CMD up -d + +echo "✅ Aplikacja uruchomiona!"