Managed Apache Answer hosting

Collaboration and identityOn-prem or your region

A question-and-answer site from the Apache Software Foundation for the questions your teams ask each other, run behind your own sign-on in Switzerland, the EU or your own datacentre. Pilae runs it on your own servers, or in Zurich, Switzerland, and eleven other Pilae Cloud regions.

Talk to us about Apache Answer

Licence
Apache-2.0
Runs on
Your own hardware, or any of 10+ Pilae regions — six of them in Switzerland and the EU
Upgrades
Pinned, tested against your configuration, applied in your window
Upstream
answer.apache.org

Running Apache Answer in production: what it takes

  1. Build the image with its plugins

    Answer has no plugin installer: plugins are compiled into the binary with answer build. We build your image from a pinned release with every plugin pinned too, record what answer plugin reports, and keep the list in your repository. A plugin added later is a new build and a restart, not a setting.

  2. Install onto PostgreSQL, not SQLite

    The installation guide recommends SQLite for a first look, and Answer cannot move its data to another database afterwards, so we install straight onto PostgreSQL. config.yaml is rendered from a template at every start, which keeps the database password out of the image, and the Swagger UI, on by default, is turned off.

  3. Sign on through Keycloak, then close password login

    The OAuth2 connector points at Keycloak, checks the email_verified claim and limits new accounts to your email domains. Once administrators have linked their accounts to it and signed in through it, password login and email registration are switched off. If Keycloak is ever unreachable, answer config --with allow_password_login, run with Answer stopped, turns password login back on from the server.

  4. Keep uploads behind the sign-in

    With sign-in required, Answer checks the session before it serves an image or attachment from its data volume. The S3 storage plugin hands out links straight into a bucket, which that check does not cover, so uploads stay on the volume. A second instance changes that: it needs the uploads in a Garage bucket on the private network, and the Redis cache plugin, because sessions are held in each instance's memory.

  5. Back up the database and the volume together

    PostgreSQL goes offsite daily, encrypted, to your chosen country, with the uploads and config.yaml beside it. The connector settings and their client secret are in the database, so they are covered too. Once a month we restore both into a scratch environment, sign in through Keycloak and open a question with an image.

  6. Rebuild for every upgrade

    Each release is a rebuild with the same plugin list, and the container runs answer upgrade before Answer starts. Upstream asks for a backup of the database and configuration first, so a snapshot is taken just before. The Pilae Agent tests the upgrade on a copy, waits for your approval, applies it in your window and records it in the console.

What Apache Answer is, and who runs it

Self-hosted Apache Answer for internal questions and answers

Apache Answer is a question-and-answer platform from the Apache Software Foundation, a top-level project since it left the Incubator in December 2024. People ask, answer, vote and accept the answer that worked; tags, reputation and review queues keep the content in order, and every edit keeps its history. It is one Go binary that carries its own web interface.

It suits engineering, IT and support teams whose answers otherwise end up in chat threads nobody can search, and teams leaving Stack Internal or Questions for Confluence. It also has an AI assistant that answers from the site’s own content, and an MCP server that lets agents search it. The assistant is off until you enable it, the MCP server needs an API key you issue, and the assistant can use a model you run yourself with vLLM. We run Answer on your own hardware or in a Pilae Cloud region, one of 10+, six of them in Switzerland and the EU.

Apache Answer in production: plugins, sign-on and uploads

Answer has no plugin installer. Go has no convenient way to load plugins at run time, so upstream compiles them into the binary with answer build, and adding Meilisearch search or S3 storage means a new image and a restart. We keep the plugin list in your repository, pin every plugin and rebuild with each upgrade, so the plugins are tested with the release rather than after it.

The database is PostgreSQL, chosen on the first day, because Answer cannot move its data to another database later. Sign-on goes through Keycloak with the OAuth2 connector, and password login is then switched off. Uploads stay on the data volume, where Answer checks the session before serving them when sign-in is required. The S3 plugin would link browsers straight to a Garage bucket, outside that check, so we use it only when two instances need shared storage. The site answers on your private network, and reaches the internet only if you publish it, as you might for a customer community.

The database and the data volume are backed up daily, encrypted, to an offsite location in your chosen country, and restored monthly into a scratch environment. Our monitoring probes the site every 60 seconds, and the Pilae Agent applies each rebuilt release in your window after you approve it.

Apache Answer licence and editions

Answer and its official plugins are Apache-2.0, with no paid edition and no seat count to track as more of the organisation joins. We operate the Apache release on infrastructure you choose, and our operation follows the published plans. Talk to us about the team you want to bring across from Stack Internal.

