#!/usr/bin/env bash # ============================================================================= # BistroUsky — instalační skript pro LXC kontejner (Debian/Ubuntu) # Spusť jako root: bash install.sh # ============================================================================= set -euo pipefail # ── Barvy pro výstup ────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; } # ── Konfigurace (uprav dle potřeby) ────────────────────────────────────── APP_USER="bistrousky" APP_DIR="/var/www/bistrousky" NODE_VERSION="22" DOMAIN="" # např. shop.bistrousky.cz — nech prázdné pro přeskočení Nginx SSL DB_NAME="bistrousky" DB_USER="bistrousky" DB_PASS="" # bude vygenerováno automaticky, pokud prázdné # ───────────────────────────────────────────────────────────────────────────── [[ $EUID -ne 0 ]] && error "Spusť skript jako root (sudo bash install.sh)" # ── Vygenerovat DB heslo pokud není zadáno ──────────────────────────────── if [[ -z "$DB_PASS" ]]; then DB_PASS=$(openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 32) fi info "=== BistroUsky instalace ===" info "Systém: $(lsb_release -ds 2>/dev/null || cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2)" # ── 1. Systémové balíčky ────────────────────────────────────────────────── info "Aktualizace systému a instalace závislostí..." apt-get update -qq apt-get install -y -qq \ curl wget git build-essential \ nginx certbot python3-certbot-nginx \ postgresql postgresql-contrib \ openssl ufw # ── 2. Node.js ──────────────────────────────────────────────────────────── if ! command -v node &>/dev/null || [[ "$(node -v | cut -d. -f1 | tr -d v)" -lt "$NODE_VERSION" ]]; then info "Instalace Node.js ${NODE_VERSION}..." curl -fsSL "https://deb.nodesource.com/setup_${NODE_VERSION}.x" | bash - apt-get install -y nodejs else info "Node.js $(node -v) již nainstalován." fi # ── 3. PM2 ──────────────────────────────────────────────────────────────── info "Instalace PM2..." npm install -g pm2 --quiet # ── 4. Systémový uživatel ───────────────────────────────────────────────── if ! id "$APP_USER" &>/dev/null; then info "Vytváření uživatele ${APP_USER}..." useradd --system --shell /bin/bash --create-home --home-dir "$APP_DIR" "$APP_USER" else info "Uživatel ${APP_USER} již existuje." fi mkdir -p "$APP_DIR" chown -R "$APP_USER:$APP_USER" "$APP_DIR" # ── 5. PostgreSQL ───────────────────────────────────────────────────────── info "Konfigurace PostgreSQL..." systemctl enable postgresql --quiet systemctl start postgresql sudo -u postgres psql </dev/null || true sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};" 2>/dev/null || true # ── 6. Aplikace ─────────────────────────────────────────────────────────── info "Nastavení aplikace v ${APP_DIR}..." # .env soubor ENV_FILE="${APP_DIR}/.env" if [[ ! -f "$ENV_FILE" ]]; then AUTH_SECRET=$(openssl rand -base64 32) cat > "$ENV_FILE" < "$NGINX_CONF" <