Skip to main content
When you choose to self-host, the responsibility for updates, maintenance, and merging future enhancements rests entirely with you.
We highly recommend the Cloud version, unless you have hard requirements to manage your own infrastructure.

Minimum System Requirements

Software requirements:
  • Docker 24+ and Docker Compose v2+
  • A domain with DNS A record pointing to your server
  • Ports 80 and 443 open (for web traffic and TLS)

Quick Start

The fastest way to get Sweetr running is with our deploy script. It will guide you through the setup, including creating a GitHub App with the correct permissions.
The script will:
  1. Check that Docker and Docker Compose are installed
  2. Ask for your domain and GitHub organization handle
  3. Generate a pre-filled URL to create a GitHub App with all required permissions
  4. Collect your GitHub App credentials
  5. Optionally configure Slack integration
  6. Generate docker-compose.yml and .env files
  7. Start the stack
To install a specific version, set the SWEETR_TAG environment variable:

Manual Setup

If you prefer to set things up manually, follow the steps below.

Prerequisites

1

Create a GitHub Application

You’ll need to create a GitHub application.Use our pre-filled link to speed this up — replace YOUR_DOMAIN with your actual domain after opening it.After opening the link, you must also:
  • Uncheck “Expire user authorization tokens”
  • Generate and set a Webhook Secret
  • Submit the form, then generate a Client Secret
  • Generate a Private Key (this downloads a .pem file)
Create the app under your organization account (not your personal account) so it can be installed on the organization directly. Use https://github.com/organizations/YOUR_ORG/settings/apps/new as the base URL.
2

Create a Slack App (Optional)

Create a Slack app at https://api.slack.com/apps/new:
  • Create a Redirect URL: https://your-domain.com/settings/integrations/slack
  • Add the following Bot Token Scopes:
    • app_mentions:read
    • channels:join
    • channels:read
    • chat:write
    • groups:read
    • im:read
    • im:write
    • mpim:read
    • reactions:read
    • users.profile:read
    • users:read
    • users:read.email
3

Create a Caddyfile

Create a Caddyfile for the reverse proxy. Caddy automatically provisions and renews HTTPS certificates via Let’s Encrypt.
A public domain is required — GitHub cannot deliver webhooks to localhost. For local development, use a tunnel like Cloudflare Tunnel or ngrok and use the tunnel URL as your domain.
4

Create docker-compose.yml

Create a docker-compose.yml file:
5

Configure environment variables

Create a .env file. See the Environment Variables Reference below for all available options.
6

Start the stack

The API container will automatically run database migrations on startup.
7

Complete onboarding

After logging in, the initial data sync will begin. Follow the Onboarding Guide to review what was set up and configure your workspace.

Environment Variables Reference

API (sweetr/api)

Web (sweetr/web)

Upgrading

To upgrade to a new version:
Database migrations run automatically on API container startup. To pin a specific version instead of latest, edit the image tags in docker-compose.yml:

Monitoring (Optional)

Sentry

Add to your API .env:
For frontend error tracking, also add to your .env:
The web container reads this as the SENTRY_DSN environment variable.

LogTail

BullBoard (Job Queue Dashboard)

To enable the BullBoard dashboard for monitoring background jobs:
Access it at https://your-domain.com/api/bullboard.

Troubleshooting

API fails to start

Check the container logs:
Common causes:
  • Database connection failed: Ensure Postgres is healthy with docker compose ps. The API waits for migrations to run on startup.
  • Missing environment variables: The API will log which required variables are missing.
  • Redis connection failed: Ensure Dragonfly is healthy. Check that REDIS_CONNECTION_STRING uses the Docker service name (e.g., redis://dragonfly:6379).

Web app shows blank page

Check the browser console for errors. Common causes:
  • API_ENDPOINT is wrong: Make sure it’s the full URL reachable from the browser (not an internal Docker hostname).
  • CORS errors: Ensure FRONTEND_URL on the API matches the URL you’re accessing the web app from.

Database migration errors

If migrations fail on startup, check the API logs. You may need to connect to Postgres directly:

Port conflicts

If port 80 or 443 is already in use, either stop the conflicting service or change the Caddy port mappings in docker-compose.yml:
Then update your Caddyfile to match (e.g., :8080 {) and adjust FRONTEND_URL and API_ENDPOINT in .env accordingly.