How to Self-Host Flarum: Modern Forum Software 2026
·OSSAlt Team
flarumforumcommunityself-hostingdocker2026
TL;DR
Flarum (MIT, ~15K GitHub stars, PHP) is modern forum software that's fast, beautiful, and extensible. Unlike Discourse (which requires 2GB+ RAM and significant setup), Flarum is lightweight (~100MB RAM), loads instantly, and has a polished UI out of the box. It supports Markdown, mentions, tags, real-time updates, SSO, and a rich extension ecosystem. Perfect for product communities, support forums, or hobbyist groups.
Key Takeaways
- Flarum: MIT, ~15K stars, PHP — modern, lightweight forum
- Fast: PHP + MySQL backend loads in milliseconds — feels like a SPA
- Extensions: 200+ community extensions — polls, OAuth, reactions, SEO, themes
- Real-time: Live updates — new posts appear without page refresh
- Markdown: Full Markdown editor with preview
- SSO: OAuth2, LDAP, SAML via extensions — integrate with Authentik/Authelia
Flarum vs Discourse vs phpBB vs NodeBB
| Feature | Flarum | Discourse | phpBB | NodeBB |
|---|---|---|---|---|
| RAM usage | ~100MB | ~2GB+ | ~100MB | ~300MB |
| Language | PHP | Ruby | PHP | Node.js |
| UI quality | Excellent | Excellent | Dated | Good |
| Setup time | 10 min | 30+ min | 20 min | 15 min |
| Extensions | 200+ | 150+ | 1000+ | 300+ |
| Real-time | Yes | Yes | No | Yes |
| SEO | Good (+ extensions) | Excellent | Good | Good |
| Email-in | No | Yes | No | Yes |
| Self-hosted | Yes | Yes | Yes | Yes |
| Price | Free | Free | Free | Free |
Part 1: Docker Setup
# docker-compose.yml
services:
flarum:
image: crazymax/flarum:latest
container_name: flarum
restart: unless-stopped
ports:
- "8888:8000"
volumes:
- flarum_data:/data
environment:
TZ: America/Los_Angeles
FLARUM_BASE_URL: https://forum.yourdomain.com
FLARUM_FORUM_TITLE: "Your Community"
FLARUM_API_PATH: api
FLARUM_BASE_PATH: /
# Database:
DB_HOST: db
DB_NAME: flarum
DB_USER: flarum
DB_PASSWORD: "${DB_PASSWORD}"
DB_PREFIX: flarum_
# Admin account (first run):
FLARUM_ADMIN_USER: admin
FLARUM_ADMIN_PASSWORD: "${ADMIN_PASSWORD}"
FLARUM_ADMIN_MAIL: admin@yourdomain.com
# SMTP:
FLARUM_MAIL_FROM: forum@yourdomain.com
FLARUM_MAIL_DRIVER: smtp
FLARUM_MAIL_HOST: mail.yourdomain.com
FLARUM_MAIL_PORT: 587
FLARUM_MAIL_USERNAME: forum@yourdomain.com
FLARUM_MAIL_PASSWORD: "${MAIL_PASSWORD}"
FLARUM_MAIL_ENCRYPTION: tls
depends_on:
- db
db:
image: mariadb:11
restart: unless-stopped
volumes:
- flarum_db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: flarum
MYSQL_USER: flarum
MYSQL_PASSWORD: "${DB_PASSWORD}"
volumes:
flarum_data:
flarum_db:
echo "DB_PASSWORD=$(openssl rand -base64 24)" >> .env
echo "DB_ROOT_PASSWORD=$(openssl rand -base64 24)" >> .env
echo "ADMIN_PASSWORD=$(openssl rand -base64 16)" >> .env
docker compose up -d
Part 2: HTTPS with Caddy
forum.yourdomain.com {
reverse_proxy localhost:8888
}
Part 3: Forum Configuration
Admin panel
Access: https://forum.yourdomain.com/admin
Essential settings
Basics:
- Forum title
- Forum description
- Welcome banner (shown to new users)
- Default homepage: All Discussions / Tags
Appearance:
- Logo and favicon upload
- Primary color
- Dark mode (via extension)
- Custom header HTML
- Custom CSS
Email:
- SMTP configuration
- Notification settings
Create tags (categories)
Admin → Tags:
Primary tags (categories):
📢 Announcements
💬 General
❓ Support
💡 Feature Requests
🐛 Bug Reports
🎉 Show & Tell
Secondary tags (cross-cutting):
Solved
Pinned
FAQ
Part 4: Extensions
Install extensions
# Enter the container:
docker exec -it flarum sh
# Install an extension via Composer:
composer require fof/oauth
composer require fof/polls
composer require fof/reactions
composer require flarum/markdown
composer require flarum/mentions
composer require flarum/tags
composer require flarum/sticky
composer require flarum/lock
composer require flarum/flags
Essential extensions
| Extension | What it does |
|---|---|
flarum/markdown | Markdown formatting in posts |
flarum/mentions | @mention users and quote posts |
flarum/tags | Category system with primary/secondary tags |
flarum/sticky | Pin discussions to the top |
flarum/lock | Lock discussions from new replies |
flarum/flags | User-reported content moderation |
flarum/approval | Require approval for new posts |
flarum/subscriptions | Follow/unfollow discussions |
Popular community extensions
| Extension | What it does |
|---|---|
fof/oauth | Login with GitHub, Google, Discord, etc. |
fof/polls | Create polls in discussions |
fof/reactions | Like/reaction buttons on posts |
fof/best-answer | Mark answers as "Best Answer" (Q&A) |
fof/drafts | Save draft posts |
fof/upload | File and image uploads |
fof/sitemap | Generate XML sitemap for SEO |
fof/nightmode | Dark mode toggle |
fof/user-bio | User bio/about section |
v17development/flarum-seo | Advanced SEO meta tags |
askvortsov/flarum-categories | Traditional category layout |
clarkwinkelmann/flarum-ext-emojionearea | Emoji picker |
Part 5: Moderation
Moderation tools
- Flag posts: Users can report content → moderators review
- Suspend users: Temporary ban with reason and duration
- Delete/hide posts: Remove or soft-delete content
- Lock discussions: Prevent new replies
- Merge discussions: Combine duplicate threads
- Move discussions: Change tags/categories
Set up moderation team
Admin → Users → [user] → Groups → Add to "Mods" group
Group permissions (Admin → Permissions):
Mods can:
- Edit & delete posts
- Lock & sticky discussions
- Approve posts
- View user IP addresses
- Suspend users
Part 6: SSO with Authentik
OAuth2 login
- Install OAuth extension:
docker exec -it flarum composer require fof/oauth
- Admin → OAuth → Add provider → Custom OAuth
- Configure:
- Client ID: from Authentik
- Client Secret: from Authentik
- Authorize URL:
https://auth.yourdomain.com/application/o/authorize/ - Token URL:
https://auth.yourdomain.com/application/o/token/ - Userinfo URL:
https://auth.yourdomain.com/application/o/userinfo/
Users can now log in with their Authentik account.
Part 7: SEO Optimization
Install SEO extensions
docker exec -it flarum composer require v17development/flarum-seo
docker exec -it flarum composer require fof/sitemap
SEO configuration
Admin → SEO:
- Meta description: auto-generated from discussion content
- Open Graph tags: share previews on social media
- Twitter Cards: rich previews when sharing links
- Structured data: JSON-LD for search engines
- Canonical URLs: prevent duplicate content
Sitemap
https://forum.yourdomain.com/sitemap.xml
Submit to Google Search Console for indexing.
Part 8: REST API
# Flarum has a JSON:API compliant REST API
BASE="https://forum.yourdomain.com/api"
# List discussions:
curl "$BASE/discussions" | jq '.data[].attributes.title'
# Get a discussion:
curl "$BASE/discussions/1" | jq '.data.attributes'
# Create a discussion (authenticated):
curl -X POST "$BASE/discussions" \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": {
"type": "discussions",
"attributes": {
"title": "Welcome to our community!",
"content": "This is our new forum. Introduce yourself!"
},
"relationships": {
"tags": {
"data": [{"type": "tags", "id": "1"}]
}
}
}
}'
Maintenance
# Update Flarum:
docker exec -it flarum composer update --prefer-dist --no-dev -a
docker exec -it flarum php flarum migrate
docker exec -it flarum php flarum cache:clear
# Update container:
docker compose pull
docker compose up -d
# Backup:
docker exec flarum-db-1 mysqldump -u flarum -p"$DB_PASSWORD" flarum \
| gzip > flarum-db-$(date +%Y%m%d).sql.gz
tar -czf flarum-data-$(date +%Y%m%d).tar.gz \
$(docker volume inspect flarum_flarum_data --format '{{.Mountpoint}}')
# Logs:
docker compose logs -f flarum
See all open source community tools at OSSAlt.com/categories/community.