Files
gotosocial-vps/scripts/install.sh

168 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
export TERM=xterm-256color
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
echo "==> GoToSocial interaktivní instalace"
echo ""
# === Interaktivní vstup ===
read -rp "Doména serveru (např. social.example.cz): " GTS_DOMAIN
read -rp "Account-domain (např. example.cz; Enter = shodná s doménou serveru): " GTS_ACCOUNT_DOMAIN
if [ -z "$GTS_DOMAIN" ]; then
echo "CHYBA: Doména je povinná." >&2
exit 1
fi
SEPARATE_ACCOUNT_DOMAIN=false
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 nginx HTTP ===
NGINX_CONF="$ROOT_DIR/nginx/gotosocial.conf"
NGINX_CONF_ZKREML="$ROOT_DIR/nginx/zkreml.cz.conf"
echo ""
echo "==> Nastavení nginx konfigurace..."
# Záloha originálů pro idempotentní opakované spuštění
[ -f "${NGINX_CONF}.orig" ] || cp "$NGINX_CONF" "${NGINX_CONF}.orig"
[ -f "${NGINX_CONF_ZKREML}.orig" ] || cp "$NGINX_CONF_ZKREML" "${NGINX_CONF_ZKREML}.orig"
# Vždy pracuj z originálu
cp "${NGINX_CONF}.orig" "$NGINX_CONF"
cp "${NGINX_CONF_ZKREML}.orig" "$NGINX_CONF_ZKREML"
# nginx gotosocial.conf dosaď GTS_HOST
sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF"
# nginx zkreml.cz.conf dosaď ACCOUNT_DOMAIN a GTS_HOST
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
sed -i "s|ACCOUNT_DOMAIN|${GTS_ACCOUNT_DOMAIN}|g" "$NGINX_CONF_ZKREML"
sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF_ZKREML"
fi
# === Nasazení nginx HTTP konfigurace ===
echo "==> Nasazení nginx HTTP konfigurace..."
cp "$NGINX_CONF" /etc/nginx/sites-available/gotosocial
ln -sf /etc/nginx/sites-available/gotosocial /etc/nginx/sites-enabled/gotosocial
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
cp "$NGINX_CONF_ZKREML" "/etc/nginx/sites-available/${GTS_ACCOUNT_DOMAIN}"
ln -sf "/etc/nginx/sites-available/${GTS_ACCOUNT_DOMAIN}" \
"/etc/nginx/sites-enabled/${GTS_ACCOUNT_DOMAIN}"
fi
nginx -t
systemctl reload nginx
# === SSL certifikáty ===
echo ""
echo "==> Získání SSL certifikátu pro ${GTS_DOMAIN}..."
certbot --nginx -d "$GTS_DOMAIN"
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
echo "==> Získání SSL certifikátu pro ${GTS_ACCOUNT_DOMAIN}..."
certbot --nginx -d "$GTS_ACCOUNT_DOMAIN"
fi
# === Konfigurace docker-compose.yml ===
echo "==> Konfigurace docker-compose.yml..."
DC_FILE="$ROOT_DIR/docker-compose.yml"
[ -f "${DC_FILE}.orig" ] || cp "$DC_FILE" "${DC_FILE}.orig"
cp "${DC_FILE}.orig" "$DC_FILE"
sed -i "s|GTS_HOST_PLACEHOLDER|${GTS_DOMAIN}|g" "$DC_FILE"
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
sed -i "s|ACCOUNT_DOMAIN_PLACEHOLDER|${GTS_ACCOUNT_DOMAIN}|g" "$DC_FILE"
else
sed -i "s|ACCOUNT_DOMAIN_PLACEHOLDER|${GTS_DOMAIN}|g" "$DC_FILE"
fi
# === Spuštění kontejneru ===
mkdir -p "$ROOT_DIR/data"
echo "==> Spouštění kontejneru..."
cd "$ROOT_DIR"
$DC pull
$DC up -d
echo "==> Čekání na start GoToSocial (15 s)..."
sleep 15
echo "==> Stav kontejneru:"
$DC ps
# === Hotovo ===
echo ""
echo "==> Instalace dokončena!"
echo ""
echo " GoToSocial: https://${GTS_DOMAIN}"
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
echo " Hlavní doména: https://${GTS_ACCOUNT_DOMAIN}"
echo " Účty budou mít formát @uživatel@${GTS_ACCOUNT_DOMAIN}"
fi
echo ""
echo "Pro vytvoření admin účtu spusťte:"
echo " cd ${ROOT_DIR}"
echo " $DC exec gotosocial /gotosocial/gotosocial admin account create \\"
echo " --username <uživatel> --email <email> --password <heslo>"
echo " $DC exec gotosocial /gotosocial/gotosocial admin account promote \\"
echo " --username <uživatel>"
echo ""
echo "NEZAPOMENOUT nastavit DNS záznamy:"
echo " ${GTS_DOMAIN} -> IP tohoto serveru"
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
echo " ${GTS_ACCOUNT_DOMAIN} -> IP tohoto serveru"
fi