Discourse
Modern open-source community discussion platform
Discourse is a free, open-source platform for community discussion, forums, and mailing lists. It offers real-time updates, trust levels, and an extensive plugin ecosystem.
Key features
- Real-time forum updates
- Trust-level moderation
- Rich plugin ecosystem
- Email-in posting
Pros & cons
Strengths
- Polished modern UI
- Strong moderation tools
Trade-offs
- Resource-hungry
- Opinionated Docker setup
Discourse replaces
Last reviewed Aug 26, 2026 · 908 words
Three facts decide whether you should self-host Discourse. It needs 2 GB of RAM plus swap for a single container that bundles PostgreSQL, Redis, and a Rails app. It will not let anyone register until outbound email works, because every account is confirmed by email. And the only install the project supports is its own Docker launcher, which rebuilds the entire container, with 5 to 15 minutes of downtime, for every plugin you add. Accept those and you get the best forum software that exists. Fight them and you will lose.
discourse-setup is the install, and it decides things for you
Discourse does not publish a normal docker run image. The supported path is the discourse_docker repository:
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
./discourse-setup
The script asks for a hostname, an admin email, and SMTP credentials, writes containers/app.yml, then bootstraps the container. The first build takes the better part of 15 minutes on a small VPS because it compiles assets inside the container. When it finishes, Discourse is bound directly to ports 80 and 443 on the host with a Let's Encrypt certificate it obtained itself. That is convenient on a dedicated box and awkward on a server that already has a reverse proxy, which the next-but-one section handles.
The "opinionated Docker setup" note in the catalogue is fair. You do not choose the Postgres version, the Redis config, or the base image, and the project's position is that unsupported setups get no help on its forum. In practice this is why Discourse installs tend to work: the variables are removed.
Email is the step that stalls most installs
Signup, password reset, notifications, and digest emails all go out over SMTP, and a forum whose confirmation emails land in spam is a forum with no members. Do not try to send from the same VPS; use a transactional provider (Mailgun, Postmark, SES, Brevo and similar all have free or near-free tiers at low volume) and set up SPF, DKIM, and DMARC before inviting anyone. The honest post on self-hosted email explains why running your own outbound mail here is a bad trade.
Email-in, where members reply to a notification and the reply becomes a post, is a separate feature that needs a receiving mailbox. Either use a provider's inbound webhook or add the mail-receiver container from the same repository. It is genuinely good once configured, and it is optional on day one.
Putting it behind an existing reverse proxy
If Caddy or Traefik already owns 80 and 443 on this host, edit containers/app.yml before bootstrapping: remove the web.ssl.template.yml and web.letsencrypt.ssl.template.yml lines from templates, and change expose so the container publishes only an internal HTTP port:
expose:
- "127.0.0.1:8080:80"
Then proxy https://forum.example.com to 127.0.0.1:8080 and forward the X-Forwarded-For and X-Forwarded-Proto headers so Discourse builds correct absolute URLs. Real-time updates use long-polling through the message bus, so a proxy without websocket support still works, which is one less thing than most self-hosted apps need.
Plugins rebuild; upgrades and backups don't
Plugins are declared as git clone lines under hooks.after_code in app.yml, followed by ./launcher rebuild app. That rebuild is the downtime window mentioned above, so batch plugin changes and do them at a quiet hour. Core Discourse upgrades are gentler: /admin/upgrade in the browser pulls the new version and restarts the app without a full rebuild. Security releases arrive regularly, and staying within a version or two of current is the difference between a five-minute upgrade and an afternoon of migration.
Moderation runs itself more than you'd expect
Trust levels 0 through 4 gate what a member can do: new accounts cannot post links or images freely, regulars earn the ability to recategorise and rename topics, and the thresholds are all adjustable. Combined with community flagging, this means a 500-member forum can run with one part-time moderator, which is the single strongest argument for Discourse over lighter software like Flarum. The forums category has the full field if you want something smaller.
Backups are built in as well. Admin → Backups produces a tarball with the database and uploads, on a schedule you set, and it can push to any S3-compatible bucket. The same page restores from one. Do a restore onto a scratch VPS once before you trust it, and store uploads in S3 from the start if your community shares images; the local uploads directory is what makes backups grow past a gigabyte.
What I'd do
A 4 GB VPS, not 2, because the difference is a few dollars a month and the rebuilds stop swapping. Transactional SMTP configured before the first invite, backups to S3 nightly, upgrades from /admin/upgrade monthly, plugins kept to a handful. If the community will stay under about 50 active members and nobody on the team enjoys operating servers, Discourse's own cheapest hosted plan, about $20 a month at last check, is a fair price to make all of the above someone else's problem. Above that size, self-hosting pays for itself within the year.
Compare Discourse
11 head-to-head comparisons.
Similar social networks apps
Mastodon
Social NetworksDecentralized open-source microblogging server
Replaces Twitter, X
Invidious
Social NetworksAlternative front-end to YouTube
Replaces YouTube
NodeBB
Social NetworksNode.js powered forum with real-time updates
Replaces phpBB, Discourse
Lemmy
Social NetworksFederated link aggregator and forum
Replaces Reddit
Nitter
Social NetworksAlternative front-end for Twitter that respects your privacy
Replaces X
diaspora*
Social NetworksPrivacy-focused decentralized social network
Replaces Facebook, Twitter