Skip to content
0
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Benvenuti nel Dudes Club Italiano

  1. Benvenuti nel Dudes Club Italiano.
  2. Moderazione
  3. Problema con le immagini risolto.

11

Online

53

Users

512

Topics

6.2k

Posts

Problema con le immagini risolto.

Scheduled Pinned Locked Moved Moderazione
2 Posts 2 Posters 59 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Amiga Unicornundefined Offline
    Amiga Unicornundefined Offline
    Amiga Unicorn
    Dudi
    wrote last edited by amigaunicorn
    #1

    Si trattava, in fondo, di scrivere uno script di avvio per nodebb, che arriva con un container docker che non funziona di suo. (il contrario del concetto di container docker).

    #!/bin/bash
    set -euo pipefail
    
    APP_DIR="/usr/src/app"
    cd "$APP_DIR"
    
    die(){ echo "❌ $*" >&2; exit 1; }
    
    need_tool(){
      command -v "$1" >/dev/null 2>&1 || return 0
      return 1
    }
    
    # ── Tools minimi: se mancano, prova ad installarli (apt o apk), altrimenti abort ──
    MISSING=0
    command -v redis-cli >/dev/null 2>&1 || MISSING=1
    command -v jq        >/dev/null 2>&1 || MISSING=1
    if [[ "$MISSING" -eq 1 ]]; then
      if command -v apt-get >/dev/null 2>&1; then
        apt-get update && apt-get install -y --no-install-recommends redis-tools jq curl procps net-tools && apt-get clean
      elif command -v apk >/dev/null 2>&1; then
        apk add --no-cache redis jq curl procps-net iproute2
      else
        die "redis-cli/jq mancanti e nessun package manager disponibile"
      fi
    fi
    
    # ── Leggi config SENZA default (null⇒vuoto). Se mancano host/port/db, abort ──
    CFG="$APP_DIR/config.json"
    [[ -f "$CFG" ]] || die "$CFG mancante"
    
    json_get(){ jq -r "try $1 catch \"\"" "$CFG" | sed -E 's/^(null|NULL)$//'; }
    
    DB_DRIVER=$(json_get '.database')
    [[ "$DB_DRIVER" == "redis" ]] || die "database='$DB_DRIVER' (serve 'redis')"
    
    REDIS_HOST=$(json_get '.redis.host')
    REDIS_PORT=$(json_get '.redis.port')
    REDIS_DB=$(json_get '.redis.database')
    REDIS_USER=$(json_get '.redis.username')
    REDIS_PASS=$(json_get '.redis.password')
    REDIS_PREFIX=$(json_get '.redis.prefix')
    REDIS_TLS=$(json_get '.redis.tls')
    
    [[ -n "$REDIS_HOST" && -n "$REDIS_PORT" && -n "$REDIS_DB" ]] || die "Redis host/port/database non impostati in config.json"
    
    # ── redis-cli wrapper: passa SOLO ciò che esiste; username senza password ≠ auth ──
    redis_cli(){
      local scheme="redis"; [[ "$REDIS_TLS" == "true" ]] && scheme="rediss"
      if [[ -n "$REDIS_USER" && -n "$REDIS_PASS" ]]; then
        local u_enc p_enc
        u_enc=$(jq -rn --arg s "$REDIS_USER" '$s|@uri')
        p_enc=$(jq -rn --arg s "$REDIS_PASS" '$s|@uri')
        redis-cli -u "${scheme}://${u_enc}:${p_enc}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}" "$@"
      elif [[ -n "$REDIS_PASS" ]]; then
        redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -n "$REDIS_DB" -a "$REDIS_PASS" "$@"
      else
        redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -n "$REDIS_DB" "$@"
      fi
    }
    
    echo "ℹ️ Redis: host='${REDIS_HOST}' port='${REDIS_PORT}' db='${REDIS_DB}' prefix='${REDIS_PREFIX:-}' user=$([[ -n "$REDIS_USER" ]]&&echo set||echo none) pass=$([[ -n "$REDIS_PASS" ]]&&echo set||echo none) tls=$([[ "$REDIS_TLS" == "true" ]]&&echo on||echo off)"
    
    # ── NPM: upgrade + audit PRIMA di usare npm (niente unsafe-perm) ──
    npm config set fund false progress false loglevel=warn || true
    before="$(npm -v || echo n/a)"
    npm install -g npm@latest || echo "⚠️ Upgrade npm fallito, continuo"
    after="$(npm -v || echo n/a)"; echo "ℹ️ npm: $before → $after"
    npm audit --omit=dev || true
    npm audit fix --omit=dev --force || true
    
    # ── Build check ──
    NEED_BUILD=0
    [[ -f "$APP_DIR/build/manifest.json" && -f "$APP_DIR/build/public/src/client.js" ]] || NEED_BUILD=1
    
    # ── Scopriamo la chiave plugins:active: prefix→nodebb:→none + SCAN fallback ──
    discover_plugins_key(){
      local try=()
      [[ -n "$REDIS_PREFIX" ]] && try+=("${REDIS_PREFIX}:plugins:active")
      try+=("nodebb:plugins:active" "plugins:active")
      local k t
      for k in "${try[@]}"; do
        t="$(redis_cli TYPE "$k" 2>/dev/null || true)"
        [[ "$t" == "set" || "$t" == "zset" ]] && { echo "$k"; return 0; }
      done
      local hit
      hit="$(redis_cli --raw SCAN 0 MATCH '*:plugins:active' COUNT 200 2>/dev/null | awk '/:plugins:active$/ {print; exit}')"
      [[ -n "$hit" ]] && { echo "$hit"; return 0; }
      echo ""; return 1
    }
    PLUG_KEY="$(discover_plugins_key || true)"
    [[ -n "$PLUG_KEY" ]] || echo "⚠️ Nessuna chiave plugins:active trovata; proseguo senza auto-install"
    
    # ── Leggi plugin attivi ──
    PLUGINS=()
    if [[ -n "$PLUG_KEY" ]]; then
      TYPE="$(redis_cli TYPE "$PLUG_KEY" 2>/dev/null || true)"
      case "$TYPE" in
        set)  readarray -t PLUGINS < <(redis_cli SMEMBERS "$PLUG_KEY" | tr -d '\r');;
        zset) readarray -t PLUGINS < <(redis_cli ZRANGE "$PLUG_KEY" 0 -1 | tr -d '\r');;
        *)    echo "⚠️ Tipo chiave non gestito: ${TYPE:-none}";;
      esac
    fi
    
    # ── Mapping pacchetto (placeholder emailer) ──
    plugin_pkg(){
      case "$1" in
        nodebb-plugin-emailer) echo "nodebb-plugin-emailer-local" ;;  # scegliamo il nostro emailer reale se diverso
        *) echo "$1" ;;
      esac
    }
    
    # ── Verifica, installa, attiva ──
    MISSING_PKGS=()
    TO_ACTIVATE=()
    
    for plugin in "${PLUGINS[@]}"; do
      [[ -z "$plugin" ]] && continue
      pkg="$(plugin_pkg "$plugin")"
    
      if [[ "$plugin" == "nodebb-plugin-emailer" ]]; then
        echo "❌ Placeholder emailer attivo → userò '$pkg'"
        ./nodebb deactivate "nodebb-plugin-emailer" >/dev/null 2>&1 || true
        [[ -d "$APP_DIR/node_modules/$pkg" ]] || { MISSING_PKGS+=("$pkg"); NEED_BUILD=1; }
        TO_ACTIVATE+=("$pkg")
        continue
      fi
    
      [[ -d "$APP_DIR/node_modules/$pkg" ]] || { echo "❌ Mancante: $plugin (pkg: $pkg)"; MISSING_PKGS+=("$pkg"); TO_ACTIVATE+=("$plugin"); NEED_BUILD=1; }
    done
    
    if [[ ${#MISSING_PKGS[@]} -gt 0 ]]; then
      echo "📦 npm install: ${MISSING_PKGS[*]}"
      npm install --omit=dev "${MISSING_PKGS[@]}" || echo "⚠️ Installazione plugin fallita (continuo)"
    fi
    
    if [[ ${#TO_ACTIVATE[@]} -gt 0 ]]; then
      echo "🔌 Attivo: ${TO_ACTIVATE[*]}"
      for p in "${TO_ACTIVATE[@]}"; do
        ./nodebb activate "$p" || echo "⚠️ Attivazione fallita: $p"
      done
    fi
    
    # Audit post plugin (best-effort)
    npm audit --omit=dev || true
    npm audit fix --omit=dev --force || true
    
    # ── Build se necessario ──
    if [[ "$NEED_BUILD" -eq 1 ]]; then
      echo "🔧 npm install (deps app) & ./nodebb build…"
      npm install --omit=dev || true
      ./nodebb build
    else
      echo "✅ Nessuna ricostruzione necessaria"
    fi
    
    # ── Avvio & log ──
    echo "🚀 Avvio NodeBB…"
    ./nodebb start   # daemonizza
    
    echo "📜 Tail logs…"
    mkdir -p ./logs
    : > ./logs/output.log
    [ -e ./logs/error.log ] || : > ./logs/error.log
    exec tail -n +1 -F ./logs/output.log ./logs/error.log
    
    

    Kubernetes non e' Euro 5, per cui non puo' girare in centro. (N. Bonaparte, PhD in Computer Science)

    Matrix: @uriel:mtrx.keinpfusch.net
    Fedi: @uriel@x.keinpfusch.net

    Charlieundefined 1 Reply Last reply
    👏
    0
    • Amiga Unicornundefined Amiga Unicorn

      Si trattava, in fondo, di scrivere uno script di avvio per nodebb, che arriva con un container docker che non funziona di suo. (il contrario del concetto di container docker).

      #!/bin/bash
      set -euo pipefail
      
      APP_DIR="/usr/src/app"
      cd "$APP_DIR"
      
      die(){ echo "❌ $*" >&2; exit 1; }
      
      need_tool(){
        command -v "$1" >/dev/null 2>&1 || return 0
        return 1
      }
      
      # ── Tools minimi: se mancano, prova ad installarli (apt o apk), altrimenti abort ──
      MISSING=0
      command -v redis-cli >/dev/null 2>&1 || MISSING=1
      command -v jq        >/dev/null 2>&1 || MISSING=1
      if [[ "$MISSING" -eq 1 ]]; then
        if command -v apt-get >/dev/null 2>&1; then
          apt-get update && apt-get install -y --no-install-recommends redis-tools jq curl procps net-tools && apt-get clean
        elif command -v apk >/dev/null 2>&1; then
          apk add --no-cache redis jq curl procps-net iproute2
        else
          die "redis-cli/jq mancanti e nessun package manager disponibile"
        fi
      fi
      
      # ── Leggi config SENZA default (null⇒vuoto). Se mancano host/port/db, abort ──
      CFG="$APP_DIR/config.json"
      [[ -f "$CFG" ]] || die "$CFG mancante"
      
      json_get(){ jq -r "try $1 catch \"\"" "$CFG" | sed -E 's/^(null|NULL)$//'; }
      
      DB_DRIVER=$(json_get '.database')
      [[ "$DB_DRIVER" == "redis" ]] || die "database='$DB_DRIVER' (serve 'redis')"
      
      REDIS_HOST=$(json_get '.redis.host')
      REDIS_PORT=$(json_get '.redis.port')
      REDIS_DB=$(json_get '.redis.database')
      REDIS_USER=$(json_get '.redis.username')
      REDIS_PASS=$(json_get '.redis.password')
      REDIS_PREFIX=$(json_get '.redis.prefix')
      REDIS_TLS=$(json_get '.redis.tls')
      
      [[ -n "$REDIS_HOST" && -n "$REDIS_PORT" && -n "$REDIS_DB" ]] || die "Redis host/port/database non impostati in config.json"
      
      # ── redis-cli wrapper: passa SOLO ciò che esiste; username senza password ≠ auth ──
      redis_cli(){
        local scheme="redis"; [[ "$REDIS_TLS" == "true" ]] && scheme="rediss"
        if [[ -n "$REDIS_USER" && -n "$REDIS_PASS" ]]; then
          local u_enc p_enc
          u_enc=$(jq -rn --arg s "$REDIS_USER" '$s|@uri')
          p_enc=$(jq -rn --arg s "$REDIS_PASS" '$s|@uri')
          redis-cli -u "${scheme}://${u_enc}:${p_enc}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}" "$@"
        elif [[ -n "$REDIS_PASS" ]]; then
          redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -n "$REDIS_DB" -a "$REDIS_PASS" "$@"
        else
          redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -n "$REDIS_DB" "$@"
        fi
      }
      
      echo "ℹ️ Redis: host='${REDIS_HOST}' port='${REDIS_PORT}' db='${REDIS_DB}' prefix='${REDIS_PREFIX:-}' user=$([[ -n "$REDIS_USER" ]]&&echo set||echo none) pass=$([[ -n "$REDIS_PASS" ]]&&echo set||echo none) tls=$([[ "$REDIS_TLS" == "true" ]]&&echo on||echo off)"
      
      # ── NPM: upgrade + audit PRIMA di usare npm (niente unsafe-perm) ──
      npm config set fund false progress false loglevel=warn || true
      before="$(npm -v || echo n/a)"
      npm install -g npm@latest || echo "⚠️ Upgrade npm fallito, continuo"
      after="$(npm -v || echo n/a)"; echo "ℹ️ npm: $before → $after"
      npm audit --omit=dev || true
      npm audit fix --omit=dev --force || true
      
      # ── Build check ──
      NEED_BUILD=0
      [[ -f "$APP_DIR/build/manifest.json" && -f "$APP_DIR/build/public/src/client.js" ]] || NEED_BUILD=1
      
      # ── Scopriamo la chiave plugins:active: prefix→nodebb:→none + SCAN fallback ──
      discover_plugins_key(){
        local try=()
        [[ -n "$REDIS_PREFIX" ]] && try+=("${REDIS_PREFIX}:plugins:active")
        try+=("nodebb:plugins:active" "plugins:active")
        local k t
        for k in "${try[@]}"; do
          t="$(redis_cli TYPE "$k" 2>/dev/null || true)"
          [[ "$t" == "set" || "$t" == "zset" ]] && { echo "$k"; return 0; }
        done
        local hit
        hit="$(redis_cli --raw SCAN 0 MATCH '*:plugins:active' COUNT 200 2>/dev/null | awk '/:plugins:active$/ {print; exit}')"
        [[ -n "$hit" ]] && { echo "$hit"; return 0; }
        echo ""; return 1
      }
      PLUG_KEY="$(discover_plugins_key || true)"
      [[ -n "$PLUG_KEY" ]] || echo "⚠️ Nessuna chiave plugins:active trovata; proseguo senza auto-install"
      
      # ── Leggi plugin attivi ──
      PLUGINS=()
      if [[ -n "$PLUG_KEY" ]]; then
        TYPE="$(redis_cli TYPE "$PLUG_KEY" 2>/dev/null || true)"
        case "$TYPE" in
          set)  readarray -t PLUGINS < <(redis_cli SMEMBERS "$PLUG_KEY" | tr -d '\r');;
          zset) readarray -t PLUGINS < <(redis_cli ZRANGE "$PLUG_KEY" 0 -1 | tr -d '\r');;
          *)    echo "⚠️ Tipo chiave non gestito: ${TYPE:-none}";;
        esac
      fi
      
      # ── Mapping pacchetto (placeholder emailer) ──
      plugin_pkg(){
        case "$1" in
          nodebb-plugin-emailer) echo "nodebb-plugin-emailer-local" ;;  # scegliamo il nostro emailer reale se diverso
          *) echo "$1" ;;
        esac
      }
      
      # ── Verifica, installa, attiva ──
      MISSING_PKGS=()
      TO_ACTIVATE=()
      
      for plugin in "${PLUGINS[@]}"; do
        [[ -z "$plugin" ]] && continue
        pkg="$(plugin_pkg "$plugin")"
      
        if [[ "$plugin" == "nodebb-plugin-emailer" ]]; then
          echo "❌ Placeholder emailer attivo → userò '$pkg'"
          ./nodebb deactivate "nodebb-plugin-emailer" >/dev/null 2>&1 || true
          [[ -d "$APP_DIR/node_modules/$pkg" ]] || { MISSING_PKGS+=("$pkg"); NEED_BUILD=1; }
          TO_ACTIVATE+=("$pkg")
          continue
        fi
      
        [[ -d "$APP_DIR/node_modules/$pkg" ]] || { echo "❌ Mancante: $plugin (pkg: $pkg)"; MISSING_PKGS+=("$pkg"); TO_ACTIVATE+=("$plugin"); NEED_BUILD=1; }
      done
      
      if [[ ${#MISSING_PKGS[@]} -gt 0 ]]; then
        echo "📦 npm install: ${MISSING_PKGS[*]}"
        npm install --omit=dev "${MISSING_PKGS[@]}" || echo "⚠️ Installazione plugin fallita (continuo)"
      fi
      
      if [[ ${#TO_ACTIVATE[@]} -gt 0 ]]; then
        echo "🔌 Attivo: ${TO_ACTIVATE[*]}"
        for p in "${TO_ACTIVATE[@]}"; do
          ./nodebb activate "$p" || echo "⚠️ Attivazione fallita: $p"
        done
      fi
      
      # Audit post plugin (best-effort)
      npm audit --omit=dev || true
      npm audit fix --omit=dev --force || true
      
      # ── Build se necessario ──
      if [[ "$NEED_BUILD" -eq 1 ]]; then
        echo "🔧 npm install (deps app) & ./nodebb build…"
        npm install --omit=dev || true
        ./nodebb build
      else
        echo "✅ Nessuna ricostruzione necessaria"
      fi
      
      # ── Avvio & log ──
      echo "🚀 Avvio NodeBB…"
      ./nodebb start   # daemonizza
      
      echo "📜 Tail logs…"
      mkdir -p ./logs
      : > ./logs/output.log
      [ -e ./logs/error.log ] || : > ./logs/error.log
      exec tail -n +1 -F ./logs/output.log ./logs/error.log
      
      
      Charlieundefined Online
      Charlieundefined Online
      Charlie
      wrote last edited by
      #2

      Amiga Unicorn denghiu

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post