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.

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
- Docker Engine 20.10+ und Docker Compose V2 (Befehl
docker compose, nicht das veraltetedocker-compose). Noch nicht installiert? Siehe Docker und Docker Compose auf Linux installieren. - 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/amd64undlinux/arm64. - Mindestens 512 MB RAM (1 GB empfohlen), mindestens 1 GB freier Speicherplatz.
- Internetverbindung für den Image-Pull (ca. 58 MB).
- 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.
- Optional: SMTP-Zugangsdaten für E-Mail-Benachrichtigungen (werden später im Admin-Panel konfiguriert).
Eckdaten im Überblick
| Parameter | Wert | Hinweis |
|---|---|---|
| Image | apache/answer:2.0.1 | Aktuell stabile Version (Mai 2026); :latest ist ein Alias darauf |
| Architekturen | amd64, arm64 | Alle stabilen Tags ab 1.5.1 |
| Image-Größe | ca. 58 MB | Single-Container, kein externer DB-Service nötig |
| Host-Port (Standard) | 9080 | Frei wählbar; Container-intern immer Port 80 |
| Volume | answer-data:/data | Config, SQLite-DB, Uploads, Logs – niemals löschen! |
| Env-Variable | INSTALL_PORT=80 | Optional; gibt den internen Installer-Port an |
| Setup-Wizard | /install | Zwingend erforderlich beim ersten Start |
| Lizenz | Apache 2.0 | Open 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/answerDer 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 -dDocker 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 psErwartete Ausgabe (gekürzt):
NAME IMAGE SERVICE STATUS PORTS
answer apache/answer:2.0.1 answer Up 0.0.0.0:9080->80/tcpZeigt 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/installErwartete 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/installDer Wizard führt dich durch vier Schritte:
- Sprache wählen – Deutsch ist verfügbar.
- 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.dbim Volume. Für den Produktivbetrieb mit mehreren gleichzeitigen Nutzern wähle MySQL 8+ oder PostgreSQL 14+ und gib die Verbindungsdaten deiner externen Datenbank ein. - 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. - Fertig: Der Wizard speichert alles in
/data/conf/config.yamlund 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 answerErwartete 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 /dataErsetze /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 -dWichtig: 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
- Container startet nicht,
docker compose pszeigtExit 1: Port 9080 ist bereits belegt. Prüfe mitss -tlnp | grep 9080, welcher Prozess den Port nutzt. Lösung: Port in dercompose.yamländern (z.B.8090:80) unddocker compose up -derneut ausführen. - Browser zeigt Fehler statt Setup-Wizard: Du rufst
http://localhost:9080auf, ohne vorher/installabgeschlossen zu haben. Navigiere manuell zuhttp://localhost:9080/installund schließe den Wizard vollständig ab. - Nach Update sind alle Daten weg: Das Volume
answer-datawurde versehentlich mitdocker compose down -vgelöscht. Das Flag-ventfernt Named Volumes – niemals verwenden, solange du die Daten brauchst. Ohne Backup sind die Daten nicht wiederherstellbar. - Site-URL falsch gesetzt, interne Links zeigen auf falsche Domain: Öffne
/data/conf/config.yamlim Volume direkt:docker run --rm -v answer-data:/data alpine cat /data/conf/config.yaml. Passe den Eintragsite_urlan und starte danndocker compose restart answer. - 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.1oder:latest– diese unterstützen beide Architekturen. - 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.
- 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 dannapache/answer:2.0.1in dercompose.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
- Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
- Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
- 3-2-1-Backup-Strategie umsetzen: Anleitung mit Restic, USB-Disk und S3-Cloud
- 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.