Apache Answer replaces proprietary forums like vBulletin with a self-hosted, tag-based Q&A platform featuring accepted answers and plugin connectors.
Apache Answer is a self-hosted question-and-answer platform written in Go and React. It structures team discussions around accepted answers, community reputation, and a tag taxonomy rather than chronological message threads. Deployments run as a single container or binary backed by SQLite, PostgreSQL, or MySQL, with extensibility handled through static build-time plugins.
vBulletin organizes discussions into nested boards and chronological threads where solutions to technical problems get buried across reply pages. Apache Answer replaces that model with a structured Q&A workflow: questions are indexed by tags, answers are peer-voted, and accepted solutions remain pinned at the top. For teams handling technical support, this eliminates repeat inquiries and turns daily troubleshooting into an indexed knowledge base.
The operational difference centers on architecture and ecosystem integration. vBulletin runs on legacy PHP stacks with commercial licenses and brittle script hooks. Apache Answer deploys as a modern Go binary with dedicated plugins for Amazon S3 storage, Meilisearch or Elasticsearch indexing, OpenID Connect authentication, and Slack alerts. While hosted alternatives like Tribe provide turnkey SaaS widgets, Apache Answer guarantees complete data sovereignty on private infrastructure without recurring subscription fees—though adding integrations requires ops leads to compile plugins into the binary at build time.
answer build/help or /qa lack native base path parameterization, causing routing friction on shared domains (GitHub issue #335).Is Apache Answer free for commercial use? Yes. Apache Answer is distributed under the Apache-2.0 license, permitting commercial hosting and modification without licensing fees.
Apache Answer vs vBulletin — which should I choose? Choose vBulletin if you need traditional open-ended forum categories; choose Apache Answer if your team needs structured technical Q&A with accepted solutions and tag navigation.
Can I connect Apache Answer to an existing identity provider? Yes. Official connector plugins support OpenID Connect, GitHub, and Google authentication, though enabling them requires compiling a custom container image.
Apache Answer is an effective choice for teams that need an organized, searchable troubleshooting archive rather than a casual social forum. The project is actively maintained on GitHub with frequent updates, and its permissive Apache-2.0 license ensures organizations can self-host and customize the platform without vendor lock-in or recurring seat fees.
We started this exact setup from scratch in a clean Linux machine on Oct 31, 2026 and checked it through Apache Answer's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p apache-answer && cd apache-answer
curl -fsSL https://open-source.store/tools/apache-answer/compose.yml -o compose.ymlcat > .env <<EOF
[email protected]
ADMIN_PASSWORD=$(openssl rand -hex 12)
SITE_URL=http://localhost:9080
EOFADMIN_EMAIL — Email address of the initial administrator account.ADMIN_PASSWORD — Password of the initial administrator account. Generated above; keep it secret.SITE_URL — Public URL configured at first install; set this to your domain or public IP before first start, or update it later in admin settings.docker compose up -dservices:
answer:
image: apache/answer:2.0.3
ports:
- "9080:80"
environment:
AUTO_INSTALL: "true"
DB_TYPE: sqlite3
DB_FILE: /data/answer.db
LANGUAGE: en_US
SITE_NAME: Answer
SITE_URL: ${SITE_URL}
CONTACT_EMAIL: ${ADMIN_EMAIL}
ADMIN_NAME: admin
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
EXTERNAL_CONTENT_DISPLAY: always_display
volumes:
- answer-data:/data
restart: on-failure
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:80/healthz || exit 1"]
interval: 5s
timeout: 5s
retries: 20
start_period: 5s
volumes:
answer-data:
Lint, codegen, breaking-change checks and dependency management in one Git-native CLI. Open source, no registry lock-in.
Show that Apache Answer is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 16 s: apache/answer:2.0.3.
Based on the upstream setup. Official compose. Image pinned to 2.0.3; initialized with SQLite and admin user via AUTO_INSTALL; SITE_URL moved to .env.
answer-1 | 2026-10-31T21:45:52.338586884Z [i18n] install fr_FR.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338595384Z [i18n] install he_IL.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338598134Z [i18n] install he_IL.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338626051Z [i18n] install he_IL.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338671717Z [i18n] install hi_IN.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338673259Z [i18n] install hi_IN.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338733051Z [i18n] install hi_IN.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338757717Z [i18n] install hu_HU.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338855217Z [i18n] install hu_HU.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338856634Z [i18n] install hu_HU.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338857176Z [i18n] install hy_AM.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338857717Z [i18n] install hy_AM.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338858217Z [i18n] install hy_AM.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338858717Z [i18n] install i18n.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338859217Z [i18n] install i18n.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338859676Z [i18n] install i18n.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338860134Z [i18n] install id_ID.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338861717Z [i18n] install id_ID.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338892801Z [i18n] install id_ID.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338915551Z [i18n] install it_IT.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338926009Z [i18n] install it_IT.yaml bundle...
answer-1 | 2026-10-31T21:45:52.338960842Z [i18n] install it_IT.yaml bundle success
answer-1 | 2026-10-31T21:45:52.338992634Z [i18n] install ja_JP.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.338993342Z [i18n] install ja_JP.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339029842Z [i18n] install ja_JP.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339048342Z [i18n] install ko_KR.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339065509Z [i18n] install ko_KR.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339095051Z [i18n] install ko_KR.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339115801Z [i18n] install ml_IN.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339126967Z [i18n] install ml_IN.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339194176Z [i18n] install ml_IN.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339196092Z [i18n] install nl_NL.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339206717Z [i18n] install nl_NL.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339243884Z [i18n] install nl_NL.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339246426Z [i18n] install no_NO.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339268592Z [i18n] install no_NO.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339305301Z [i18n] install no_NO.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339329967Z [i18n] install pl_PL.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339344092Z [i18n] install pl_PL.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339415717Z [i18n] install pl_PL.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339418551Z [i18n] install pt_BR.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339419051Z [i18n] install pt_BR.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339429551Z [i18n] install pt_BR.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339454509Z [i18n] install pt_PT.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339462926Z [i18n] install pt_PT.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339498092Z [i18n] install pt_PT.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339527092Z [i18n] install ro_RO.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339569801Z [i18n] install ro_RO.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339600551Z [i18n] install ro_RO.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339625551Z [i18n] install ru_RU.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339628926Z [i18n] install ru_RU.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339673759Z [i18n] install ru_RU.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339698426Z [i18n] install sk_SK.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339699384Z [i18n] install sk_SK.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339755176Z [i18n] install sk_SK.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339766842Z [i18n] install sq_AL.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339778092Z [i18n] install sq_AL.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339809842Z [i18n] install sq_AL.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339811842Z [i18n] install sr_SP.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339831634Z [i18n] install sr_SP.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339843676Z [i18n] install sr_SP.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339862967Z [i18n] install sv_SE.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339876509Z [i18n] install sv_SE.yaml bundle...
answer-1 | 2026-10-31T21:45:52.339912426Z [i18n] install sv_SE.yaml bundle success
answer-1 | 2026-10-31T21:45:52.339922342Z [i18n] install te_IN.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.339938467Z [i18n] install te_IN.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340023342Z [i18n] install te_IN.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340024342Z [i18n] install tr_TR.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.340024967Z [i18n] install tr_TR.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340060509Z [i18n] install tr_TR.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340091259Z [i18n] install uk_UA.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.340107384Z [i18n] install uk_UA.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340166009Z [i18n] install uk_UA.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340201301Z [i18n] install vi_VN.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.340204176Z [i18n] install vi_VN.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340260926Z [i18n] install vi_VN.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340285717Z [i18n] install zh_CN.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.340301801Z [i18n] install zh_CN.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340337384Z [i18n] install zh_CN.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340351592Z [i18n] install zh_TW.yaml file exist, try to replace it
answer-1 | 2026-10-31T21:45:52.340363342Z [i18n] install zh_TW.yaml bundle...
answer-1 | 2026-10-31T21:45:52.340387301Z [i18n] install zh_TW.yaml bundle success
answer-1 | 2026-10-31T21:45:52.340573384Z try to create cache directory /data/cache
answer-1 | 2026-10-31T21:45:52.340720676Z try to load cache file from /data/cache/cache.db
answer-1 | 2026-10-31T21:45:52.340728009Z open /data/cache/cache.db: no such file or directory
answer-1 | 2026-10-31T21:45:52.340757426Z try to create database directory /data
answer-1 | 2026-10-31T21:45:52.341349134Z try to save cache file to /data/cache/cache.db
answer-1 | 2026-10-31T21:45:52.341466134Z upgrade done
answer-1 | 2026-10-31T21:45:52.351835009Z config file path: /data/conf/config.yaml
answer-1 | 2026-10-31T21:45:52.351844842Z Answer is starting..........................
answer-1 | 2026-10-31T21:45:52.836467884Z 2026-11-01 05:45:52.836 INFO data/data.go:118 try to load cache file from /data/cache/cache.db
answer-1 | 2026-10-31T21:45:52.838241968Z 2026-11-01 05:45:52.838 INFO cron/cron.go:63 cron job manager start
answer-1 | 2026-10-31T21:45:52.838464551Z 2026-11-01 05:45:52.838 INFO cron/cron.go:99 clean up uploads cron enabled
answer-1 | 2026-10-31T21:45:52.838514259Z answer Version: 2.0.3 Revision: 6744295
answer-1 | 2026-10-31T21:46:07.919228293Z 2026-11-01 05:46:07.918 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:46:07.936561251Z 2026-11-01 05:46:07.936 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:46:11.924807045Z 2026-11-01 05:46:11.924 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:46:11.925054378Z 2026-11-01 05:46:11.924 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:46:58.923872177Z 2026-11-01 05:46:58.923 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "../../../../../windows/win.ini": invalid syntax
answer-1 | 2026-10-31T21:46:59.935468469Z 2026-11-01 05:46:59.935 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "'>\"<svg/onload=confirm('xss-page')>": invalid syntax
answer-1 | 2026-10-31T21:46:59.942238803Z 2026-11-01 05:46:59.942 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "'>\"<svg/onload=confirm('xss-page')>": invalid syntax
answer-1 | 2026-10-31T21:46:59.943156053Z 2026-11-01 05:46:59.943 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "../../../../../windows/win.ini": invalid syntax
answer-1 | 2026-10-31T21:47:33.919445179Z 2026-11-01 05:47:33.919 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "vlf": invalid syntax
answer-1 | 2026-10-31T21:47:33.920926262Z 2026-11-01 05:47:33.920 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "vlf": invalid syntax
answer-1 | 2026-10-31T21:47:40.944906167Z 2026-11-01 05:47:40.944 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:47:40.944920917Z 2026-11-01 05:47:40.944 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:47:40.944922125Z 2026-11-01 05:47:40.944 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "step_1": invalid syntax
answer-1 | 2026-10-31T21:47:40.946645125Z 2026-11-01 05:47:40.946 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "step_1": invalid syntax
answer-1 | 2026-10-31T21:47:43.917896918Z 2026-11-01 05:47:43.917 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:47:43.922407002Z 2026-11-01 05:47:43.922 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:47:49.942508296Z 2026-11-01 05:47:49.942 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "login": invalid syntax
answer-1 | 2026-10-31T21:47:49.943592963Z 2026-11-01 05:47:49.943 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "login": invalid syntax
answer-1 | 2026-10-31T21:47:54.942769424Z 2026-11-01 05:47:54.939 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "index.php": invalid syntax
answer-1 | 2026-10-31T21:47:54.942820465Z 2026-11-01 05:47:54.942 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "index.php": invalid syntax
answer-1 | 2026-10-31T21:47:58.921232759Z 2026-11-01 05:47:58.920 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "pie-register": invalid syntax
answer-1 | 2026-10-31T21:47:58.921248509Z 2026-11-01 05:47:58.920 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "pie-register": invalid syntax
answer-1 | 2026-10-31T21:48:02.949044636Z 2026-11-01 05:48:02.948 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "'>\"<svg/onload=confirm('page')>": invalid syntax
answer-1 | 2026-10-31T21:48:02.950022552Z 2026-11-01 05:48:02.949 ERROR handler/handler.go:67 http_handle BindAndCheck fail, strconv.ParseInt: parsing "'>\"<svg/onload=confirm('page')>": invalid syntax
answer-1 | 2026-10-31T21:48:03.951227178Z 2026-11-01 05:48:03.922 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query
answer-1 | 2026-10-31T21:48:03.951243886Z 2026-11-01 05:48:03.927 ERROR handler/handler.go:67 http_handle BindAndCheck fail, invalid semicolon separator in query