The code in the apache/answer repository is Apache-2.0, and so are the official plugins in apache/answer-plugins. There is no enterprise edition and no paid build: single sign-on through the OAuth2 connector, the search and storage plugins, the AI assistant and the MCP server are all in the release we deploy. The third-party libraries it bundles keep their own licences, listed in the LICENSE file of each release. Apache Answer and its logo are trademarks of the Apache Software Foundation, which does not endorse this service.

Apache Answer system requirements

Before anything is deployed, this is what has to exist. We size it with you in the first session, and we say so when your own hardware is already enough.

CPU and memory
2 vCPU · 4 GBOur starting point for Answer and PostgreSQL on one machine. Upstream publishes no sizing; Answer itself is a single Go process.
Database
PostgreSQLHolds the questions, answers, users, site settings and plugin settings. Upstream also supports MySQL and SQLite but cannot move data from one to another, so the choice is made once.
Data volume
/dataHolds config.yaml, uploaded images and attachments, translations and the cache file. The uploads are the part that has to be backed up with the database.
Sign-on
OIDC provider · connector-basicThrough the generic OAuth2 connector the stock image already includes. The provider's user info must carry email_verified, or Answer asks each person for an email address at first sign-in.
Build toolchain
Go · Node.js · pnpm · gitanswer build compiles the Go binary and rebuilds the web interface around the plugins. It runs in our build pipeline, never on your server.
Mail
SMTP relayFor notification emails. Answer sends none until SMTP is configured in its admin settings.

Migrating from Stack Internal to Apache Answer

Stack Internal, the product formerly called Stack Overflow for Teams, lets a team administrator download the team's data as JSON files: posts, comments, tags, users, votes, badges and images. Answer has no importer for it, and its plugin interface for imports only creates questions, so we write the import for your data. Questions, answers, comments and tags come across with their authors, dates and accepted answers, and images are uploaded again. Vote counts, reputation and badges stay behind: Answer earns reputation under its own rules, so it starts again for everyone. Each post arrives as its latest version, without its edit history. Articles have no equivalent in Answer, so they move to a wiki such as BookStack or Outline.

  1. Download the team's data

    A team administrator downloads it from the Stack Internal settings as a ZIP of JSON files, or we read the questions, answers, comments, tags and users through its API with the exporter Stack publishes as open source. Everything after this works on that copy, never on the live team.

  2. Create the accounts first

    Every author becomes an Answer account, matched by email address and linked to their Keycloak user. Answer refuses a single sign-on login whose address belongs to an account it has not linked yet, so the import writes those links instead of leaving them to the first sign-in.

  3. Import into staging and check

    Questions, answers, comments and tags go into a staging copy of Answer, where the owners of the busiest tags check their own questions. Because everyone starts again at a reputation of 1, the privilege level is set to the one upstream intends for private teams.

  4. Open it, then stop posting to the old team

    Answer opens to everyone through single sign-on and nothing new is posted to Stack Internal. A second, smaller import carries across what was asked in between, and the old team stays available for reference until its subscription ends.

The plugin list is the image

# Dockerfile. Plugins are compiled into the binary, so plugins.txt is the plugin list:
# connector-basic, reviewer-basic, captcha-basic, quick-links and search-meilisearch,
# one module@tag per line. Every tag comes from versions.env and moves after a test build.
ARG ANSWER_TAG
ARG GO_TAG
FROM apache/answer:${ANSWER_TAG} AS stock

FROM golang:${GO_TAG}-alpine AS build
ARG PNPM_TAG
RUN apk --no-cache add build-base git bash nodejs npm && npm install -g pnpm@${PNPM_TAG}
COPY --from=stock /usr/bin/answer /usr/bin/answer
COPY plugins.txt .
RUN answer build $(sed 's/^/--with /' plugins.txt) --output /usr/bin/answer-acme \
 && /usr/bin/answer-acme plugin

FROM stock
COPY --from=build /usr/bin/answer-acme /usr/bin/answer
COPY config.yaml.tmpl /etc/answer/config.yaml.tmpl
ENTRYPOINT ["/bin/sh", "-c", "mkdir -p /data/conf && envsubst < /etc/answer/config.yaml.tmpl > /data/conf/config.yaml && exec /entrypoint.sh"]

# config.yaml.tmpl
server:
  http:
    addr: 0.0.0.0:80
data:
  database:
    driver: postgres
    connection: host=pg.acme.internal port=5432 user=answer password=${ANSWER_DB_PASSWORD} dbname=answer sslmode=require
  cache:
    file_path: /data/cache/cache.db   # held in memory, written here every minute
i18n:
  bundle_dir: /data/i18n
swaggerui:
  show: false                         # true by default
service_config:
  upload_path: /data/uploads          # served by Answer itself, behind the sign-in

