Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Server & Netzwerk 05.07.2026 · 10 min Lesezeit

Apache Answer mit Docker installieren: Q&A-Community-Plattform im Stack-Overflow-Stil

Apache Answer ist eine vollständige Q&A-Community-Plattform der Apache Software Foundation – ideal für interne Wissensdatenbanken, Team-FAQs und Kundensupport-Helpdesks. Mit nur einem Container und 10 Minuten Aufwand läuft dein eigenes Stack-Overflow auf jedem Linux-Host.

Apache Answer mit Docker installieren: Moderne Q&A Community Plattform im Stack Overflow Stil mit Docker Container, Weboberfläche, Fragen und Antworten, Tags, Bewertungen sowie Wissensdatenbank für Self Hosting und Team Zusammenarbeit.

Wer intern Wissen strukturiert sammeln will – sei es als IT-FAQ, Entwickler-Wissensdatenbank oder Kundensupport-Helpdesk – braucht mehr als ein Wiki. Apache Answer liefert genau das: eine vollständige Q&A-Community-Plattform im Stack-Overflow-Stil, entwickelt und gepflegt von der Apache Software Foundation. Fragen stellen, antworten, abstimmen, taggen, nach Lösungen suchen – all das funktioniert out-of-the-box. Das Backend ist in Go geschrieben, das Frontend in React/TypeScript, das Docker-Image schlanke 58 MB groß. Mit über 15.500 GitHub-Stars und mehr als einer Million Docker-Pulls ist die Plattform produktionsreif und aktiv gepflegt. Diese Anleitung zeigt dir, wie du Apache Answer in wenigen Minuten per Docker Compose auf einem beliebigen Linux-Host zum Laufen bringst – von der compose.yaml bis zum abgeschlossenen Setup-Wizard.

Voraussetzungen

  1. Docker Engine 20.10+ und Docker Compose V2 (Befehl docker compose, nicht das veraltete docker-compose). Noch nicht installiert? Siehe Docker und Docker Compose auf Linux installieren.
  2. Linux-Host, VM oder NAS mit Docker-Unterstützung (Ubuntu, Debian, Raspberry Pi OS, Synology DSM 7 mit Container Manager o.ä.). Unterstützte Architekturen: linux/amd64 und linux/arm64.
  3. Mindestens 512 MB RAM (1 GB empfohlen), mindestens 1 GB freier Speicherplatz.
  4. Internetverbindung für den Image-Pull (ca. 58 MB).
  5. Für den Produktivbetrieb mit eigener Domain: ein Reverse Proxy mit TLS. Eine bewährte Kombination findest du in der Anleitung Traefik als Docker-Reverse-Proxy mit automatischem HTTPS.
  6. Optional: SMTP-Zugangsdaten für E-Mail-Benachrichtigungen (werden später im Admin-Panel konfiguriert).

Eckdaten im Überblick

ParameterWertHinweis
Imageapache/answer:2.0.1Aktuell stabile Version (Mai 2026); :latest ist ein Alias darauf
Architekturenamd64, arm64Alle stabilen Tags ab 1.5.1
Image-Größeca. 58 MBSingle-Container, kein externer DB-Service nötig
Host-Port (Standard)9080Frei wählbar; Container-intern immer Port 80
Volumeanswer-data:/dataConfig, SQLite-DB, Uploads, Logs – niemals löschen!
Env-VariableINSTALL_PORT=80Optional; gibt den internen Installer-Port an
Setup-Wizard/installZwingend erforderlich beim ersten Start
LizenzApache 2.0Open Source, Apache Software Foundation

Schritt 1: Projektordner anlegen

Lege einen dedizierten Ordner für den Stack an. /opt/answer/ eignet sich für systemweite Instanzen; im Home-Verzeichnis (~/answer/) reicht es für einzelne Nutzer:

sudo mkdir -p /opt/answer
cd /opt/answer

Der Ordner muss nur die compose.yaml enthalten – alle persistenten Daten speichert Docker im Named Volume answer-data automatisch unter /var/lib/docker/volumes/.

Verifizieren: ls -la /opt/answer/ zeigt den leeren Ordner ohne Fehlermeldung. Der aktuelle Benutzer muss Schreibrechte haben – falls nicht: sudo chown $USER /opt/answer.

Schritt 2: compose.yaml erstellen

Erstelle die Datei /opt/answer/compose.yaml mit folgendem Inhalt. Das ist der offizielle, vollständige Stack – Apache Answer benötigt für den Einstieg keinen externen Datenbank-Service:

