feat(core): Przebudowa na zintegrowaną platformę wielousługową (v5.0)

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.
This commit is contained in:
Paweł Orzech 2025-08-03 13:11:54 +02:00
parent 05a6c435fb
commit 0a8e0d5c17
4 changed files with 124 additions and 155 deletions

139
README.md
View file

@ -1,138 +1,77 @@
<p align="center"> <p align="center">
<a href="#"> <a href="#">
<img src="https://img.shields.io/badge/AutoScript-v4.1-blue.svg" alt="AutoScript Version"> <img src="https://img.shields.io/badge/AutoScript-v5.0-blue.svg" alt="AutoScript Version">
</a> </a>
<a href="#8-licencja"> <a href="#7-licencja">
<img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"> <img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License">
</a> </a>
<a href="#">
<img src="https://img.shields.io/badge/platform-Debian%2FUbuntu-orange.svg" alt="Platform">
</a>
</p> </p>
<h1 align="center">AutoScript: Zautomatyzowana Platforma Serwerowa</h1> <h1 align="center">AutoScript: Zintegrowana Platforma Serwerowa</h1>
**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 ## 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) 2. [Przewodnik Konfiguracyjny: Zdobywanie Kluczy](#2-przewodnik-konfiguracyjny-zdobywanie-kluczy)
3. [Instalacja (Szybki Start)](#3-instalacja-szybki-start) 3. [Instalacja (Szybki Start)](#3-instalacja-szybki-start)
4. [Przewodnik po Komendach](#4-przewodnik-po-komendach) 4. [Przewodnik po Komendach](#4-przewodnik-po-komendach)
5. [Aspekty Bezpieczeństwa](#5-aspekty-bezpieczeństwa) 5. [Kopie Zapasowe i Odtwarzanie](#5-kopie-zapasowe-i-odtwarzanie)
6. [Licencja](#6-licencja) 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 | | Kategoria | Usługa | Rola w Systemie |
| ------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | --------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Aplikacja** | **Mastodon** | Główna aplikacja platformy zdecentralizowana sieć społecznościowa. | | **Sieci Społecznościowe** | **Mastodon** | Zdecentralizowana, federacyjna sieć społecznościowa. |
| **Baza Danych** | **PostgreSQL** | Niezawodna, obiektowo-relacyjna baza danych, wymagana przez Mastodona. | | **Forum Dyskusyjne** | **Discourse** | Nowoczesna, w pełni funkcjonalna platforma do prowadzenia forów internetowych. |
| **Proxy i SSL** | **Traefik** | Nowoczesny reverse proxy, który automatycznie zarządza ruchem i certyfikatami SSL od Let's Encrypt. | | **System Blogowy** | **WordPress** | Najpopularniejszy na świecie system zarządzania treścią (CMS), idealny do prowadzenia bloga lub strony. |
| **Konteneryzacja** | **Docker** | Platforma do uruchamiania wszystkich aplikacji w izolowanych, bezpiecznych kontenerach. | | **Czytnik RSS** | **FreshRSS** | Osobisty agregator wiadomości i czytnik kanałów RSS, hostowany na własnym serwerze. |
| **Monitoring** | **Prometheus** | System do zbierania metryk wydajnościowych ze wszystkich komponentów platformy. | | **Poczta E-mail** | **Własny serwer poczty** | Kompletny, samowystarczalny serwer pocztowy (IMAP/SMTP) z panelem administracyjnym. |
| | **Grafana** | Narzędzie do wizualizacji metryk zebranych przez Prometheus w formie pięknych i czytelnych dashboardów. | | **Synchronizacja Poczty** | **imapsync** | Narzędzie do masowej migracji i synchronizacji kont e-mail między serwerami. |
| | **Alertmanager** | System do wysyłania powiadomień (e-mail) w razie wykrycia problemów (np. wysokiego użycia CPU). | | **Monitoring i Status** | **Uptime Kuma** | Pulpit do monitorowania dostępności wszystkich Twoich usług z publiczną stroną statusu. |
| **Logowanie** | **Loki & Promtail** | System do centralnego zbierania i przeszukiwania logów ze wszystkich aplikacji i z samego systemu operacyjnego. | | **Infrastruktura** | **Traefik, Docker, PostgreSQL, etc.** | Solidny fundament składający się z reverse proxy, konteneryzacji i baz danych. |
| **Bezpieczeństwo** | **UFW, Hardened SSH, CrowdSec, Fail2ban** | Wielowarstwowy system zabezpieczeń: firewall, wzmocnione SSH, proaktywna ochrona przed włamaniami. |
## 2. Przewodnik Konfiguracyjny: Zdobywanie Kluczy ## 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. Zaloguj się na swoje konto [Backblaze](https://www.backblaze.com/).
2. Przejdź do sekcji **"B2 Cloud Storage"** > **"Buckets"** i stwórz nowy, prywatny bucket.
**1. Sprawdź, czy masz już klucz:** 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`).
```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`.
## 3. Instalacja (Szybki Start) ## 3. Instalacja (Szybki Start)
1. **Zaloguj się jako `root` na nowym serwerze (Debian/Ubuntu).** Proces instalacji pozostaje taki sam jak w poprzednich wersjach, ale teraz wdraża znacznie więcej usług!
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
```
## 4. Przewodnik po Komendach ## 4. Przewodnik po Komendach
| Komenda | Opis | Do istniejącej listy komend dochodzą nowe, dedykowane dla każdej usługi:
| ----------------------- | -------------------------------------------------------------------------------------- |
| `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 <nazwa>` | Otwiera zaszyfrowany plik z sekretami dla danej usługi w edytorze. |
| `secrets:view <nazwa>` | 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. |
## 5. Aspekty Bezpieczeństwa - `deploy_discourse`, `deploy_wordpress`, `deploy_freshrss`, `deploy_mail`, `deploy_status`
- `backup:init`, `backup:run`, `backup:restore <snapshot_id>`
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`. AutoScript jest w pełni zintegrowany z `Restic` i `Backblaze B2`, aby zapewnić bezpieczeństwo Twoich danych.
- **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.
## 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 <ID_MIGAWKI>`, aby przywrócić dane.
## 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. Projekt jest udostępniany na licencji MIT.

View file

@ -1,75 +1,58 @@
# =================================================================== # ===================================================================
# Konfiguracja AutoScript v3 # Konfiguracja AutoScript v5 - Kompletna Platforma Serwerowa
# ===================================================================
#
# Instrukcja:
# 1. Skopiuj ten plik do `autoscript.conf`
# 2. Wypełnij poniższe zmienne.
# 3. Uruchom `./start.sh validate` aby sprawdzić poprawność konfiguracji.
#
# =================================================================== # ===================================================================
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# SEKCJA WYMAGANA # SEKCJA WYMAGANA
# ------------------------------------------------------------------- # -------------------------------------------------------------------
PUBLIC_KEY='' PUBLIC_KEY=''
CF_DNS_API_TOKEN='' CF_DNS_API_TOKEN=''
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# USTAWIENIA GŁÓWNE # USTAWIENIA GŁÓWNE
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Główna domena, na której będzie działać Mastodon
PRIMARY_DOMAIN='social.ovh' 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' ADMIN_EMAIL='admin@social.ovh'
TIMEZONE='Europe/Warsaw' TIMEZONE='Europe/Warsaw'
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# USTAWIENIA POWIADOMIEŃ (SMTP) # USTAWIENIA ZAPASOWE (BACKBLAZE B2)
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Włącz, aby aktywować codzienne, szyfrowane kopie zapasowe.
ALERT_SMTP_HOST='mail.social.ovh:587' INSTALL_BACKUP=true
ALERT_SMTP_USER='alerts@social.ovh' B2_ACCOUNT_ID=''
ALERT_SMTP_PASS='' B2_ACCOUNT_KEY=''
ALERT_SMTP_FROM='alerts@social.ovh' B2_REPOSITORY='' # np. b2:twoja-unikalna-nazwa-bucket
RESTIC_PASSWORD='' # Hasło do szyfrowania kopii zapasowych
# -------------------------------------------------------------------
# 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=''
BACKUP_CRON_SCHEDULE='30 3 * * *' BACKUP_CRON_SCHEDULE='30 3 * * *'
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# WERSJE OBRAZÓW DOCKER # KONFIGURACJA USŁUG
# ------------------------------------------------------------------- # -------------------------------------------------------------------
TRAEFIK_VER='v3.0' # --- Mastodon ---
PROMETHEUS_VER='latest' MASTODON_DOMAIN="${PRIMARY_DOMAIN}"
GRAFANA_VER='latest'
# ... (pozostałe wersje) # --- 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)

View file

@ -267,8 +267,33 @@ cmd_interactive_setup() {
cmd_backup() { cmd_backup() {
local action="$1"; shift local action="$1"; shift
log info "Zarządzanie kopiami zapasowymi: Akcja='$action'" 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) # ... (reszta funkcji)

View file

@ -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: {}