QuackbackQuackback Docs
Self-Hosting

Installation

Step-by-step guide to installing self-hosted Quackback.

Installation

Follow this guide to deploy Quackback on your own infrastructure.

Prerequisites

Before starting, ensure you have:

  • A Linux server (Ubuntu 22.04 recommended)
  • Docker and Docker Compose installed
  • A domain name pointed to your server
  • Basic command line knowledge

Step 1: Clone the Repository

git clone https://github.com/quackback/quackback.git
cd quackback

Step 2: Configure Environment

Copy the example environment file:

cp .env.example .env

Edit the environment file:

nano .env

Required Settings

# Application
APP_URL=https://feedback.yourdomain.com
APP_SECRET=generate-a-random-32-char-string

# Database
DATABASE_URL=postgresql://user:password@localhost:5432/quackback

# Email (for notifications)
SMTP_HOST=smtp.yourdomain.com
SMTP_PORT=587
SMTP_USER=your-email@yourdomain.com
SMTP_PASSWORD=your-email-password
SMTP_FROM=feedback@yourdomain.com

Optional Settings

# Redis (improves performance)
REDIS_URL=redis://localhost:6379

# OAuth Providers
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret

# Storage (for file uploads)
S3_BUCKET=your-bucket
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_ENDPOINT=https://s3.amazonaws.com

Step 3: Start the Services

Using Docker Compose:

docker compose up -d

This starts:

  • Quackback application
  • PostgreSQL database
  • Redis cache (optional)

Check that everything is running:

docker compose ps

Step 4: Run Migrations

Initialize the database:

docker compose exec app bun run db:migrate

Step 5: Create Admin Account

Create your first admin user:

docker compose exec app bun run create-admin

Follow the prompts to set your email and password.

Step 6: Configure Reverse Proxy

Using Nginx

server {
    listen 80;
    server_name feedback.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name feedback.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/feedback.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/feedback.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        proxy_cache_bypass $http_upgrade;
    }
}

Using Caddy

feedback.yourdomain.com {
    reverse_proxy localhost:3000
}

Caddy handles SSL automatically.

Step 7: Verify Installation

  1. Open https://feedback.yourdomain.com in your browser
  2. Log in with your admin credentials
  3. Create your first workspace

Troubleshooting

Container Won't Start

Check logs:

docker compose logs app

Common issues:

  • Database connection failed — check DATABASE_URL
  • Port already in use — change the port in docker-compose.yml

Database Connection Issues

Verify PostgreSQL is running:

docker compose logs db

Check your DATABASE_URL format:

postgresql://user:password@db:5432/quackback

Note: Use db as host when using Docker Compose, not localhost.

Permission Errors

Ensure proper file permissions:

sudo chown -R 1000:1000 ./data

SSL Certificate Issues

Using Let's Encrypt with Certbot:

sudo certbot --nginx -d feedback.yourdomain.com

Next Steps


Next: Configuration

On this page