# OAuth2 Basic connector, set in the admin pages and stored in the database
#   Authorize URL   https://sso.acme.internal/realms/acme/protocol/openid-connect/auth
#   Token URL       https://sso.acme.internal/realms/acme/protocol/openid-connect/token
#   User JSON URL   https://sso.acme.internal/realms/acme/protocol/openid-connect/userinfo
#   User ID, email and email verified JSON paths: sub, email, email_verified
#   Scope           openid,email,profile
#   Redirect URI registered in Keycloak:
#     https://answers.acme.internal/answer/api/v1/connector/redirect/basic
An example image and configuration for acme, trimmed. Every plugin is pinned, the four the stock image carries included, because a build keeps only the plugins it names. Meilisearch, still a preview plugin upstream, is added for the archive brought across from Stack Internal, and its index is rebuilt from the database. Once installed, Answer reads its database connection only from config.yaml, so the file is rendered at every start with the password from the environment. The connector settings, client secret included, are entered once in the admin pages and live in the database.

What Pilae is responsible for

A pinned version

A version we have run, not whatever latest resolves to that day.

A runbook

What it depends on, how it fails, what to do about it. In your repository.

A restore drill

Backups restored on a schedule. A backup nobody has restored is a file.

A patch window

Security updates in a window you agreed, with a rollback ready.

Someone watching

Every endpoint probed on the minute. An alert reaches a person, not a dashboard nobody opens.

Where it runs
zur1, fra1, fal1, gra1, ams1, hel1, lon1, ash1, hil1, sin1, tok1, syd1, on-premZurich, Frankfurt, Falkenstein, Gravelines, Amsterdam, Helsinki, London, Ashburn, Hillsboro, Singapore, Tokyo, Sydney, Your own hardware
Who holds the credentials
You do. Ours are separate, named, logged and revocable with one command. We ask before anything changes outside an agreed window.
If you leave
The machine, the data, the compose files and the runbook are already yours. Nothing stops when our access does.

What running Apache Answer costs

On Starter, Apache Answer runs in Pilae Cloud for CHF 449EUR 479USD 559 a month, hosting and onboarding included. On Business, it is one of up to three apps for CHF 1,590EUR 1,690USD 1,990 a month, on your own servers or in Pilae Cloud. Enterprise is quoted. The plans set what each includes; these are the inputs that move the price around them.

Instance size
The CPU, memory and, where a model runs, the GPUs the app needs for your users and your data.
High availability
One machine with tested restores, or a replicated setup that keeps serving when a node fails.
Storage and backups
How much data it holds, how long backups are kept, and point-in-time recovery for its database.
Plan and support
Starter, Business or Enterprise: support hours, response times in the contract and how often we review the service with you.
Region
Your own hardware, where the infrastructure is already yours, or a Pilae Cloud region, where machines are priced per month. On Starter, Pilae chooses the site.
Sign-on and integrations
Single sign-on, directory sync, mail relays and the other systems the app has to reach.

Apache Answer: common questions

Is Apache Answer open source?

Yes. It is Apache-2.0 and has been a top-level project of the Apache Software Foundation since December 2024. There is no enterprise edition: single sign-on, the plugins, the AI assistant and the MCP server are in the release we deploy. The official plugins are Apache-2.0 too, in a separate Apache repository.

Can sign-in be limited to our own accounts?

Yes. The OAuth2 connector signs people in through Keycloak or another OpenID Connect provider, new accounts can be limited to your email domains, and password login can be switched off for everyone, administrators included. The site can also require sign-in before anything is shown. If the identity provider is unreachable, one command on the server turns password login back on, and that command is in the runbook.

Why does adding a plugin need a new build?

Because Answer is written in Go, which has no convenient way to load plugins at run time, so upstream compiles them into the binary. Adding, removing or upgrading a plugin means building a new binary with answer build, deploying it and running the upgrade step. We build in our pipeline rather than on your server and test the result on a copy first. Plugin settings live in the database, so a rebuild does not lose them.

What happens to reputation and privileges after the move?

Reputation starts again, because votes do not come across and Answer earns reputation under its own rules. Answer also gates editing other people's posts, creating tags and reviewing edits behind reputation, so a long-standing expert would arrive unable to do any of it. We set the privilege level upstream intends for private teams, where nearly everything is open from the first day. Downvoting still needs 125 points at every level.

Can AI tools and coding agents use what is in Answer?

Yes. The AI assistant answers questions from the site's own content, and the MCP server lets agents look up questions, answers, comments and tags with an API key you issue. The assistant stays off until an administrator enables it. The MCP server is on from installation, but it answers only to an API key, and there is none until an administrator issues one. The assistant needs a model with tool calling behind an OpenAI-compatible API, which can be one you run yourself with vLLM, so nothing is sent to an outside provider.

Also in collaboration and identity

Back to apps

Bring us your Apache Answer. We will tell you what it takes.

Thirty minutes on the deployment you already have, or the one you are about to start.