vytvořen repozitář a přidány skripty

This commit is contained in:
2026-03-07 08:01:52 +01:00
commit 444b3eb9b3
7 changed files with 366 additions and 0 deletions

151
README.md Normal file
View File

@@ -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.

75
config/config.yaml Normal file
View File

@@ -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

15
docker-compose.yml Normal file
View File

@@ -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"

34
nginx/gotosocial.conf Normal file
View File

@@ -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;
}
}

31
scripts/backup.sh Normal file
View File

@@ -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."

42
scripts/install.sh Normal file
View File

@@ -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"

18
scripts/update.sh Normal file
View File

@@ -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