add bootstrap.sh, .env.example, rewrite install.sh
This commit is contained in:
20
.env.example
Normal file
20
.env.example
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# GoToSocial – prostředí pro Docker
|
||||||
|
# Zkopírujte tento soubor do .env před spuštěním install.sh
|
||||||
|
#
|
||||||
|
# Konfigurace serveru je primárně v config/config.yaml.
|
||||||
|
# Zde můžete přepsat libovolnou hodnotu pomocí proměnných GTS_*
|
||||||
|
# Viz: https://docs.gotosocial.org/en/latest/configuration/
|
||||||
|
|
||||||
|
# Příklady přepsání config.yaml přes env (odkomentujte dle potřeby):
|
||||||
|
|
||||||
|
# GTS_HOST="social.example.cz"
|
||||||
|
# GTS_ACCOUNT_DOMAIN="example.cz"
|
||||||
|
# GTS_DB_TYPE="sqlite"
|
||||||
|
# GTS_DB_ADDRESS="/gotosocial/storage/sqlite.db"
|
||||||
|
|
||||||
|
# SMTP – volitelné (odeslání e-mailů)
|
||||||
|
# GTS_SMTP_HOST=""
|
||||||
|
# GTS_SMTP_PORT="587"
|
||||||
|
# GTS_SMTP_USERNAME=""
|
||||||
|
# GTS_SMTP_PASSWORD=""
|
||||||
|
# GTS_SMTP_FROM="noreply@example.cz"
|
||||||
86
bootstrap.sh
Executable file
86
bootstrap.sh
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# bootstrap.sh – první nastavení čistého VPS
|
||||||
|
# Spusťte jako root: bash bootstrap.sh
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "CHYBA: Spusťte jako root (sudo bash bootstrap.sh)." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TARGET_USER="archos"
|
||||||
|
|
||||||
|
echo "==> Bootstrap VPS pro GoToSocial"
|
||||||
|
echo " Bude vytvořen uživatel: ${TARGET_USER}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
SSH_PUBKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE0de1Ry3HwDjTYbgTlgM+iF4F5CbBwqYMTXnTGLP0ff archos@arch-linux"
|
||||||
|
|
||||||
|
# === Aktualizace systému ===
|
||||||
|
echo "==> Aktualizace systému..."
|
||||||
|
apt-get update -q
|
||||||
|
apt-get upgrade -y
|
||||||
|
|
||||||
|
# === Instalace základních balíků ===
|
||||||
|
apt-get install -y ufw curl git
|
||||||
|
|
||||||
|
# === Vytvoření uživatele ===
|
||||||
|
if id "$TARGET_USER" &>/dev/null; then
|
||||||
|
echo "==> Uživatel ${TARGET_USER} již existuje, přeskakuji."
|
||||||
|
else
|
||||||
|
echo "==> Vytváření uživatele ${TARGET_USER}..."
|
||||||
|
useradd -m -s /bin/bash "$TARGET_USER"
|
||||||
|
# Přidání do skupiny sudo
|
||||||
|
usermod -aG sudo "$TARGET_USER"
|
||||||
|
# Zamknutí hesla – přihlášení pouze přes SSH klíč
|
||||||
|
passwd -l "$TARGET_USER"
|
||||||
|
echo " Uživatel vytvořen."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# === SSH klíč ===
|
||||||
|
echo "==> Nastavení SSH klíče..."
|
||||||
|
SSH_DIR="/home/${TARGET_USER}/.ssh"
|
||||||
|
mkdir -p "$SSH_DIR"
|
||||||
|
|
||||||
|
# Přidej klíč jen pokud tam ještě není
|
||||||
|
if ! grep -qF "$SSH_PUBKEY" "${SSH_DIR}/authorized_keys" 2>/dev/null; then
|
||||||
|
echo "$SSH_PUBKEY" >> "${SSH_DIR}/authorized_keys"
|
||||||
|
echo " Klíč přidán."
|
||||||
|
else
|
||||||
|
echo " Klíč již existuje, přeskakuji."
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 700 "$SSH_DIR"
|
||||||
|
chmod 600 "${SSH_DIR}/authorized_keys"
|
||||||
|
chown -R "${TARGET_USER}:${TARGET_USER}" "$SSH_DIR"
|
||||||
|
|
||||||
|
# === Zpevnění SSH démon konfigurace ===
|
||||||
|
echo "==> Zpevnění SSH konfigurace..."
|
||||||
|
SSHD_CONF="/etc/ssh/sshd_config"
|
||||||
|
# Zakaz přihlášení roota heslem
|
||||||
|
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' "$SSHD_CONF"
|
||||||
|
# Zakaz PasswordAuthentication (pouze klíče)
|
||||||
|
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONF"
|
||||||
|
systemctl reload sshd
|
||||||
|
|
||||||
|
# === UFW firewall ===
|
||||||
|
echo "==> Konfigurace UFW firewallu..."
|
||||||
|
ufw --force reset
|
||||||
|
ufw default deny incoming
|
||||||
|
ufw default allow outgoing
|
||||||
|
ufw allow 22/tcp comment "SSH"
|
||||||
|
ufw allow 80/tcp comment "HTTP"
|
||||||
|
ufw allow 443/tcp comment "HTTPS"
|
||||||
|
ufw --force enable
|
||||||
|
ufw status verbose
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> Bootstrap dokončen!"
|
||||||
|
echo ""
|
||||||
|
echo "Další kroky:"
|
||||||
|
echo " 1. Přihlaste se jako ${TARGET_USER}:"
|
||||||
|
echo " ssh ${TARGET_USER}@<IP-serveru>"
|
||||||
|
echo " 2. Naklonujte repozitář:"
|
||||||
|
echo " git clone <repo-url> ~/gotosocial-vps"
|
||||||
|
echo " 3. Spusťte instalaci (jako root nebo přes sudo):"
|
||||||
|
echo " cd ~/gotosocial-vps && sudo bash scripts/install.sh"
|
||||||
157
scripts/install.sh
Normal file → Executable file
157
scripts/install.sh
Normal file → Executable file
@@ -4,39 +4,146 @@ set -euo pipefail
|
|||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||||
|
|
||||||
echo "==> GoToSocial – instalace"
|
echo "==> GoToSocial – interaktivní instalace"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# Kontrola závislostí
|
# === Interaktivní vstup ===
|
||||||
for cmd in docker docker-compose; do
|
read -rp "Doména serveru (např. social.example.cz): " GTS_DOMAIN
|
||||||
if ! command -v "$cmd" &>/dev/null; then
|
read -rp "Account-domain (např. example.cz; Enter = shodná s doménou serveru): " GTS_ACCOUNT_DOMAIN
|
||||||
echo "CHYBA: '$cmd' není nainstalován." >&2
|
read -rp "Admin uživatelské jméno: " ADMIN_USER
|
||||||
exit 1
|
read -rp "Admin e-mail: " ADMIN_EMAIL
|
||||||
fi
|
while true; do
|
||||||
|
read -rsp "Admin heslo: " ADMIN_PASS
|
||||||
|
echo ""
|
||||||
|
read -rsp "Admin heslo (znovu): " ADMIN_PASS2
|
||||||
|
echo ""
|
||||||
|
[ "$ADMIN_PASS" = "$ADMIN_PASS2" ] && break
|
||||||
|
echo "Hesla se neshodují, zkuste znovu."
|
||||||
done
|
done
|
||||||
|
|
||||||
# Kontrola .env souboru
|
if [ -z "$GTS_DOMAIN" ] || [ -z "$ADMIN_USER" ] || [ -z "$ADMIN_EMAIL" ] || [ -z "$ADMIN_PASS" ]; then
|
||||||
if [ ! -f "$ROOT_DIR/.env" ]; then
|
echo "CHYBA: Doména, admin uživatel, e-mail a heslo jsou povinné." >&2
|
||||||
echo "CHYBA: Soubor .env neexistuje. Zkopírujte .env.example a vyplňte hodnoty."
|
|
||||||
echo " cp .env.example .env && nano .env"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Vytvoření datového adresáře
|
SEPARATE_ACCOUNT_DOMAIN=false
|
||||||
mkdir -p "$ROOT_DIR/data"
|
if [ -n "$GTS_ACCOUNT_DOMAIN" ] && [ "$GTS_ACCOUNT_DOMAIN" != "$GTS_DOMAIN" ]; then
|
||||||
|
SEPARATE_ACCOUNT_DOMAIN=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# === Instalace závislostí ===
|
||||||
|
|
||||||
|
_install_docker() {
|
||||||
|
echo "==> Instalace Dockeru..."
|
||||||
|
apt-get update -q
|
||||||
|
apt-get install -y ca-certificates curl gnupg lsb-release
|
||||||
|
curl -fsSL https://get.docker.com | sh
|
||||||
|
systemctl enable --now docker
|
||||||
|
}
|
||||||
|
|
||||||
|
_install_nginx() {
|
||||||
|
echo "==> Instalace Nginx..."
|
||||||
|
apt-get update -q
|
||||||
|
apt-get install -y nginx
|
||||||
|
systemctl enable --now nginx
|
||||||
|
}
|
||||||
|
|
||||||
|
_install_certbot() {
|
||||||
|
echo "==> Instalace Certbot..."
|
||||||
|
apt-get install -y certbot python3-certbot-nginx
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! command -v docker &>/dev/null; then
|
||||||
|
_install_docker
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Detekce příkazu docker compose (plugin) nebo docker-compose (standalone)
|
||||||
|
if docker compose version &>/dev/null 2>&1; then
|
||||||
|
DC="docker compose"
|
||||||
|
elif command -v docker-compose &>/dev/null; then
|
||||||
|
DC="docker-compose"
|
||||||
|
else
|
||||||
|
echo "==> Instalace docker-compose-plugin..."
|
||||||
|
apt-get install -y docker-compose-plugin
|
||||||
|
DC="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v nginx &>/dev/null; then
|
||||||
|
_install_nginx
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v certbot &>/dev/null; then
|
||||||
|
_install_certbot
|
||||||
|
fi
|
||||||
|
|
||||||
|
# === Konfigurace souborů ===
|
||||||
|
|
||||||
|
CONFIG_FILE="$ROOT_DIR/config/config.yaml"
|
||||||
|
NGINX_CONF="$ROOT_DIR/nginx/gotosocial.conf"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==> Nastavení konfigurace..."
|
||||||
|
|
||||||
|
# Záloha originálů pro idempotentní opakované spuštění
|
||||||
|
[ -f "${CONFIG_FILE}.orig" ] || cp "$CONFIG_FILE" "${CONFIG_FILE}.orig"
|
||||||
|
[ -f "${NGINX_CONF}.orig" ] || cp "$NGINX_CONF" "${NGINX_CONF}.orig"
|
||||||
|
|
||||||
|
# Vždy pracuj z originálu
|
||||||
|
cp "${CONFIG_FILE}.orig" "$CONFIG_FILE"
|
||||||
|
cp "${NGINX_CONF}.orig" "$NGINX_CONF"
|
||||||
|
|
||||||
|
# config.yaml – host
|
||||||
|
sed -i "s|host: \".*\"|host: \"${GTS_DOMAIN}\"|" "$CONFIG_FILE"
|
||||||
|
|
||||||
|
# config.yaml – account-domain (odkomentuj pouze při odlišné doméně)
|
||||||
|
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
|
||||||
|
sed -i "s|# account-domain: \".*\"|account-domain: \"${GTS_ACCOUNT_DOMAIN}\"|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# nginx – server_name a references na doménu
|
||||||
|
sed -i "s|server_name .*;|server_name ${GTS_DOMAIN};|g" "$NGINX_CONF"
|
||||||
|
sed -i "s|vase-domena\.cz|${GTS_DOMAIN}|g" "$NGINX_CONF"
|
||||||
|
|
||||||
|
# Nasazení nginx konfigurace
|
||||||
|
echo "==> Nasazení Nginx konfigurace..."
|
||||||
|
cp "$NGINX_CONF" /etc/nginx/sites-available/gotosocial
|
||||||
|
ln -sf /etc/nginx/sites-available/gotosocial /etc/nginx/sites-enabled/gotosocial
|
||||||
|
nginx -t
|
||||||
|
systemctl reload nginx
|
||||||
|
|
||||||
|
# .env – vytvoř z example pokud neexistuje
|
||||||
|
if [ ! -f "$ROOT_DIR/.env" ]; then
|
||||||
|
cp "$ROOT_DIR/.env.example" "$ROOT_DIR/.env"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# === Spuštění kontejneru ===
|
||||||
|
mkdir -p "$ROOT_DIR/data"
|
||||||
echo "==> Spouštění kontejneru..."
|
echo "==> Spouštění kontejneru..."
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
docker-compose pull
|
$DC pull
|
||||||
docker-compose up -d
|
$DC up -d
|
||||||
|
|
||||||
|
echo "==> Čekání na start GoToSocial (10 s)..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# === Vytvoření admin účtu ===
|
||||||
|
echo "==> Vytváření admin účtu..."
|
||||||
|
$DC exec gotosocial /gotosocial/gotosocial admin account create \
|
||||||
|
--username "$ADMIN_USER" \
|
||||||
|
--email "$ADMIN_EMAIL" \
|
||||||
|
--password "$ADMIN_PASS"
|
||||||
|
|
||||||
|
$DC exec gotosocial /gotosocial/gotosocial admin account promote \
|
||||||
|
--username "$ADMIN_USER"
|
||||||
|
|
||||||
|
# === SSL certifikát ===
|
||||||
|
echo ""
|
||||||
|
echo "==> Získání SSL certifikátu přes Certbot..."
|
||||||
|
certbot --nginx -d "$GTS_DOMAIN"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "GoToSocial je spuštěn na http://127.0.0.1:8080"
|
echo "==> Instalace dokončena!"
|
||||||
echo ""
|
echo " GoToSocial je dostupný na https://${GTS_DOMAIN}"
|
||||||
echo "Dalsi kroky:"
|
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
|
||||||
echo " 1. Nakonfigurujte Nginx: sudo cp nginx/gotosocial.conf /etc/nginx/sites-available/gotosocial"
|
echo " Účty budou mít formát @uživatel@${GTS_ACCOUNT_DOMAIN}"
|
||||||
echo " 2. Ziskejte SSL certifikat: sudo certbot --nginx -d vase-domena.cz"
|
fi
|
||||||
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"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user