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 quackbackStep 2: Configure Environment
Copy the example environment file:
cp .env.example .envEdit the environment file:
nano .envRequired 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.comOptional 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.comStep 3: Start the Services
Using Docker Compose:
docker compose up -dThis starts:
- Quackback application
- PostgreSQL database
- Redis cache (optional)
Check that everything is running:
docker compose psStep 4: Run Migrations
Initialize the database:
docker compose exec app bun run db:migrateStep 5: Create Admin Account
Create your first admin user:
docker compose exec app bun run create-adminFollow 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
- Open
https://feedback.yourdomain.comin your browser - Log in with your admin credentials
- Create your first workspace
Troubleshooting
Container Won't Start
Check logs:
docker compose logs appCommon 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 dbCheck your DATABASE_URL format:
postgresql://user:password@db:5432/quackbackNote: Use db as host when using Docker Compose, not localhost.
Permission Errors
Ensure proper file permissions:
sudo chown -R 1000:1000 ./dataSSL Certificate Issues
Using Let's Encrypt with Certbot:
sudo certbot --nginx -d feedback.yourdomain.comNext Steps
Next: Configuration