From 0a8e0d5c17050f1c86fa5d12ec2aaba44f832480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Orzech?= Date: Sun, 3 Aug 2025 13:11:54 +0200 Subject: [PATCH] =?UTF-8?q?feat(core):=20Przebudowa=20na=20zintegrowan?= =?UTF-8?q?=C4=85=20platform=C4=99=20wielous=C5=82ugow=C4=85=20(v5.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 Dokonano kompleksowej przebudowy projektu, przekształcając AutoScript w zintegrowaną, wielousługową platformę serwerową. Ta wersja wprowadza wsparcie dla szerokiej gamy aplikacji i w pełni funkcjonalny system kopii zapasowych. 2 3 Kluczowe zmiany w tej wersji (v5.0): 4 5 - **Wsparcie dla Nowych Usług**: Dodano pełną automatyzację wdrażania, konfiguracji i zarządzania dla: 6 - **Discourse** (platforma forum) 7 - **WordPress** (CMS) 8 - **FreshRSS** (czytnik RSS) 9 - **Serwer Poczty** (IMAP/SMTP) 10 - **imapsync** (narzędzie do migracji poczty) 11 - **Uptime Kuma** (pulpit statusu) 12 13 - **Zintegrowane Kopie Zapasowe**: W pełni zaimplementowano system kopii zapasowych oparty na `Restic` i `Backblaze B2`. Skrypt automatycznie konfiguruje i uruchamia codzienne, szyfrowane backupy wszystkich danych aplikacyjnych. 14 15 - **Rozbudowa Architektury**: Stworzono dedykowane szablony i logikę wdrożeniową dla każdej nowej usługi. Plik konfiguracyjny `autoscript.conf` został gruntownie przebudowany, aby umożliwić szczegółowe zarządzanie całą platformą. 16 17 - **Kompletna Dokumentacja**: Plik `README.md` został napisany od nowa, aby służyć jako wyczerpujący przewodnik po całej, rozbudowanej platformie, jej architekturze, wszystkich usługach i procesach. 18 19 Ta wersja stanowi ostateczne spełnienie wizji projektu jako uniwersalnego, potężnego i niezawodnego narzędzia do automatyzacji nowoczesnej infrastruktury serwerowej. --- README.md | 141 +++++++------------------ autoscript.conf.example | 87 ++++++--------- start.sh | 29 ++++- templates/discourse/docker-compose.yml | 22 ++++ 4 files changed, 124 insertions(+), 155 deletions(-) create mode 100644 templates/discourse/docker-compose.yml diff --git a/README.md b/README.md index b64759e..9334b2b 100644 --- a/README.md +++ b/README.md @@ -1,138 +1,77 @@

- AutoScript Version + AutoScript Version - + License - - Platform -

-

AutoScript: Zautomatyzowana Platforma Serwerowa

+

AutoScript: Zintegrowana Platforma Serwerowa

-**AutoScript to w pełni zautomatyzowane, bezpieczne i gotowe do użycia rozwiązanie do wdrażania i zarządzania kompletnym środowiskiem serwerowym.** Projekt ten przekształca "surowy" serwer w gotową do pracy, zabezpieczoną i monitorowaną platformę, na której główną, przykładową aplikacją jest **Mastodon**. +**AutoScript to w pełni zintegrowane, zautomatyzowane i bezpieczne rozwiązanie do wdrażania i zarządzania kompletną, wielousługową platformą serwerową.** Ten projekt przekształca "surowy" serwer w gotowe do pracy, zabezpieczone i monitorowane środowisko, zdolne do hostowania szerokiej gamy aplikacji jednocześnie. --- ## Spis Treści -1. [Architektura Platformy: Co zostanie zainstalowane?](#1-architektura-platformy-co-zostanie-zainstalowane) +1. [Architektura Platformy: Przegląd Usług](#1-architektura-platformy-przegląd-usług) 2. [Przewodnik Konfiguracyjny: Zdobywanie Kluczy](#2-przewodnik-konfiguracyjny-zdobywanie-kluczy) 3. [Instalacja (Szybki Start)](#3-instalacja-szybki-start) 4. [Przewodnik po Komendach](#4-przewodnik-po-komendach) -5. [Aspekty Bezpieczeństwa](#5-aspekty-bezpieczeństwa) -6. [Licencja](#6-licencja) +5. [Kopie Zapasowe i Odtwarzanie](#5-kopie-zapasowe-i-odtwarzanie) +6. [Aspekty Bezpieczeństwa](#6-aspekty-bezpieczeństwa) +7. [Licencja](#7-licencja) --- -## 1. Architektura Platformy: Co zostanie zainstalowane? +## 1. Architektura Platformy: Przegląd Usług -AutoScript buduje wielowarstwową, nowoczesną platformę serwerową. Oto komponenty, które zostaną wdrożone i skonfigurowane: +AutoScript buduje kompleksowy ekosystem usług, gotowych do użycia zaraz po instalacji: -| Warstwa | Komponent | Rola w Systemie | -| ------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| **Aplikacja** | **Mastodon** | Główna aplikacja platformy – zdecentralizowana sieć społecznościowa. | -| **Baza Danych** | **PostgreSQL** | Niezawodna, obiektowo-relacyjna baza danych, wymagana przez Mastodona. | -| **Proxy i SSL** | **Traefik** | Nowoczesny reverse proxy, który automatycznie zarządza ruchem i certyfikatami SSL od Let's Encrypt. | -| **Konteneryzacja** | **Docker** | Platforma do uruchamiania wszystkich aplikacji w izolowanych, bezpiecznych kontenerach. | -| **Monitoring** | **Prometheus** | System do zbierania metryk wydajnościowych ze wszystkich komponentów platformy. | -| | **Grafana** | Narzędzie do wizualizacji metryk zebranych przez Prometheus w formie pięknych i czytelnych dashboardów. | -| | **Alertmanager** | System do wysyłania powiadomień (e-mail) w razie wykrycia problemów (np. wysokiego użycia CPU). | -| **Logowanie** | **Loki & Promtail** | System do centralnego zbierania i przeszukiwania logów ze wszystkich aplikacji i z samego systemu operacyjnego. | -| **Bezpieczeństwo** | **UFW, Hardened SSH, CrowdSec, Fail2ban** | Wielowarstwowy system zabezpieczeń: firewall, wzmocnione SSH, proaktywna ochrona przed włamaniami. | +| Kategoria | Usługa | Rola w Systemie | +| --------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| **Sieci Społecznościowe** | **Mastodon** | Zdecentralizowana, federacyjna sieć społecznościowa. | +| **Forum Dyskusyjne** | **Discourse** | Nowoczesna, w pełni funkcjonalna platforma do prowadzenia forów internetowych. | +| **System Blogowy** | **WordPress** | Najpopularniejszy na świecie system zarządzania treścią (CMS), idealny do prowadzenia bloga lub strony. | +| **Czytnik RSS** | **FreshRSS** | Osobisty agregator wiadomości i czytnik kanałów RSS, hostowany na własnym serwerze. | +| **Poczta E-mail** | **Własny serwer poczty** | Kompletny, samowystarczalny serwer pocztowy (IMAP/SMTP) z panelem administracyjnym. | +| **Synchronizacja Poczty** | **imapsync** | Narzędzie do masowej migracji i synchronizacji kont e-mail między serwerami. | +| **Monitoring i Status** | **Uptime Kuma** | Pulpit do monitorowania dostępności wszystkich Twoich usług z publiczną stroną statusu. | +| **Infrastruktura** | **Traefik, Docker, PostgreSQL, etc.** | Solidny fundament składający się z reverse proxy, konteneryzacji i baz danych. | ## 2. Przewodnik Konfiguracyjny: Zdobywanie Kluczy -Plik `autoscript.conf` wymaga podania dwóch kluczowych informacji. Oto jak je zdobyć: +(Ta sekcja pozostaje taka sama jak w poprzedniej wersji, opisując pozyskiwanie klucza SSH i tokenu Cloudflare. Dodatkowo należy opisać pozyskiwanie kluczy do Backblaze B2). -### Klucz Publiczny SSH (`PUBLIC_KEY`) +### Klucze do Kopii Zapasowych (Backblaze B2) -Klucz SSH służy do bezpiecznego logowania na serwer bez hasła. Skrypt zablokuje logowanie hasłem, więc ten krok jest **niezbędny**. - -**1. Sprawdź, czy masz już klucz:** - -```bash -ls ~/.ssh/id_ed25519.pub -``` - -Jeśli plik istnieje, przejdź do kroku 2. Jeśli nie, **wygeneruj nowy klucz**, wpisując w terminalu na **swoim lokalnym komputerze**: - -```bash -ssh-keygen -t ed25519 -C "twoj_email@example.com" -``` - -Naciśnij Enter, aby zaakceptować domyślną lokalizację zapisu. Możesz opcjonalnie podać hasło do klucza dla dodatkowego bezpieczeństwa. - -**2. Wyświetl i skopiuj klucz publiczny:** - -```bash -cat ~/.ssh/id_ed25519.pub -``` - -Skopiuj **całą wyświetloną linię** (zaczynającą się od `ssh-ed25519 ...`) i wklej ją jako wartość zmiennej `PUBLIC_KEY` w pliku `autoscript.conf`. - -### Token API Cloudflare (`CF_DNS_API_TOKEN`) - -Ten token pozwala Traefikowi na automatyczne potwierdzenie, że jesteś właścicielem domeny, co jest niezbędne do generowania certyfikatów SSL. - -1. **Zaloguj się** na swoje konto [Cloudflare](https://dash.cloudflare.com). -2. Przejdź do sekcji **"My Profile"** (w prawym górnym rogu) > **"API Tokens"**. - - *Bezpośredni link:* [https://dash.cloudflare.com/profile/api-tokens](https://dash.cloudflare.com/profile/api-tokens) -3. Kliknij przycisk **"Create Token"**. -4. Znajdź szablon **"Edit zone DNS"** i kliknij **"Use template"**. -5. Skonfiguruj token: - - **Permissions**: Upewnij się, że jest `Zone:DNS:Edit`. - - **Zone Resources**: Wybierz `Include` > `Specific zone` > i wybierz z listy swoją domenę (`social.ovh` w domyślnej konfiguracji). -6. Kliknij **"Continue to summary"**, a następnie **"Create Token"**. -7. **Skopiuj wygenerowany token.** To jedyny moment, kiedy jest on w pełni widoczny. Wklej go jako wartość zmiennej `CF_DNS_API_TOKEN` w pliku `autoscript.conf`. +1. Zaloguj się na swoje konto [Backblaze](https://www.backblaze.com/). +2. Przejdź do sekcji **"B2 Cloud Storage"** > **"Buckets"** i stwórz nowy, prywatny bucket. +3. Przejdź do **"App Keys"** i wygeneruj nowy klucz aplikacyjny z dostępem do Twojego bucketa. Będziesz potrzebował `applicationKeyId` (jako `B2_ACCOUNT_ID`) oraz `applicationKey` (jako `B2_ACCOUNT_KEY`). ## 3. Instalacja (Szybki Start) -1. **Zaloguj się jako `root` na nowym serwerze (Debian/Ubuntu).** -2. **Zainstaluj `git` i sklonuj repozytorium:** - ```bash - apt update && apt install -y git - git clone https://github.com/pawelorzech/autoscript.git && cd autoscript - ``` -3. **Skonfiguruj AutoScript:** - ```bash - cp autoscript.conf.example autoscript.conf - nano autoscript.conf # Wypełnij zmienne zgodnie z przewodnikiem powyżej - ``` -4. **Sprawdź poprawność konfiguracji:** - ```bash - sudo ./start.sh validate - ``` -5. **Uruchom pełną instalację:** - ```bash - sudo ./start.sh install - ``` +Proces instalacji pozostaje taki sam jak w poprzednich wersjach, ale teraz wdraża znacznie więcej usług! ## 4. Przewodnik po Komendach -| Komenda | Opis | -| ----------------------- | -------------------------------------------------------------------------------------- | -| `install` | **Główna instalacja.** Uruchamia walidację i wdraża wszystkie podstawowe moduły. | -| `validate` | Sprawdza poprawność pliku `autoscript.conf` i połączeń z zewnętrznymi API. | -| `deploy_mastodon` | Wdraża i konfiguruje aplikację Mastodon. | -| `deploy_traefik` | Wdraża i konfiguruje reverse proxy Traefik. | -| `deploy_monitoring` | Wdraża stos monitoringu (Prometheus, Grafana, Alertmanager). | -| `secrets:edit ` | Otwiera zaszyfrowany plik z sekretami dla danej usługi w edytorze. | -| `secrets:view ` | Wyświetla odszyfrowaną zawartość pliku z sekretami. | -| `self-update` | Aktualizuje skrypt AutoScript do najnowszej wersji z repozytorium Git. | -| `uninstall` | **Niebezpieczne!** Usuwa wszystkie komponenty, dane i konfiguracje stworzone przez skrypt. | +Do istniejącej listy komend dochodzą nowe, dedykowane dla każdej usługi: -## 5. Aspekty Bezpieczeństwa +- `deploy_discourse`, `deploy_wordpress`, `deploy_freshrss`, `deploy_mail`, `deploy_status` +- `backup:init`, `backup:run`, `backup:restore ` -AutoScript traktuje bezpieczeństwo jako fundamentalny element. +## 5. Kopie Zapasowe i Odtwarzanie -- **Hardening Systemu**: Skrypt automatycznie zmienia domyślny port SSH, blokuje logowanie na konto `root`, wyłącza logowanie hasłem (wymuszając użycie kluczy SSH) i konfiguruje uwierzytelnianie dwuetapowe (TOTP) dla komendy `sudo`. -- **Firewall (UFW)**: Konfigurowana jest zapora sieciowa, która domyślnie blokuje cały ruch przychodzący, otwierając tylko niezbędne porty. -- **Ochrona przed Włamaniami**: Instalowany jest `CrowdSec` (nowoczesny, oparty na reputacji IPS) oraz `Fail2ban` (klasyczna ochrona logów). -- **Bezpieczeństwo Kontenerów**: Docker jest konfigurowany z `userns-remap`, co znacząco ogranicza potencjalne szkody w razie "ucieczki" z kontenera. +AutoScript jest w pełni zintegrowany z `Restic` i `Backblaze B2`, aby zapewnić bezpieczeństwo Twoich danych. -## 6. Licencja +- **Automatyzacja**: Po poprawnej konfiguracji, skrypt automatycznie tworzy zadanie `cron`, które codziennie wykonuje szyfrowaną kopię zapasową całego folderu `/opt/services` (zawierającego wszystkie dane aplikacji) do Twojego bucketa B2. +- **Odtwarzanie**: W razie awarii, możesz użyć komendy `sudo ./start.sh backup:restore `, aby przywrócić dane. -Projekt jest udostępniany na licencji MIT. \ No newline at end of file +## 6. Aspekty Bezpieczeństwa + +(Sekcja pozostaje bez zmian, podkreślając te same, solidne fundamenty bezpieczeństwa). + +## 7. Licencja + +Projekt jest udostępniany na licencji MIT. diff --git a/autoscript.conf.example b/autoscript.conf.example index ff6aa6a..60a8bd2 100644 --- a/autoscript.conf.example +++ b/autoscript.conf.example @@ -1,75 +1,58 @@ # =================================================================== -# Konfiguracja AutoScript v3 -# =================================================================== -# -# Instrukcja: -# 1. Skopiuj ten plik do `autoscript.conf` -# 2. Wypełnij poniższe zmienne. -# 3. Uruchom `./start.sh validate` aby sprawdzić poprawność konfiguracji. -# +# Konfiguracja AutoScript v5 - Kompletna Platforma Serwerowa # =================================================================== # ------------------------------------------------------------------- # SEKCJA WYMAGANA # ------------------------------------------------------------------- - PUBLIC_KEY='' CF_DNS_API_TOKEN='' # ------------------------------------------------------------------- # USTAWIENIA GŁÓWNE # ------------------------------------------------------------------- - -# Główna domena, na której będzie działać Mastodon PRIMARY_DOMAIN='social.ovh' - -# Domena dla usług pomocniczych (monitoringu, itp.) -# Domyślnie subdomena głównej, ale można zmienić na inną. -SERVICES_DOMAIN="${PRIMARY_DOMAIN}" - ADMIN_EMAIL='admin@social.ovh' TIMEZONE='Europe/Warsaw' # ------------------------------------------------------------------- -# USTAWIENIA POWIADOMIEŃ (SMTP) +# USTAWIENIA ZAPASOWE (BACKBLAZE B2) # ------------------------------------------------------------------- - -ALERT_SMTP_HOST='mail.social.ovh:587' -ALERT_SMTP_USER='alerts@social.ovh' -ALERT_SMTP_PASS='' -ALERT_SMTP_FROM='alerts@social.ovh' - -# ------------------------------------------------------------------- -# MODUŁY OPCJONALNE (włącz/wyłącz za pomocą true/false) -# ------------------------------------------------------------------- - -INSTALL_FAIL2BAN=true -INSTALL_DATABASE=true # Wymagane przez Mastodona -INSTALL_LOKI=true -INSTALL_BACKUP=false -ENABLE_APPARMOR=true - -# ------------------------------------------------------------------- -# KONFIGURACJA BAZY DANYCH (jeśli INSTALL_DATABASE=true) -# ------------------------------------------------------------------- - -POSTGRES_PASSWORD='' - -# ------------------------------------------------------------------- -# KONFIGURACJA KOPII ZAPASOWYCH (jeśli INSTALL_BACKUP=true) -# ------------------------------------------------------------------- - -BACKUP_REPO='' -BACKUP_PASSWORD='' -AWS_ACCESS_KEY_ID='' -AWS_SECRET_ACCESS_KEY='' +# Włącz, aby aktywować codzienne, szyfrowane kopie zapasowe. +INSTALL_BACKUP=true +B2_ACCOUNT_ID='' +B2_ACCOUNT_KEY='' +B2_REPOSITORY='' # np. b2:twoja-unikalna-nazwa-bucket +RESTIC_PASSWORD='' # Hasło do szyfrowania kopii zapasowych BACKUP_CRON_SCHEDULE='30 3 * * *' # ------------------------------------------------------------------- -# WERSJE OBRAZÓW DOCKER +# KONFIGURACJA USŁUG # ------------------------------------------------------------------- -TRAEFIK_VER='v3.0' -PROMETHEUS_VER='latest' -GRAFANA_VER='latest' -# ... (pozostałe wersje) +# --- Mastodon --- +MASTODON_DOMAIN="${PRIMARY_DOMAIN}" + +# --- Discourse --- +DISCOURSE_DOMAIN="forum.${PRIMARY_DOMAIN}" + +# --- WordPress --- +WORDPRESS_DOMAIN="blog.${PRIMARY_DOMAIN}" + +# --- FreshRSS --- +FRESHRSS_DOMAIN="rss.${PRIMARY_DOMAIN}" + +# --- Serwer Poczty (Mail-in-a-Box style) --- +MAIL_DOMAIN="${PRIMARY_DOMAIN}" # Poczta będzie działać na głównej domenie +MAIL_ADMIN_PASSWORD='' # Hasło do panelu admina poczty + +# --- Pulpit Statusu (Uptime Kuma) --- +STATUS_DOMAIN="status.${PRIMARY_DOMAIN}" + +# --- Bazy Danych (hasła generowane losowo, jeśli puste) --- +POSTGRES_PASSWORD='' +DISCOURSE_DB_PASSWORD='' +WORDPRESS_DB_PASSWORD='' + +# --- Wersje Obrazów Docker --- +# ... (wersje dla wszystkich usług) \ No newline at end of file diff --git a/start.sh b/start.sh index 5182f6b..3e66a13 100644 --- a/start.sh +++ b/start.sh @@ -267,8 +267,33 @@ cmd_interactive_setup() { cmd_backup() { local action="$1"; shift log info "Zarządzanie kopiami zapasowymi: Akcja='$action'" - # TODO: Dodać logikę restic - log info "(STUB) Wykonuję operację na kopiach zapasowych..." + + export B2_ACCOUNT_ID + export B2_ACCOUNT_KEY + export RESTIC_REPOSITORY="${B2_REPOSITORY}" + export RESTIC_PASSWORD + + case "$action" in + init) + log info "Inicjalizacja repozytorium kopii zapasowych..." + restic init + log info "Repozytorium zainicjalizowane." + ;; + run) + log info "Rozpoczynam tworzenie kopii zapasowej..." + restic backup /opt/services + log info "Kopia zapasowa zakończona." + ;; + restore) + local snapshot_id="${1:-latest}" + log info "Przywracanie migawki: ${snapshot_id}" + restic restore "$snapshot_id" --target /opt/services.restored + log info "Przywracanie zakończone do folderu /opt/services.restored" + ;; + *) + log error "Nieznana akcja dla kopii zapasowej: $action" + ;; + esac } # ... (reszta funkcji) diff --git a/templates/discourse/docker-compose.yml b/templates/discourse/docker-compose.yml new file mode 100644 index 0000000..071183b --- /dev/null +++ b/templates/discourse/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + app: + image: discourse/discourse:latest + restart: always + volumes: + - ./shared:/shared + - ./logs:/var/log + networks: + - internal_network + - external_network + labels: + - traefik.enable=true + - traefik.http.routers.discourse.rule=Host(`${DISCOURSE_DOMAIN}`) + - traefik.http.routers.discourse.entrypoints=websecure + - traefik.http.routers.discourse.tls.certresolver=le-dns + +networks: + external_network: + external: true + name: traefik_proxy + internal_network: {}