Self-Hosting Fider with Docker Compose

What Is Fider?

Fider is an open-source platform for collecting user feedback and prioritizing feature requests. It replaces paid tools like Canny and UserVoice with a self-hosted solution where users can submit ideas, vote on them, and discuss implementations. Teams get a clear view of what their users actually want, ranked by community votes.

Updated February 2026: Verified with latest Docker images and configurations.

Prerequisites

  • A Linux server (Ubuntu 22.04+ recommended)
  • Docker and Docker Compose installed (guide)
  • 1 GB of free RAM (minimum)
  • 5 GB of free disk space
  • A domain name (recommended for OAuth and email)
  • SMTP credentials for email notifications

Docker Compose Configuration

Create a docker-compose.yml file:

services:
  fider:
    image: getfider/fider:v0.33.0
    container_name: fider
    ports:
      - "3000:3000"
    depends_on:
      db:
        condition: service_healthy
    environment:
      # Core settings
      BASE_URL: "${BASE_URL}"
      GO_ENV: "production"
      DATABASE_URL: "postgres://fider:${POSTGRES_PASSWORD}@db:5432/fider?sslmode=disable"
      JWT_SECRET: "${JWT_SECRET}"

      # Email configuration (required for user signups)
      EMAIL_NOREPLY: "${EMAIL_NOREPLY}"
      SMTP_HOST: "${SMTP_HOST}"
      SMTP_PORT: "${SMTP_PORT}"
      SMTP_USERNAME: "${SMTP_USERNAME}"
      SMTP_PASSWORD: "${SMTP_PASSWORD}"
      SMTP_ENABLE_STARTTLS: "true"

      # Logging
      LOG_LEVEL: "INFO"
      LOG_CONSOLE: "true"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "./fider", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  db:
    image: postgres:17-alpine
    container_name: fider-db
    environment:
      POSTGRES_USER: fider
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
      POSTGRES_DB: fider
    volumes:
      - fider-db:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U fider"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  fider-db:

Create a .env file alongside:

# Full URL where Fider will be accessible (no trailing slash)
BASE_URL=https://feedback.example.com

# JWT secret — generate with: openssl rand -hex 32
JWT_SECRET=change_me_to_a_random_64_character_hex_string

# PostgreSQL password — generate with: openssl rand -hex 16
POSTGRES_PASSWORD=change_me_to_a_strong_password

# Email configuration (required for signups and notifications)
EMAIL_NOREPLY=[email protected]
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME=your-smtp-user
SMTP_PASSWORD=your-smtp-password

Start the stack:

docker compose up -d

Initial Setup

  1. Open your browser and navigate to http://your-server-ip:3000 (or your configured domain)
  2. Fider automatically runs database migrations on first start
  3. You’ll see the setup wizard — enter your site name, admin name, and email
  4. The admin account is created via email verification — check your inbox for the activation link
  5. Once activated, you can start configuring your feedback board

Configuration

OAuth Providers

Fider supports social login to reduce friction. Add any combination to your environment:

ProviderVariables
GoogleOAUTH_GOOGLE_CLIENTID, OAUTH_GOOGLE_SECRET
GitHubOAUTH_GITHUB_CLIENTID, OAUTH_GITHUB_SECRET
FacebookOAUTH_FACEBOOK_APPID, OAUTH_FACEBOOK_SECRET

You can also configure custom OAuth providers through the admin panel under Site Settings → Authentication.

Multi-Tenancy

Fider supports multiple organizations in a single instance. Each tenant gets its own subdomain or custom domain. Enable by setting different BASE_URL values per tenant through the admin API.

Customization

Through the admin panel, you can:

  • Set a custom logo and branding
  • Configure status labels (Open, Planned, Started, Completed, Declined)
  • Set up custom CSS for visual tweaks
  • Enable or disable user signups
  • Manage team members and roles (Administrator, Collaborator, Visitor)

Reverse Proxy

Place Fider behind a reverse proxy for SSL termination. With Nginx Proxy Manager, point your domain to fider:3000. Ensure BASE_URL matches your public domain exactly — mismatches break OAuth callbacks and email links.

For manual Nginx configuration:

server {
    listen 443 ssl;
    server_name feedback.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

See Reverse Proxy Setup for full configuration guides.

Backup

Back up the PostgreSQL database:

# Create a database dump
docker compose exec db pg_dump -U fider fider > fider-backup-$(date +%Y%m%d).sql

# Restore from backup
cat fider-backup.sql | docker compose exec -T db psql -U fider fider

The PostgreSQL data volume (fider-db) contains all application data. Include it in your backup strategy. See Backup Strategy for comprehensive approaches.

Troubleshooting

Fider won’t start — database connection errors

Symptom: Logs show connection refused or database "fider" does not exist.

Fix: Ensure PostgreSQL is fully started before Fider. The depends_on with service_healthy handles this, but if using an external database, verify the connection string in DATABASE_URL. The ?sslmode=disable parameter is required for local PostgreSQL containers.

Symptom: Clicking the verification link in the signup email returns an error or wrong page.

Fix: Ensure BASE_URL exactly matches your public URL including the protocol (https://). If behind a reverse proxy, make sure X-Forwarded-Proto headers are passed correctly.

OAuth login fails with redirect error

Symptom: Google/GitHub login redirects to an error page after authentication.

Fix: The OAuth callback URL must be {BASE_URL}/oauth/{provider}/callback. Register this exact URL in your OAuth provider’s settings. Check that BASE_URL uses https:// if your site is behind SSL.

Users can’t upload images

Symptom: Image uploads fail with a 413 or timeout error.

Fix: If behind Nginx, increase client_max_body_size in your proxy config. Default upload limit is typically 2 MB.

Resource Requirements

  • RAM: 512 MB idle, 768 MB under moderate load
  • CPU: Low — Go binary is efficient
  • Disk: 2 GB for application + database, plus user-uploaded images

Verdict

Fider is the best self-hosted alternative to Canny for teams that want transparent feature request management without paying $79-399/month. The setup is straightforward — a single Go binary with PostgreSQL — and the interface is clean enough for non-technical users to submit and vote on ideas. Where it falls short is in advanced analytics and integrations that paid tools offer (Jira sync, Slack notifications require custom webhooks). For most teams collecting product feedback, Fider handles the core workflow well.

Comments