From 444b3eb9b3ea16d35e7ac6fde06bc2cb10f3002b Mon Sep 17 00:00:00 2001 From: Archos Date: Sat, 7 Mar 2026 08:01:52 +0100 Subject: [PATCH] =?UTF-8?q?vytvo=C5=99en=20repozit=C3=A1=C5=99=20a=20p?= =?UTF-8?q?=C5=99id=C3=A1ny=20skripty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 151 ++++++++++++++++++++++++++++++++++++++++++ config/config.yaml | 75 +++++++++++++++++++++ docker-compose.yml | 15 +++++ nginx/gotosocial.conf | 34 ++++++++++ scripts/backup.sh | 31 +++++++++ scripts/install.sh | 42 ++++++++++++ scripts/update.sh | 18 +++++ 7 files changed, 366 insertions(+) create mode 100644 README.md create mode 100644 config/config.yaml create mode 100644 docker-compose.yml create mode 100644 nginx/gotosocial.conf create mode 100644 scripts/backup.sh create mode 100644 scripts/install.sh create mode 100644 scripts/update.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..422f30a --- /dev/null +++ b/README.md @@ -0,0 +1,151 @@ +# GoToSocial VPS – Instalační příručka + +Tento repozitář obsahuje konfigurační soubory a skripty pro nasazení instance [GoToSocial](https://gotosocial.org/) na VPS pomocí Dockeru a reverzního proxy Nginx. + +## Obsah + +- [Požadavky](#požadavky) +- [Struktura repozitáře](#struktura-repozitáře) +- [Instalace](#instalace) +- [Konfigurace](#konfigurace) +- [Nginx](#nginx) +- [Správa instance](#správa-instance) +- [Zálohy](#zálohy) + +--- + +## Požadavky + +- VPS s Ubuntu 22.04 / Debian 12 +- Docker a Docker Compose +- Doménové jméno s nastaveným DNS A záznamem na IP VPS +- Nginx +- Certbot (Let's Encrypt) + +## Struktura repozitáře + +``` +gotosocial-vps/ +├── docker-compose.yml # Docker Compose konfigurace +├── .env.example # Vzor proměnných prostředí +├── config/ +│ └── config.yaml # Konfigurační soubor GoToSocial +├── nginx/ +│ └── gotosocial.conf # Nginx konfigurace (reverzní proxy) +└── scripts/ + ├── install.sh # Skript pro první instalaci + ├── update.sh # Aktualizace GoToSocial + └── backup.sh # Záloha dat +``` + +## Instalace + +### 1. Příprava serveru + +```bash +sudo apt update && sudo apt upgrade -y +sudo apt install -y docker.io docker-compose nginx certbot python3-certbot-nginx +sudo systemctl enable --now docker +``` + +### 2. Klonování repozitáře + +```bash +git clone ssh://git@git.arch-linux.cz:29418/Archos/gotosocial-vps.git +cd gotosocial-vps +``` + +### 3. Nastavení proměnných prostředí + +```bash +cp .env.example .env +nano .env +``` + +Vyplňte hodnoty – zejména `GTS_HOST` (vaše doména) a `GTS_DB_PASSWORD`. + +### 4. Spuštění + +```bash +chmod +x scripts/install.sh +./scripts/install.sh +``` + +Nebo ručně: + +```bash +mkdir -p data +docker-compose up -d +``` + +### 5. SSL certifikát + +```bash +sudo certbot --nginx -d vase-domena.cz +``` + +### 6. Nginx konfigurace + +```bash +sudo cp nginx/gotosocial.conf /etc/nginx/sites-available/gotosocial +sudo ln -s /etc/nginx/sites-available/gotosocial /etc/nginx/sites-enabled/ +sudo nginx -t && sudo systemctl reload nginx +``` + +## Konfigurace + +Hlavní konfigurace se nachází v `config/config.yaml`. Nejdůležitější položky: + +| Položka | Popis | +|---|---| +| `host` | Vaše doména (např. `social.example.cz`) | +| `protocol` | `https` pro produkci | +| `db-address` | Cesta k SQLite nebo adresa Postgres | +| `storage-local-base-path` | Adresář pro ukládání médií | +| `smtp-*` | Nastavení e-mailu pro notifikace | + +## Nginx + +Soubor `nginx/gotosocial.conf` je šablona pro reverzní proxy. Před použitím upravte: +- `server_name` – nahraďte `vase-domena.cz` vaší doménou +- Cesty k SSL certifikátům (vyplní Certbot automaticky) + +## Správa instance + +```bash +# Vytvoření admin účtu +docker-compose exec gotosocial /gotosocial/gotosocial admin account create \ + --username admin \ + --email admin@vase-domena.cz \ + --password "silne_heslo" + +# Přiřazení admin role +docker-compose exec gotosocial /gotosocial/gotosocial admin account promote \ + --username admin + +# Zobrazení logů +docker-compose logs -f gotosocial + +# Restart +docker-compose restart gotosocial +``` + +## Zálohy + +Zálohovací skript uloží data a konfiguraci do archivu: + +```bash +chmod +x scripts/backup.sh +./scripts/backup.sh +``` + +Zálohy jsou ukládány do adresáře `backups/` ve formátu `gotosocial-backup-YYYY-MM-DD.tar.gz`. + +## Aktualizace + +```bash +chmod +x scripts/update.sh +./scripts/update.sh +``` + +Skript stáhne nejnovější obraz GoToSocial a restartuje kontejner. diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..5c96340 --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,75 @@ +################################ +# GoToSocial – konfigurační soubor +# Dokumentace: https://docs.gotosocial.org/en/latest/configuration/ +################################ + +# Vaše doména +host: "social.vase-domena.cz" + +# Pokud chcete oddělit doménu účtů od domény serveru +# Např. účty @user@vase-domena.cz, ale server běží na social.vase-domena.cz +# account-domain: "vase-domena.cz" + +protocol: "https" +bind-address: "0.0.0.0" +port: 8080 +trusted-proxies: + - "127.0.0.1/32" + - "::1" + +# Databáze +db-type: "sqlite" +db-address: "/gotosocial/storage/sqlite.db" +db-sqlite-journal-mode: "WAL" +db-sqlite-synchronous: "NORMAL" +db-sqlite-cache-size: "8MiB" +db-sqlite-busy-timeout: "30s" + +# Úložiště médií +storage-backend: "local" +storage-local-base-path: "/gotosocial/storage" + +# Web rozhraní +web-template-base-dir: "/gotosocial/web/template/" +web-asset-base-dir: "/gotosocial/web/assets/" + +# Instance +instance-expose-peers: false +instance-expose-suspended: false +instance-expose-suspended-web: false +instance-deliver-to-shared-inboxes: true + +# Účty +accounts-registration-open: false +accounts-approval-required: true +accounts-reason-required: true +accounts-allow-custom-css: false + +# Média +media-image-max-size: 10485760 # 10 MiB +media-video-max-size: 41943040 # 40 MiB +media-description-min-chars: 0 +media-description-max-chars: 500 +media-remote-cache-days: 30 + +# Emojis +media-emoji-local-max-size: 51200 # 50 KiB +media-emoji-remote-max-size: 102400 # 100 KiB + +# Logy +log-level: "info" +log-db-queries: false + +# SMTP (e-mail) – volitelné +# smtp-host: "" +# smtp-port: 587 +# smtp-username: "" +# smtp-password: "" +# smtp-from: "noreply@vase-domena.cz" + +# OIDc (volitelné – přihlašování přes externí poskytovatele) +# oidc-enabled: false + +# CORS +advanced-cookies-samesite: "lax" +advanced-rate-limit-requests: 300 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8f8c9a5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.8" + +services: + gotosocial: + image: superseriousbusiness/gotosocial:latest + container_name: gotosocial + restart: unless-stopped + env_file: + - .env + ports: + - "127.0.0.1:8080:8080" + volumes: + - ./data:/gotosocial/storage + - ./config/config.yaml:/gotosocial/config.yaml + user: "1000:1000" diff --git a/nginx/gotosocial.conf b/nginx/gotosocial.conf new file mode 100644 index 0000000..b4377e3 --- /dev/null +++ b/nginx/gotosocial.conf @@ -0,0 +1,34 @@ +server { + listen 80; + listen [::]:80; + server_name vase-domena.cz; + + # Certbot automaticky přidá přesměrování na HTTPS +} + +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name vase-domena.cz; + + # SSL – Certbot doplní automaticky + # ssl_certificate /etc/letsencrypt/live/vase-domena.cz/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/vase-domena.cz/privkey.pem; + + client_max_body_size 40M; + + location / { + proxy_pass http://127.0.0.1:8080; + proxy_http_version 1.1; + + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_read_timeout 90s; + proxy_connect_timeout 90s; + proxy_send_timeout 90s; + } +} diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100644 index 0000000..8cf0ae2 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" +BACKUP_DIR="$ROOT_DIR/backups" +DATE=$(date +%Y-%m-%d) +BACKUP_FILE="$BACKUP_DIR/gotosocial-backup-$DATE.tar.gz" + +echo "==> GoToSocial – záloha" + +mkdir -p "$BACKUP_DIR" + +echo "==> Zastavuji kontejner pro konzistentní zálohu..." +cd "$ROOT_DIR" +docker-compose stop gotosocial + +echo "==> Vytvářím zálohu: $BACKUP_FILE" +tar -czf "$BACKUP_FILE" \ + --exclude='./backups' \ + -C "$ROOT_DIR" \ + data/ config/ .env 2>/dev/null || true + +echo "==> Spouštím kontejner..." +docker-compose start gotosocial + +echo "==> Záloha uložena: $BACKUP_FILE ($(du -sh "$BACKUP_FILE" | cut -f1))" + +# Smazání záloh starších než 30 dní +find "$BACKUP_DIR" -name "gotosocial-backup-*.tar.gz" -mtime +30 -delete +echo "==> Staré zálohy (>30 dní) odstraněny." diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100644 index 0000000..c90dd8d --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +echo "==> GoToSocial – instalace" + +# Kontrola závislostí +for cmd in docker docker-compose; do + if ! command -v "$cmd" &>/dev/null; then + echo "CHYBA: '$cmd' není nainstalován." >&2 + exit 1 + fi +done + +# Kontrola .env souboru +if [ ! -f "$ROOT_DIR/.env" ]; then + echo "CHYBA: Soubor .env neexistuje. Zkopírujte .env.example a vyplňte hodnoty." + echo " cp .env.example .env && nano .env" + exit 1 +fi + +# Vytvoření datového adresáře +mkdir -p "$ROOT_DIR/data" + +echo "==> Spouštění kontejneru..." +cd "$ROOT_DIR" +docker-compose pull +docker-compose up -d + +echo "" +echo "GoToSocial je spuštěn na http://127.0.0.1:8080" +echo "" +echo "Dalsi kroky:" +echo " 1. Nakonfigurujte Nginx: sudo cp nginx/gotosocial.conf /etc/nginx/sites-available/gotosocial" +echo " 2. Ziskejte SSL certifikat: sudo certbot --nginx -d vase-domena.cz" +echo " 3. Vytvořte admin účet:" +echo " docker-compose exec gotosocial /gotosocial/gotosocial admin account create \\" +echo " --username admin --email admin@vase-domena.cz --password 'silne_heslo'" +echo " docker-compose exec gotosocial /gotosocial/gotosocial admin account promote \\" +echo " --username admin" diff --git a/scripts/update.sh b/scripts/update.sh new file mode 100644 index 0000000..fbdea62 --- /dev/null +++ b/scripts/update.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +echo "==> GoToSocial – aktualizace" + +cd "$ROOT_DIR" + +echo "==> Stahuji nejnovější obraz..." +docker-compose pull + +echo "==> Restartuji kontejner..." +docker-compose up -d --force-recreate + +echo "==> Aktualizace dokončena." +docker-compose ps