fix: bootstrap NOPASSWD+ssh, docker-compose placeholders, install.sh order
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
# bootstrap.sh – první nastavení čistého VPS
|
# bootstrap.sh – první nastavení čistého VPS
|
||||||
# Spusťte jako root: bash bootstrap.sh
|
# Spusťte jako root: bash bootstrap.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
export TERM=xterm-256color
|
||||||
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
echo "CHYBA: Spusťte jako root (sudo bash bootstrap.sh)." >&2
|
echo "CHYBA: Spusťte jako root (sudo bash bootstrap.sh)." >&2
|
||||||
@@ -34,6 +35,9 @@ else
|
|||||||
usermod -aG sudo "$TARGET_USER"
|
usermod -aG sudo "$TARGET_USER"
|
||||||
# Zamknutí hesla – přihlášení pouze přes SSH klíč
|
# Zamknutí hesla – přihlášení pouze přes SSH klíč
|
||||||
passwd -l "$TARGET_USER"
|
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."
|
echo " Uživatel vytvořen."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
version: "3.8"
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
gotosocial:
|
gotosocial:
|
||||||
image: superseriousbusiness/gotosocial:latest
|
image: superseriousbusiness/gotosocial:latest
|
||||||
container_name: gotosocial
|
container_name: gotosocial
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
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
|
- GTS_TRUSTED_PROXIES=127.0.0.1/32,172.18.0.1/16
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8080:8080"
|
- "127.0.0.1:8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/gotosocial/storage
|
- ./data:/gotosocial/storage
|
||||||
- ./config/config.yaml:/gotosocial/config.yaml
|
|
||||||
user: "1000:1000"
|
user: "1000:1000"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
export TERM=xterm-256color
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
@@ -10,19 +11,9 @@ echo ""
|
|||||||
# === Interaktivní vstup ===
|
# === Interaktivní vstup ===
|
||||||
read -rp "Doména serveru (např. social.example.cz): " GTS_DOMAIN
|
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 "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
|
if [ -z "$GTS_DOMAIN" ]; then
|
||||||
echo "CHYBA: Doména, admin uživatel, e-mail a heslo jsou povinné." >&2
|
echo "CHYBA: Doména je povinná." >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -76,33 +67,22 @@ if ! command -v certbot &>/dev/null; then
|
|||||||
_install_certbot
|
_install_certbot
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === Konfigurace souborů ===
|
# === Konfigurace nginx HTTP ===
|
||||||
|
|
||||||
CONFIG_FILE="$ROOT_DIR/config/config.yaml"
|
|
||||||
NGINX_CONF="$ROOT_DIR/nginx/gotosocial.conf"
|
NGINX_CONF="$ROOT_DIR/nginx/gotosocial.conf"
|
||||||
NGINX_CONF_ZKREML="$ROOT_DIR/nginx/zkreml.cz.conf"
|
NGINX_CONF_ZKREML="$ROOT_DIR/nginx/zkreml.cz.conf"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "==> Nastavení konfigurace..."
|
echo "==> Nastavení nginx konfigurace..."
|
||||||
|
|
||||||
# Záloha originálů pro idempotentní opakované spuštění
|
# 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"
|
[ -f "${NGINX_CONF_ZKREML}.orig" ] || cp "$NGINX_CONF_ZKREML" "${NGINX_CONF_ZKREML}.orig"
|
||||||
|
|
||||||
# Vždy pracuj z originálu
|
# Vždy pracuj z originálu
|
||||||
cp "${CONFIG_FILE}.orig" "$CONFIG_FILE"
|
|
||||||
cp "${NGINX_CONF}.orig" "$NGINX_CONF"
|
cp "${NGINX_CONF}.orig" "$NGINX_CONF"
|
||||||
cp "${NGINX_CONF_ZKREML}.orig" "$NGINX_CONF_ZKREML"
|
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
|
# nginx gotosocial.conf – dosaď GTS_HOST
|
||||||
sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF"
|
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"
|
sed -i "s|GTS_HOST|${GTS_DOMAIN}|g" "$NGINX_CONF_ZKREML"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === Nasazení nginx konfigurací ===
|
# === Nasazení nginx HTTP konfigurace ===
|
||||||
echo "==> Nasazení Nginx konfigurace..."
|
echo "==> Nasazení nginx HTTP konfigurace..."
|
||||||
cp "$NGINX_CONF" /etc/nginx/sites-available/gotosocial
|
cp "$NGINX_CONF" /etc/nginx/sites-available/gotosocial
|
||||||
ln -sf /etc/nginx/sites-available/gotosocial /etc/nginx/sites-enabled/gotosocial
|
ln -sf /etc/nginx/sites-available/gotosocial /etc/nginx/sites-enabled/gotosocial
|
||||||
|
|
||||||
@@ -126,31 +106,6 @@ fi
|
|||||||
nginx -t
|
nginx -t
|
||||||
systemctl reload nginx
|
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 ===
|
# === SSL certifikáty ===
|
||||||
echo ""
|
echo ""
|
||||||
echo "==> Získání SSL certifikátu pro ${GTS_DOMAIN}..."
|
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"
|
certbot --nginx -d "$GTS_ACCOUNT_DOMAIN"
|
||||||
fi
|
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 ===
|
# === Hotovo ===
|
||||||
echo ""
|
echo ""
|
||||||
echo "==> Instalace dokončena!"
|
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}"
|
echo " Účty budou mít formát @uživatel@${GTS_ACCOUNT_DOMAIN}"
|
||||||
fi
|
fi
|
||||||
echo ""
|
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 "NEZAPOMENOUT nastavit DNS záznamy:"
|
||||||
echo " ${GTS_DOMAIN} -> IP tohoto serveru"
|
echo " ${GTS_DOMAIN} -> IP tohoto serveru"
|
||||||
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
|
if [ "$SEPARATE_ACCOUNT_DOMAIN" = true ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user