services:
  answer:
    image: apache/answer:2.0.1
    container_name: answer
    restart: on-failure
    ports:
      - "9080:80"
    volumes:
      - answer-data:/data

volumes:
  answer-data:

Ein paar Punkte, die du kennen solltest: Der Wert restart: on-failure entspricht dem offiziellen Image-Standard. Er bedeutet, dass der Container nach einem Absturz neu startet, aber nicht automatisch nach einem bewussten docker compose down. Für den Dauerbetrieb kannst du das auf restart: unless-stopped ändern. Der Host-Port 9080 lässt sich beliebig anpassen – zum Beispiel auf 8090:80 falls 9080 bereits belegt ist.

Verifizieren: cat /opt/answer/compose.yaml zeigt die Datei fehlerfrei. Optionaler Syntax-Check im Ordner: docker compose config – die normalisierte YAML wird ohne Fehlermeldung ausgegeben.

Schritt 3: Container starten

Starte den Stack aus dem Projektordner heraus:

cd /opt/answer
docker compose up -d

Docker lädt das Image herunter (ca. 58 MB beim ersten Mal) und startet den Container im Hintergrund. Das Named Volume answer-data wird automatisch angelegt.

Verifizieren: Prüfe den Status direkt nach dem Start:

docker compose ps

Erwartete Ausgabe (gekürzt):

NAME      IMAGE                    SERVICE   STATUS    PORTS
answer    apache/answer:2.0.1      answer    Up        0.0.0.0:9080->80/tcp

Zeigt die Spalte STATUS den Wert Up, läuft der Container. Falls Exit 1 erscheint: docker compose logs answer zeigt die Fehlerursache – häufigster Grund ist ein belegter Port 9080. Lösung: Port in der compose.yaml ändern und docker compose up -d erneut ausführen.

Ergänzend kannst du einen HTTP-Check machen:

curl -I http://localhost:9080/install

Erwartete Antwort: HTTP/1.1 200 OK oder eine Weiterleitung (302) auf die Installer-Seite.

Schritt 4: Setup-Wizard abschließen

Dieser Schritt ist zwingend erforderlich. Ohne abgeschlossenen Wizard ist Apache Answer nicht nutzbar und zeigt beim Aufruf der Startseite Fehler an.

Öffne im Browser:

http://localhost:9080/install

