vytvořen repozitář a přidány skripty
This commit is contained in:
151
README.md
Normal file
151
README.md
Normal 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
75
config/config.yaml
Normal 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
15
docker-compose.yml
Normal 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
34
nginx/gotosocial.conf
Normal 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
31
scripts/backup.sh
Normal 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
42
scripts/install.sh
Normal 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
18
scripts/update.sh
Normal 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
|
||||
Reference in New Issue
Block a user