diff --git a/bootstrap.sh b/bootstrap.sh index b40616a..6e56fb6 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -2,6 +2,7 @@ # bootstrap.sh – první nastavení čistého VPS # Spusťte jako root: bash bootstrap.sh set -euo pipefail +export TERM=xterm-256color if [ "$EUID" -ne 0 ]; then echo "CHYBA: Spusťte jako root (sudo bash bootstrap.sh)." >&2 @@ -34,6 +35,9 @@ else usermod -aG sudo "$TARGET_USER" # Zamknutí hesla – přihlášení pouze přes SSH klíč passwd -l "$TARGET_USER" + # NOPASSWD sudo + echo "${TARGET_USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/"${TARGET_USER}" + chmod 440 /etc/sudoers.d/"${TARGET_USER}" echo " Uživatel vytvořen." fi diff --git a/docker-compose.yml b/docker-compose.yml index 3888b3c..50a2281 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,14 @@ -version: "3.8" - services: gotosocial: image: superseriousbusiness/gotosocial:latest container_name: gotosocial restart: unless-stopped - env_file: - - .env environment: + - GTS_HOST=GTS_HOST_PLACEHOLDER + - GTS_ACCOUNT_DOMAIN=ACCOUNT_DOMAIN_PLACEHOLDER - GTS_TRUSTED_PROXIES=127.0.0.1/32,172.18.0.1/16 ports: - "127.0.0.1:8080:8080" volumes: - ./data:/gotosocial/storage - - ./config/config.yaml:/gotosocial/config.yaml user: "1000:1000" diff --git a/scripts/install.sh b/scripts/install.sh index 91a435d..d35266c 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +export TERM=xterm-256color set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -10,19 +11,9 @@ 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 -read -rp "Admin uživatelské jméno: " ADMIN_USER -read -rp "Admin e-mail: " ADMIN_EMAIL -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 -if [ -z "$GTS_DOMAIN" ] || [ -z "$ADMIN_USER" ] || [ -z "$ADMIN_EMAIL" ] || [ -z "$ADMIN_PASS" ]; then - echo "CHYBA: Doména, admin uživatel, e-mail a heslo jsou povinné." >&2 +if [ -z "$GTS_DOMAIN" ]; then + echo "CHYBA: Doména je povinná." >&2 exit 1 fi @@ -76,33 +67,22 @@ if ! command -v certbot &>/dev/null; then _install_certbot fi -# === Konfigurace souborů === +# === Konfigurace nginx HTTP === -CONFIG_FILE="$ROOT_DIR/config/config.yaml" NGINX_CONF="$ROOT_DIR/nginx/gotosocial.conf" NGINX_CONF_ZKREML="$ROOT_DIR/nginx/zkreml.cz.conf" echo "" -echo "==> Nastavení konfigurace..." +echo "==> Nastavení nginx 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" +[ -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 "${CONFIG_FILE}.orig" "$CONFIG_FILE" cp "${NGINX_CONF}.orig" "$NGINX_CONF" cp "${NGINX_CONF_ZKREML}.orig" "$NGINX_CONF_ZKREML" -# 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 gotosocial.conf – dosaď GTS_HOST sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF" @@ -112,8 +92,8 @@ if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF_ZKREML" fi -# === Nasazení nginx konfigurací === -echo "==> Nasazení Nginx konfigurace..." +# === 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 @@ -126,31 +106,6 @@ fi 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..." -cd "$ROOT_DIR" -$DC pull -$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áty === echo "" echo "==> Získání SSL certifikátu pro ${GTS_DOMAIN}..." @@ -161,6 +116,33 @@ if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then 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!" @@ -171,6 +153,13 @@ if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then 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 --email --password " +echo " $DC exec gotosocial /gotosocial/gotosocial admin account promote \\" +echo " --username " +echo "" echo "NEZAPOMENOUT nastavit DNS záznamy:" echo " ${GTS_DOMAIN} -> IP tohoto serveru" if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then