Der Wizard führt dich durch vier Schritte:

  1. Sprache wählen – Deutsch ist verfügbar.
  2. Datenbankverbindung konfigurieren: Für den Einstieg und kleine Teams wähle SQLite – keine weitere Konfiguration nötig, die Datenbankdatei liegt automatisch unter /data/db/answer.db im Volume. Für den Produktivbetrieb mit mehreren gleichzeitigen Nutzern wähle MySQL 8+ oder PostgreSQL 14+ und gib die Verbindungsdaten deiner externen Datenbank ein.
  3. Site-Grunddaten: Name der Community, Site-URL (trage hier die URL ein, unter der Answer dauerhaft erreichbar sein wird – z.B. https://qa.example.com; eine spätere Änderung erfordert einen manuellen Eingriff in /data/conf/config.yaml), Admin-E-Mail und Passwort.
  4. Fertig: Der Wizard speichert alles in /data/conf/config.yaml und leitet auf die Startseite weiter.

Nach dem Wizard kannst du dich unter http://localhost:9080 mit den Admin-Zugangsdaten einloggen und unter /admin weitere Einstellungen (SMTP, Tags, Benutzerrollen) vornehmen.

Verifizieren: Die Startseite zeigt das Answer-Interface ohne Fehlermeldung. Login mit Admin-Zugangsdaten funktioniert. Logs prüfen:

docker compose logs --tail=20 answer

Erwartete Ausgabe: Zeilen mit INFO-Level, kein FATAL oder ERROR bezüglich Datenbank oder Konfiguration.

Schritt 5: Reverse Proxy und HTTPS einrichten (Produktivbetrieb)

Für den internen Laborbetrieb reicht HTTP auf Port 9080. Für den produktiven Einsatz – insbesondere wenn Answer über das Internet erreichbar sein soll – ist ein Reverse Proxy mit TLS-Terminierung unverzichtbar.

Binde den Container-Port nur an 127.0.0.1, damit er nicht direkt von außen erreichbar ist:

ports:
  - "127.0.0.1:9080:80"

Richte dann Traefik, Caddy oder Nginx als Reverse Proxy davor. Eine vollständige Anleitung dazu findest du unter Traefik als Docker-Reverse-Proxy mit automatischem HTTPS. Setze im Setup-Wizard (oder nachträglich in /data/conf/config.yaml) die Site-URL auf die öffentliche Domain, z.B. https://qa.example.com.

Verifizieren: Nach Reverse-Proxy-Konfiguration: curl -I https://qa.example.com liefert HTTP/2 200. Das Schloss-Symbol im Browser zeigt ein gültiges TLS-Zertifikat. Interne Links in Answer (E-Mail-Benachrichtigungen, Bild-URLs) verwenden die korrekte Domain.

Schritt 6: Backup und Update

Daten sichern

Das gesamte Named Volume answer-data enthält alle persistenten Daten: Konfiguration, SQLite-Datenbank (falls gewählt), Uploads und Logs. Ein vollständiges Backup erstellst du mit:

docker run --rm \
  -v answer-data:/data \
  -v /backup:/backup \
  alpine \
  tar czf /backup/answer-$(date +%Y%m%d).tar.gz /data

Ersetze /backup durch deinen lokalen Backup-Pfad. Wenn du MySQL oder PostgreSQL verwendest, erstelle zusätzlich einen Datenbank-Dump. Zur Automatisierung empfiehlt sich ein Cron-Job oder eine strukturierte Backup-Strategie, wie in 3-2-1-Backup-Strategie umsetzen beschrieben.

Update auf eine neue Version

Das Update läuft in drei Befehlen – die Datenmigration erfolgt automatisch beim Container-Neustart. Passe dazu vorher das Image-Tag in der compose.yaml auf die neue Version an (z.B. apache/answer:2.1.0) oder verwende :latest:

cd /opt/answer
docker compose pull
docker compose down
docker compose up -d

Wichtig: Erstelle vor jedem Update ein Backup des Volumes – die Datenmigration ist in der Regel zuverlässig, aber ein Backup kostet weniger Zeit als ein Datenverlust.

Verifizieren: docker compose ps zeigt den Container im Status Up. docker compose logs --tail=30 answer zeigt keine Migrationsfehler. Die Weboberfläche ist erreichbar und die Admin-Anmeldung funktioniert.

Troubleshooting / Typische Fehler

  1. Container startet nicht, docker compose ps zeigt Exit 1: Port 9080 ist bereits belegt. Prüfe mit ss -tlnp | grep 9080, welcher Prozess den Port nutzt. Lösung: Port in der compose.yaml ändern (z.B. 8090:80) und docker compose up -d erneut ausführen.
  2. Browser zeigt Fehler statt Setup-Wizard: Du rufst http://localhost:9080 auf, ohne vorher /install abgeschlossen zu haben. Navigiere manuell zu http://localhost:9080/install und schließe den Wizard vollständig ab.
  3. Nach Update sind alle Daten weg: Das Volume answer-data wurde versehentlich mit docker compose down -v gelöscht. Das Flag -v entfernt Named Volumes – niemals verwenden, solange du die Daten brauchst. Ohne Backup sind die Daten nicht wiederherstellbar.
  4. Site-URL falsch gesetzt, interne Links zeigen auf falsche Domain: Öffne /data/conf/config.yaml im Volume direkt: docker run --rm -v answer-data:/data alpine cat /data/conf/config.yaml. Passe den Eintrag site_url an und starte dann docker compose restart answer.
  5. ARM64 (Raspberry Pi, Apple Silicon): Container startet nicht: Du verwendest möglicherweise den :test-Tag, der nur für amd64 verfügbar ist. Verwende immer stabile Tags wie :2.0.1 oder :latest – diese unterstützen beide Architekturen.
  6. E-Mail-Benachrichtigungen funktionieren nicht: SMTP muss nach dem Wizard-Abschluss im Admin-Panel unter Admin → E-Mail konfiguriert werden. Prüfe dort Hostname, Port (587 oder 465), Benutzername und Passwort deines SMTP-Dienstes.
  7. Plugin lässt sich nicht aktivieren: Apache Answer lädt Plugins nicht dynamisch nach. Ein neues Image muss mit dem gewünschten Plugin kompiliert werden (answer build --with github.com/apache/answer-plugins/[plugin-name]). Dieses eigene Image ersetzt dann apache/answer:2.0.1 in der compose.yaml.

Häufige Fragen

Welche Datenbank soll ich wählen?

Für erste Tests, kleine Teams oder den internen Einsatz mit wenigen gleichzeitigen Nutzern ist SQLite vollkommen ausreichend – keine externe Datenbank nötig, keine zusätzliche Konfiguration. Sobald du mit mehr als zehn Nutzern gleichzeitig rechnest oder hohe Schreib-Last erwartest, wechsle zu MySQL 8+ oder PostgreSQL 14+. Diese Datenbanken konfigurierst du im Setup-Wizard; die Verbindungsdaten werden in /data/conf/config.yaml gespeichert.

Kann ich Answer hinter Traefik oder Nginx betreiben?

Ja, ohne Einschränkung. Binde den Port an 127.0.0.1:9080:80, richte deinen Reverse Proxy auf diesen Port und setze die Site-URL im Wizard auf die öffentliche HTTPS-Domain. Traefik mit Label-basierter Konfiguration und automatischem Let's-Encrypt-Zertifikat ist der empfohlene Weg für Produktivinstallationen.

Wie läuft das Upgrade ab?

Passe das Image-Tag in der compose.yaml auf die neue Version an, erstelle ein Volume-Backup, führe dann docker compose pull && docker compose down && docker compose up -d aus. Die Datenmigration läuft automatisch beim ersten Start des neuen Containers. Im Log erscheinen entsprechende Migrations-Meldungen.

Wie installiere ich Plugins?

Plugins können nicht per Klick nachinstalliert werden. Da das Backend in Go (statisch kompiliert) geschrieben ist, muss ein eigenes Docker-Image gebaut werden: Erstelle ein Dockerfile, das FROM apache/answer erweitert und RUN answer build --with github.com/apache/answer-plugins/[plugin-name] ausführt. Dieses Image verwendest du dann statt des offiziellen in deiner compose.yaml.

Wie sichere ich alle Daten zuverlässig?

Das Named Volume answer-data enthält alles – Config, Datenbank, Uploads. Das oben gezeigte docker run ... alpine tar czf ...-Kommando packt das gesamte Volume in ein komprimiertes Archiv. Automatisiere diesen Befehl als Cron-Job. Bei MySQL oder PostgreSQL ergänze zusätzlich einen regulären Datenbank-Dump per mysqldump oder pg_dump.

Was passiert, wenn ich die Site-URL später ändern muss?

Die beim Wizard eingetragene URL ist in /data/conf/config.yaml gespeichert. Du kannst die Datei direkt bearbeiten: Starte einen temporären Alpine-Container mit gemountem Volume, editiere config.yaml und starte Answer neu. Alle internen Links, E-Mail-Benachrichtigungen und OAuth-Callbacks verwenden danach die neue URL.

Fazit

Apache Answer ist eine ernstzunehmende Open-Source-Alternative zu kommerziellen Q&A- und Helpdesk-Lösungen. Die Installation per Docker Compose ist in unter zehn Minuten erledigt, das Image ist mit 58 MB außergewöhnlich schlank, und der browserbasierte Setup-Wizard nimmt dir die manuelle Konfiguration ab. Für kleine Teams und interne Wissensdatenbanken reicht SQLite als Datenbank vollständig aus; wer skalieren will, wechselt im Wizard zu PostgreSQL oder MySQL. Das einzige, was du immer im Blick behalten musst: das Volume answer-data. Es enthält alles – Konfiguration, Datenbank, Uploads – und darf unter keinen Umständen versehentlich gelöscht werden. Mit einem soliden Backup-Konzept und einem Reverse Proxy vor dem Container steht einem produktiven Betrieb nichts im Weg. Für den Einstieg in selbst gehostete Community-Plattformen lohnt sich auch ein Blick auf Docker Compose absichern: Secrets, Healthchecks und Non-Root – damit der Stack von Anfang an produktionstauglich läuft.

Weiterführende Anleitungen und Quellen

  1. Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
  2. Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
  3. 3-2-1-Backup-Strategie umsetzen: Anleitung mit Restic, USB-Disk und S3-Cloud
  4. Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only für den Produktivbetrieb

Offizielle Quellen: Apache Answer Installationsdokumentation, GitHub-Repository apache/answer, Docker Hub apache/answer, Upgrade-Dokumentation.

Passende Anleitungen auf S-EDV

  1. PCI DSS 4.0.1: Checkout-Skripte als Sicherheitsrisiko - was Admins jetzt prüfen
  2. WordPress-Sicherheit: Plugin-Risiken brauchen feste Update- und Prüfprozesse
  3. OpenSSL: Neun Schwachstellen im Sicherheitsrelease vom 9. Juni 2026, darunter Hi