# Libredesk

Self-hosted customer support desk with a shared inbox for a team.

- Replaces: [Zendesk](https://openlogs.fyi/alternatives/zendesk)
- Summary: Paid customer support desk services, such as Zendesk.
- Stack: Go (language), PostgreSQL (database), Redis (database)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md), read 2026-10-22)
- Difficulty: medium. 3 services (2 database or broker: postgres, redis), 4 volume mounts, no env values to set, no elevated host access. Heuristic score 5 of 11: medium. A source checkout is needed, so the rating is at least medium.
- Requirements: not stated
- Repository: [abhinavxd/libredesk](https://github.com/abhinavxd/libredesk)

## Install

1. Docker with the Compose plugin and git ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md))

   ```text
   A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
   ```

2. Get the source at commit 5668a2a ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md))

   ```bash
   git init libredesk
   cd libredesk
   git remote add origin https://github.com/abhinavxd/libredesk.git
   git fetch --depth 1 origin 5668a2a2c503b9304404d8f3620131b2990cbb99
   git checkout FETCH_HEAD
   ```

3. The compose file in the checkout: docker-compose.yml (shown here for reading) ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml))

   ```yaml
   services:
     # Libredesk app
     app:
       image: libredesk/libredesk:latest
       container_name: libredesk_app
       restart: unless-stopped
       ports:
         - "9000:9000"
       environment:
         # If the password is set during first docker-compose up, the system user password will be set to this value.
         # You can always set system user password later by running `docker exec -it libredesk_app ./libredesk --set-system-user-password`.
         LIBREDESK_SYSTEM_USER_PASSWORD: ${LIBREDESK_SYSTEM_USER_PASSWORD:-}
       networks:
         - libredesk
       depends_on:
         - db
         - redis
       volumes:
         - ./uploads:/libredesk/uploads:rw 
         - ./config.toml:/libredesk/config.toml
       command: [sh, -c, "./libredesk --install --idempotent-install --yes --config /libredesk/config.toml && ./libredesk --upgrade --yes --config /libredesk/config.toml && ./libredesk --config /libredesk/config.toml"]
   
     # PostgreSQL database
     db:
       image: postgres:17-alpine
       container_name: libredesk_db
       restart: unless-stopped
       networks:
         - libredesk
       ports:
         # Only bind on the local interface. To connect to Postgres externally, change this to 0.0.0.0
         - "127.0.0.1:5432:5432"
       environment:
         # Set these environment variables to configure the database, defaults to libredesk.
         POSTGRES_USER: ${POSTGRES_USER:-libredesk}
         POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-libredesk} 
         POSTGRES_DB: ${POSTGRES_DB:-libredesk}
       healthcheck:
         test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-libredesk} -d ${POSTGRES_DB:-libredesk}"]
         interval: 10s
         timeout: 5s
         retries: 6
       volumes:
         - postgres-data:/var/lib/postgresql/data
   
     # Redis
     redis:
       image: redis:7-alpine
       container_name: libredesk_redis
       restart: unless-stopped
       ports:
         # Only bind on the local interface.
         - "127.0.0.1:6379:6379"
       networks:
         - libredesk
       volumes:
         - redis-data:/data
   
   networks:
     libredesk:
   
   volumes:
     postgres-data:
     redis-data:
   ```

4. Copy config.sample.toml to config.toml ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md))

   ```bash
   cp config.sample.toml config.toml
   ```

5. What the compose file check ran with ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md))

   ```text
   The compose file check ran in a checkout of abhinavxd/libredesk at 5668a2a2c503b9304404d8f3620131b2990cbb99 (a sparse checkout: only the top-level files), after config.sample.toml was copied to config.toml. The README tells the reader to download docker-compose.yml and config.sample.toml, copy the sample to config.toml, edit it and run docker compose up -d.
   ```

6. Start it ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md))

   ```bash
   docker compose up -d
   ```

7. Open the app ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml))

   ```text
   Open http://localhost:9000. The compose file publishes host port 9000 for the app service. The README says to open this address and log in as the System user.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: app: libredesk/libredesk:latest. A later pull can get a different version. ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 9000 (app), 127.0.0.1:5432 (db), 127.0.0.1:6379 (redis). A port without a host address listens on all host network interfaces. ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./uploads at /libredesk/uploads (app), ./config.toml at /libredesk/config.toml (app). ([source](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 120
- Stars: 3062, forks: 320
- Last push: 2026-10-22 (0 days ago)
- Latest release: v2.9.0 on 2026-10-22 (0 days ago)

## Sources

- [Repository: https://github.com/abhinavxd/libredesk](https://github.com/abhinavxd/libredesk)
- [License: https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/LICENSE](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/LICENSE)
- [Business model: https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/README.md)
- [Compose file: https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml](https://github.com/abhinavxd/libredesk/blob/5668a2a2c503b9304404d8f3620131b2990cbb99/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/libredesk  
Last updated: 2026-10-22
