diff --git a/redax-wp/.env.example b/redax-wp/.env.example index e771bfe6..920273d3 100644 --- a/redax-wp/.env.example +++ b/redax-wp/.env.example @@ -1,32 +1,59 @@ -# ─── Redax-WP Konfiguration ─────────────────────────────────────────────────── -# Kopiere diese Datei zu .env und fülle alle Werte aus. +# ╔═══════════════════════════════════════════════════════════════════════════╗ +# ║ Redax-WP — Konfigurationsvorlage (.env.example) ║ +# ║ Kopiere diese Datei zu .env und fülle alle Pflichtfelder aus. ║ +# ║ Oder nutze: ./setup.sh für automatische Konfiguration ║ +# ╚═══════════════════════════════════════════════════════════════════════════╝ -# ─── Dashboard Auth ─────────────────────────────────────────────────────────── +# ─── Dashboard Zugang ───────────────────────────────────────────────────────── +# Pflicht: Login für das Redax-WP Dashboard DASHBOARD_USER=admin DASHBOARD_PASSWORD=changeme -# ─── WordPress (intern via Docker-Netzwerk) ─────────────────────────────────── -WP_URL=http://wordpress +# ─── WordPress Verbindung ───────────────────────────────────────────────────── +# Pflicht: URL unter der WordPress erreichbar ist (z.B. https://blog.example.com) +WP_URL=https://blog.example.com + +# WordPress Admin-Benutzername WP_USERNAME=admin -WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx -WORDPRESS_DB_PASSWORD=wp_secret_123 -# ─── KI (OpenRouter) ────────────────────────────────────────────────────────── -OPENROUTER_API_KEY=sk-or-v1-... +# Application Password (in WP-Admin unter Benutzer → Profil generieren, +# oder automatisch per setup.sh) +# Format: xxxx xxxx xxxx xxxx xxxx xxxx +WP_APP_PASSWORD= -# ─── Telegram ───────────────────────────────────────────────────────────────── -# Bot-Token für Benachrichtigungen nach Veröffentlichung +# Muss identisch mit MYSQL_PASSWORD sein +WORDPRESS_DB_PASSWORD=wp_secret_CHANGEME + +# ─── KI-Artikel-Generierung (OpenRouter) ───────────────────────────────────── +# Pflicht für KI-Artikel. API-Key von https://openrouter.ai +OPENROUTER_API_KEY=sk-or-v1-CHANGEME + +# ─── Telegram Integration ───────────────────────────────────────────────────── +# Optional: Bot-Token von @BotFather TELEGRAM_BOT_TOKEN= -# Kanal für KI-Artikel Teaser (z.B. @meinkanal oder -1001234567890) + +# Kanal-ID für KI-Artikel Teaser (z.B. @meinkanal oder -1001234567890) +# Nur KI-generierte Artikel werden hier gepostet (keine RSS-Artikel) TELEGRAM_CHANNEL_ID= -# Reviewer Chat-IDs (kommagetrennt) für Fehler-Alarm + Morgen-Briefing + +# Chat-IDs der Reviewer (kommagetrennt) für Fehler-Alarm + Morgen-Briefing +# Eigene Chat-ID herausfinden: Nachricht an @userinfobot TELEGRAM_REVIEWER_IDS= -# ─── Zeitzone ───────────────────────────────────────────────────────────────── +# ─── System ─────────────────────────────────────────────────────────────────── +# Zeitzone (IANA-Format) TIMEZONE=Europe/Berlin -# ─── WordPress Datenbank ────────────────────────────────────────────────────── -MYSQL_ROOT_PASSWORD=root_secret_123 +# Zufälliger geheimer Schlüssel für Flask-Sessions (mindestens 32 Zeichen) +# Generieren: python3 -c "import secrets; print(secrets.token_hex(32))" +SECRET_KEY=CHANGEME_mindestens_32_zeichen_lang + +# Pfad zur SQLite-Datenbank (nicht ändern wenn Docker verwendet wird) +DB_PATH=/data/redax.db + +# ─── MySQL Datenbank ────────────────────────────────────────────────────────── +# Starke Passwörter verwenden! Werden beim setup.sh automatisch generiert. +MYSQL_ROOT_PASSWORD=root_secret_CHANGEME MYSQL_DATABASE=wordpress MYSQL_USER=wordpress -MYSQL_PASSWORD=wp_secret_123 +MYSQL_PASSWORD=wp_secret_CHANGEME diff --git a/redax-wp/Makefile b/redax-wp/Makefile new file mode 100644 index 00000000..601b57c7 --- /dev/null +++ b/redax-wp/Makefile @@ -0,0 +1,96 @@ +# Redax-WP — Makefile +# Verwendung: make + +.PHONY: help setup start stop restart logs status shell-web shell-wp shell-db \ + reset-wp backup update clean + +help: + @echo "" + @echo " Redax-WP — Verfügbare Befehle" + @echo " ─────────────────────────────────────────────" + @echo " make setup Ersteinrichtung (interaktiv)" + @echo " make start Stack starten" + @echo " make stop Stack stoppen" + @echo " make restart Web-Container neustarten" + @echo " make logs Alle Logs (live)" + @echo " make logs-web Nur Dashboard-Logs" + @echo " make logs-wp Nur WordPress-Logs" + @echo " make status Container-Status" + @echo " make shell-web Shell im Dashboard-Container" + @echo " make shell-wp Shell im WordPress-Container" + @echo " make shell-db MySQL-Shell" + @echo " make backup Daten sichern (./backups/)" + @echo " make update Docker-Images aktualisieren" + @echo " make clean Alle Daten löschen (VORSICHT!)" + @echo "" + +setup: + @chmod +x setup.sh && ./setup.sh + +start: + docker compose up -d + +stop: + docker compose down + +restart: + docker compose up -d --no-deps --build web + +restart-all: + docker compose down && docker compose up -d + +logs: + docker compose logs -f + +logs-web: + docker compose logs -f web + +logs-wp: + docker compose logs -f wordpress + +status: + @echo "" + @docker compose ps + @echo "" + @echo " Ports:" + @docker compose ps --format "table {{.Name}}\t{{.Ports}}" 2>/dev/null || true + @echo "" + +shell-web: + docker compose exec web /bin/bash + +shell-wp: + docker compose exec wordpress /bin/bash + +shell-db: + @source .env 2>/dev/null; \ + docker compose exec db mysql -u$$MYSQL_USER -p$$MYSQL_PASSWORD $$MYSQL_DATABASE + +wp: + @source .env 2>/dev/null; \ + docker run --rm \ + --network "$$(basename $$(pwd))_redax-internal" \ + -v "$$(pwd)/data/wordpress:/var/www/html" \ + -e WORDPRESS_DB_HOST=redax-db \ + -e WORDPRESS_DB_USER=$$MYSQL_USER \ + -e WORDPRESS_DB_PASSWORD=$$MYSQL_PASSWORD \ + -e WORDPRESS_DB_NAME=$$MYSQL_DATABASE \ + --user root \ + wordpress:cli $(filter-out $@,$(MAKECMDGOALS)) --allow-root + +backup: + @mkdir -p backups + @STAMP=$$(date +%Y%m%d_%H%M%S); \ + tar -czf backups/redax-wp-$$STAMP.tar.gz data/ .env && \ + echo "✓ Backup erstellt: backups/redax-wp-$$STAMP.tar.gz" + +update: + docker compose pull + docker compose up -d --build + +clean: + @echo "WARNUNG: Alle Daten werden gelöscht!" + @read -rp "Sicher? (ja/N): " c; [ "$$c" = "ja" ] || exit 0 + docker compose down -v + rm -rf data/ logs/ + @echo "✓ Bereinigt" diff --git a/redax-wp/README.md b/redax-wp/README.md index 8aaeb18b..9a37ae44 100644 --- a/redax-wp/README.md +++ b/redax-wp/README.md @@ -1,90 +1,186 @@ # Redax-WP -KI-gestütztes Redaktionssystem für WordPress mit integriertem RSS-Feed-Manager. +KI-gestützter WordPress-Redakteur mit Dashboard, RSS-Feed-Integration und Telegram-Anbindung. -## Was ist Redax-WP? +**Was ist Redax-WP?** +Ein selbst gehostetes System aus WordPress + einem Flask-Dashboard, das KI-Artikel generiert, einplant und veröffentlicht. RSS-Feeds können automatisch importiert werden. KI-Artikel landen in WordPress **und** Telegram, RSS-Artikel nur in WordPress. -Redax-WP ersetzt das WordPress-Admin-Backend für redaktionelle Arbeit. Es kombiniert: - -- **KI-Artikelgenerierung** (OpenRouter) mit automatischen SEO-Feldern -- **RSS-Feed-Import** mit konfigurierbarem Auto-Publish und optionalem KI-Rewrite -- **Redaktionsplanung** mit Kalender, Zeitslots und direktem Umplanen -- **WordPress-Veröffentlichung** via REST API (Publish / Entwurf / Einplanen) -- **Telegram-Benachrichtigung** nach Veröffentlichung von KI-Artikeln +--- ## Schnellstart -### 1. Repository klonen - ```bash -git clone https://git.orbitalo.net/orbitalo/redax-wp.git -cd redax-wp +# 1. Repository klonen +git clone https://github.com/DEIN_USER/redax-wp mein-blog +cd mein-blog + +# 2. Interaktives Setup starten +chmod +x setup.sh +./setup.sh ``` -### 2. Konfiguration +Das Setup-Skript erledigt automatisch: +- `.env` generieren (mit zufälligen Passwörtern) +- Docker Stack starten +- WordPress installieren (6.9+) +- Blocksy Theme + Yoast SEO installieren +- Kategorien & Navigation anlegen +- Application Password für REST-API generieren + +--- + +## Voraussetzungen + +| Software | Version | +|----------|---------| +| Docker | 24+ | +| Docker Compose | 2.x | +| Freie Ports | 80 (WordPress), 8080 (Dashboard) | + +--- + +## Manuelle Konfiguration + +Falls `setup.sh` nicht verwendet wird: ```bash cp .env.example .env -# .env mit eigenen Werten befüllen (Editor öffnen) -nano .env +# .env anpassen +docker compose up -d --build ``` -### 3. Starten +--- + +## Nützliche Befehle ```bash -docker compose up -d +make help # Alle Befehle anzeigen +make start # Stack starten +make stop # Stack stoppen +make restart # Dashboard neustarten (nach .env-Änderung) +make logs # Live-Logs aller Container +make logs-web # Nur Dashboard-Logs +make status # Container-Status +make shell-web # Shell im Dashboard +make shell-db # MySQL-Shell +make backup # Datensicherung nach ./backups/ +make update # Docker-Images aktualisieren ``` -Dashboard: `http://localhost:8080` +--- -### 4. WordPress einrichten +## WP-CLI Befehle -Nach dem ersten Start WordPress unter `http://localhost:81` (oder intern) einrichten: +```bash +# Beliebige WP-CLI Befehle ausführen: +make wp plugin list +make wp user list +make wp cache flush +``` -1. WordPress-Installation abschließen -2. **Yoast SEO Plugin** installieren (für SEO-Meta-Tags) -3. In WordPress-Admin unter **Benutzer → Profil → Application Passwords** ein neues Passwort erstellen -4. Passwort in `.env` als `WP_APP_PASSWORD` eintragen -5. Container neu starten: `docker compose restart web` - -## Konfiguration (.env) - -| Variable | Beschreibung | -|----------|-------------| -| `DASHBOARD_USER` | Login-Name für das Dashboard | -| `DASHBOARD_PASSWORD` | Login-Passwort für das Dashboard | -| `WP_URL` | WordPress-URL (intern: `http://wordpress`) | -| `WP_USERNAME` | WordPress-Benutzername | -| `WP_APP_PASSWORD` | WordPress Application Password | -| `OPENROUTER_API_KEY` | API-Key von openrouter.ai | -| `TELEGRAM_BOT_TOKEN` | Telegram Bot-Token | -| `TELEGRAM_CHANNEL_ID` | Kanal für KI-Artikel Teaser | -| `TELEGRAM_REVIEWER_IDS` | Chat-IDs für Fehler-Alarm (kommagetrennt) | -| `TIMEZONE` | Zeitzone (Standard: `Europe/Berlin`) | - -## Workflow - -### KI-Artikel -1. Quelle eingeben + Ton wählen → KI generiert Artikel -2. In Vorschau prüfen, ggf. bearbeiten -3. Einplanen oder sofort veröffentlichen -4. → WordPress + automatischer Telegram-Teaser - -### RSS-Artikel -1. Feed unter `/feeds` hinzufügen -2. Modus wählen: Manuell / Auto-Publish / KI-Rewrite -3. Neue Artikel landen in Queue oder werden direkt veröffentlicht -4. → Nur WordPress (kein Telegram) +--- ## Architektur ``` -docker-compose.yml -├── web Flask Dashboard (:8080) -├── wordpress WordPress + Apache (:80 intern) -└── db MySQL 8 +┌─────────────────────────────────────────────────┐ +│ Docker Stack │ +│ │ +│ ┌──────────────┐ ┌───────────────────────┐ │ +│ │ redax-web │ │ redax-wordpress │ │ +│ │ Flask :8080 │◄──►│ Apache/PHP :80 │ │ +│ └──────┬───────┘ └──────────┬────────────┘ │ +│ │ │ │ +│ └──────────┬────────────┘ │ +│ ▼ │ +│ ┌──────────────┐ │ +│ │ redax-db │ │ +│ │ MySQL :3306│ │ +│ └──────────────┘ │ +└─────────────────────────────────────────────────┘ + │ │ + ▼ ▼ + https://redax. https://blog. + example.com example.com + (Dashboard) (Blog) ``` +--- + +## Cloudflare Tunnel einrichten + +Für öffentliche Erreichbarkeit ohne offene Ports: + +1. [Cloudflare Zero Trust](https://one.dash.cloudflare.com) → Networks → Tunnels → Create +2. **Tunnel 1** (Dashboard): + - Hostname: `redax.example.com` + - Service: `http://localhost:8080` +3. **Tunnel 2** (Blog): + - Hostname: `blog.example.com` + - Service: `http://localhost:80` +4. Docker-Befehle aus Cloudflare kopieren und ausführen + +--- + +## Nach dem Setup + +### Pflichtfelder nachträglich setzen + +Nach dem Setup unbedingt in `.env` eintragen: + +```bash +nano .env +# OPENROUTER_API_KEY=sk-or-v1-... +# TELEGRAM_BOT_TOKEN=... +# TELEGRAM_CHANNEL_ID=... + +make restart # Änderungen übernehmen +``` + +### WordPress konfigurieren + +- **WP-Admin:** `https://blog.example.com/wp-admin` +- Kategorien umbenennen: WP-Admin → Beiträge → Kategorien +- Yoast SEO einrichten: SEO → Allgemein + +--- + +## Daten & Verzeichnisse + +``` +redax-wp/ +├── data/ +│ ├── mysql/ # MySQL-Datenbank (persistent) +│ ├── wordpress/ # WordPress-Dateien + Uploads +│ └── db/ # Redax-WP SQLite-Datenbank +├── logs/ # Anwendungs-Logs +├── src/ # Dashboard-Quellcode (Flask) +├── .env # Konfiguration (nicht ins Git!) +├── .env.example # Vorlage +├── docker-compose.yml +├── setup.sh # Automatisches Ersteinrichtungs-Skript +└── Makefile # Komfort-Befehle +``` + +--- + +## Features + +| Feature | Status | +|---------|--------| +| KI-Artikel generieren (OpenRouter) | ✅ | +| WordPress REST API Integration | ✅ | +| Yoast SEO Felder | ✅ | +| RSS Feed Import | ✅ | +| Redaktionskalender (7 Tage) | ✅ | +| Telegram Benachrichtigungen | ✅ | +| Morgen-Briefing (10:00 Uhr) | ✅ | +| Featured Image (og:image) | ✅ | +| Strukturierte Logs | ✅ | +| Multi-Reviewer Support | ✅ | + +--- + ## Lizenz -MIT +MIT — frei verwendbar, anpassbar, weitergabe erlaubt. diff --git a/redax-wp/setup.sh b/redax-wp/setup.sh new file mode 100755 index 00000000..ab0839fd --- /dev/null +++ b/redax-wp/setup.sh @@ -0,0 +1,234 @@ +#!/bin/bash +# ╔═══════════════════════════════════════════════════════════╗ +# ║ Redax-WP — Automatisches Setup-Skript ║ +# ╚═══════════════════════════════════════════════════════════╝ +set -e + +BOLD='\033[1m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +BLUE='\033[0;34m' +NC='\033[0m' + +ok() { echo -e "${GREEN}✓${NC} $1"; } +info() { echo -e "${BLUE}→${NC} $1"; } +warn() { echo -e "${YELLOW}!${NC} $1"; } +err() { echo -e "${RED}✗${NC} $1"; exit 1; } +ask() { echo -e "${BOLD}$1${NC}"; } + +banner() { + echo "" + echo -e "${BOLD}╔═══════════════════════════════════════════╗${NC}" + echo -e "${BOLD}║ Redax-WP Setup-Assistent ║${NC}" + echo -e "${BOLD}╚═══════════════════════════════════════════╝${NC}" + echo "" +} + +gen_password() { + tr -dc 'A-Za-z0-9!@#' < /dev/urandom | head -c 16 +} + +wpcli() { + docker run --rm \ + --network "$(basename "$PWD")_redax-internal" \ + -v "$(pwd)/data/wordpress:/var/www/html" \ + -e WORDPRESS_DB_HOST=redax-db \ + -e WORDPRESS_DB_USER="$MYSQL_USER" \ + -e WORDPRESS_DB_PASSWORD="$MYSQL_PASSWORD" \ + -e WORDPRESS_DB_NAME="$MYSQL_DATABASE" \ + --user root \ + wordpress:cli "$@" +} + +# ─── Prüfungen ──────────────────────────────────────────────────────────────── +banner + +command -v docker >/dev/null 2>&1 || err "Docker nicht gefunden. Bitte Docker installieren." +docker compose version >/dev/null 2>&1 || err "Docker Compose nicht gefunden." + +if [ -f ".env" ]; then + warn ".env existiert bereits." + read -rp " Überschreiben? (j/N): " overwrite + [[ "$overwrite" =~ ^[jJ]$ ]] || { info "Setup abgebrochen."; exit 0; } +fi + +# ─── Eingaben sammeln ───────────────────────────────────────────────────────── +echo -e "${BOLD}── 1/5 Projekt-Name ──────────────────────────────────────${NC}" +read -rp " Projekt-Name (z.B. mein-blog): " PROJECT_NAME +PROJECT_NAME="${PROJECT_NAME:-redax-wp}" + +echo "" +echo -e "${BOLD}── 2/5 Domains ───────────────────────────────────────────${NC}" +read -rp " WordPress-Domain (z.B. blog.example.com): " WP_DOMAIN +read -rp " Dashboard-Domain (z.B. redax.example.com): " DASH_DOMAIN +WP_URL="https://${WP_DOMAIN}" + +echo "" +echo -e "${BOLD}── 3/5 Zugangsdaten ──────────────────────────────────────${NC}" +read -rp " Dashboard-Benutzer [admin]: " DASHBOARD_USER +DASHBOARD_USER="${DASHBOARD_USER:-admin}" +read -rsp " Dashboard-Passwort [auto]: " DASHBOARD_PASSWORD +echo "" +DASHBOARD_PASSWORD="${DASHBOARD_PASSWORD:-$(gen_password)}" + +read -rp " WordPress Admin-Benutzer [admin]: " WP_ADMIN_USER +WP_ADMIN_USER="${WP_ADMIN_USER:-admin}" +read -rsp " WordPress Admin-Passwort [auto]: " WP_ADMIN_PASSWORD +echo "" +WP_ADMIN_PASSWORD="${WP_ADMIN_PASSWORD:-$(gen_password)}" +read -rp " WordPress Admin-E-Mail: " WP_ADMIN_EMAIL +WP_ADMIN_EMAIL="${WP_ADMIN_EMAIL:-admin@example.com}" +read -rp " Blog-Titel [DeutschlandBlog]: " WP_TITLE +WP_TITLE="${WP_TITLE:-DeutschlandBlog}" + +echo "" +echo -e "${BOLD}── 4/5 API-Keys (optional — Enter zum Überspringen) ──────${NC}" +read -rp " OpenRouter API Key: " OPENROUTER_API_KEY +read -rp " Telegram Bot Token: " TELEGRAM_BOT_TOKEN +read -rp " Telegram Kanal-ID: " TELEGRAM_CHANNEL_ID +read -rp " Telegram Reviewer Chat-IDs (kommagetrennt): " TELEGRAM_REVIEWER_IDS + +echo "" +echo -e "${BOLD}── 5/5 Kategorien ────────────────────────────────────────${NC}" +read -rp " Kategorien (kommagetrennt) [Rubrik 1,Rubrik 2,Rubrik 3,Rubrik 4]: " CATEGORIES_RAW +CATEGORIES_RAW="${CATEGORIES_RAW:-Rubrik 1,Rubrik 2,Rubrik 3,Rubrik 4}" + +# ─── Passwörter generieren ──────────────────────────────────────────────────── +MYSQL_ROOT_PASSWORD="$(gen_password)" +MYSQL_PASSWORD="$(gen_password)" +MYSQL_USER="wordpress" +MYSQL_DATABASE="wordpress" +SECRET_KEY="$(tr -dc 'a-f0-9' < /dev/urandom | head -c 48)" +DB_PATH="/data/redax.db" + +# ─── .env schreiben ─────────────────────────────────────────────────────────── +cat > .env <&1 | grep -E "Started|Created|Building|Error" || true + +info "Warte auf WordPress-Datenbank (30s)..." +sleep 30 + +# ─── WordPress einrichten ───────────────────────────────────────────────────── +echo "" +info "Installiere WordPress..." +wpcli wp core install \ + --url="$WP_URL" \ + --title="$WP_TITLE" \ + --admin_user="$WP_ADMIN_USER" \ + --admin_password="$WP_ADMIN_PASSWORD" \ + --admin_email="$WP_ADMIN_EMAIL" \ + --allow-root 2>&1 | grep -v "sendmail" + +info "Setze Permalink-Struktur..." +wpcli wp rewrite structure '/%postname%/' --allow-root 2>&1 | grep -v "^$" + +info "Installiere Blocksy Theme..." +wpcli wp theme install blocksy --activate --allow-root 2>&1 | tail -2 + +info "Installiere Plugins..." +wpcli wp plugin install blocksy-companion --activate --allow-root 2>&1 | tail -2 +wpcli wp plugin install wordpress-seo --activate --allow-root 2>&1 | tail -2 + +info "Erstelle Kategorien..." +wpcli wp term delete category 1 --allow-root 2>&1 | grep -v "^$" || true +IFS=',' read -ra CATS <<< "$CATEGORIES_RAW" +FIRST_CAT_ID="" +for cat in "${CATS[@]}"; do + cat=$(echo "$cat" | xargs) + slug=$(echo "$cat" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') + result=$(wpcli wp term create category "$cat" --slug="$slug" --allow-root 2>&1) + cat_id=$(echo "$result" | grep -oP 'Created category \K[0-9]+' || echo "") + [ -z "$FIRST_CAT_ID" ] && [ -n "$cat_id" ] && FIRST_CAT_ID="$cat_id" + ok " Kategorie: $cat" +done + +info "Erstelle Hauptmenü..." +wpcli wp menu create "Hauptmenue" --allow-root 2>&1 | grep -v "^$" +IFS=',' read -ra CATS <<< "$CATEGORIES_RAW" +CAT_ID=2 +for cat in "${CATS[@]}"; do + wpcli wp menu item add-term hauptmenue category $CAT_ID --allow-root 2>&1 | grep -v "^$" || true + ((CAT_ID++)) +done +wpcli wp menu location assign hauptmenue menu_1 --allow-root 2>&1 | grep -v "^$" +wpcli wp menu location assign hauptmenue menu_mobile --allow-root 2>&1 | grep -v "^$" + +info "Erstelle WordPress Application Password..." +APP_PASS=$(wpcli wp user application-password create "$WP_ADMIN_USER" redax-api --porcelain --allow-root 2>&1 | tail -1) + +# Application Password in .env eintragen +sed -i "s|WP_APP_PASSWORD=|WP_APP_PASSWORD=${APP_PASS}|" .env +ok "Application Password gesetzt" + +# ─── Berechtigungen setzen ──────────────────────────────────────────────────── +mkdir -p data/wordpress/wp-content/uploads +chown -R 33:33 data/wordpress/wp-content/ 2>/dev/null || true + +# ─── Dashboard neustarten mit aktualiserter .env ────────────────────────────── +info "Dashboard-Container neustarten..." +docker compose up -d --no-deps web 2>&1 | grep -E "Started|Created" || true + +# ─── Zusammenfassung ────────────────────────────────────────────────────────── +echo "" +echo -e "${BOLD}╔═══════════════════════════════════════════╗${NC}" +echo -e "${BOLD}║ Setup abgeschlossen ✓ ║${NC}" +echo -e "${BOLD}╚═══════════════════════════════════════════╝${NC}" +echo "" +echo -e "${BOLD} Blog:${NC} ${WP_URL}" +echo -e "${BOLD} WP-Admin:${NC} ${WP_URL}/wp-admin" +echo -e "${BOLD} Dashboard:${NC} https://${DASH_DOMAIN}" +echo "" +echo -e "${BOLD} WP Login:${NC} ${WP_ADMIN_USER} / ${WP_ADMIN_PASSWORD}" +echo -e "${BOLD} Dashboard:${NC} ${DASHBOARD_USER} / ${DASHBOARD_PASSWORD}" +echo "" +if [ -z "$OPENROUTER_API_KEY" ]; then + warn "OpenRouter API Key fehlt noch → .env anpassen und 'make restart' ausführen" +fi +if [ -z "$TELEGRAM_BOT_TOKEN" ]; then + warn "Telegram Bot Token fehlt noch → .env anpassen und 'make restart' ausführen" +fi +echo -e "${BOLD} Cloudflare Tunnel:${NC} Manuell einrichten (siehe README.md)" +echo ""