mirror of
https://github.com/Dokploy/templates.git
synced 2026-06-15 20:25:24 +02:00
Add Libredesk service (#327)
* Add Libredesk blueprint with `template.toml`, `docker-compose.yml`, and meta data updates for self-hosted customer support desk * Update `meta.json` links for Libredesk blueprint * Update meta.json * Reorganize Libredesk entry in meta.json Moved the Libredesk metadata entry to a new position in the file while maintaining its details, including description, links, and tags. This change ensures consistency in the structure of the metadata entries. --------- Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
This commit is contained in:
54
blueprints/libredesk/docker-compose.yml
Normal file
54
blueprints/libredesk/docker-compose.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
services:
|
||||
libredesk:
|
||||
image: libredesk/libredesk:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 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:-}
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
volumes:
|
||||
- ../files/uploads:/libredesk/uploads:rw
|
||||
- ../files/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
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Only bind on the local interface. To connect to Postgres externally, change this to 0.0.0.0
|
||||
- 5432
|
||||
environment:
|
||||
# Set these environment variables to configure the database, defaults to libredesk.
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
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
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Only bind on the local interface.
|
||||
- 6379
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
|
||||
networks:
|
||||
libredesk:
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
redis-data:
|
||||
11
blueprints/libredesk/libredesk.svg
Normal file
11
blueprints/libredesk/libredesk.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="215" height="32" viewBox="0 0 215 32" fill="none">
|
||||
<path d="M190.958 31V1.2H196.398V16.72L194.918 16.2L207.598 1.2H214.438L202.558 15.28L202.878 11.44L214.798 31H208.398L200.398 17.88L196.398 22.64V31H190.958Z" fill="white"/>
|
||||
<path d="M175.7 31.48C173.806 31.48 172.046 31.1333 170.42 30.44C168.82 29.7467 167.433 28.7867 166.26 27.56C165.113 26.3067 164.273 24.8533 163.74 23.2L168.26 21.24C168.98 22.9467 170.02 24.2933 171.38 25.28C172.74 26.24 174.273 26.72 175.98 26.72C176.94 26.72 177.766 26.5733 178.46 26.28C179.18 25.96 179.726 25.5333 180.1 25C180.5 24.4667 180.7 23.8267 180.7 23.08C180.7 22.2 180.433 21.48 179.9 20.92C179.393 20.3333 178.62 19.88 177.58 19.56L171.86 17.72C169.54 17 167.793 15.92 166.62 14.48C165.446 13.04 164.86 11.3467 164.86 9.4C164.86 7.69333 165.273 6.18667 166.1 4.88C166.953 3.57333 168.126 2.56 169.62 1.84C171.14 1.09333 172.873 0.720001 174.82 0.720001C176.606 0.720001 178.246 1.04 179.74 1.68C181.233 2.29333 182.513 3.16 183.58 4.28C184.673 5.37333 185.486 6.66667 186.02 8.16L181.54 10.16C180.953 8.66667 180.073 7.52 178.9 6.72C177.726 5.89333 176.366 5.48 174.82 5.48C173.913 5.48 173.113 5.64 172.42 5.96C171.726 6.25333 171.18 6.68 170.78 7.24C170.406 7.77333 170.22 8.41334 170.22 9.16C170.22 9.98667 170.486 10.72 171.02 11.36C171.553 11.9733 172.366 12.4533 173.46 12.8L178.94 14.52C181.313 15.2933 183.086 16.36 184.26 17.72C185.46 19.08 186.06 20.76 186.06 22.76C186.06 24.4667 185.62 25.9733 184.74 27.28C183.86 28.5867 182.646 29.6133 181.1 30.36C179.553 31.1067 177.753 31.48 175.7 31.48Z" fill="white"/>
|
||||
<path d="M141.271 31V1.2H161.071V6H146.711V13.64H160.271V18.44H146.711V26.2H161.071V31H141.271Z" fill="white"/>
|
||||
<path d="M111.661 31V1.2H121.381C124.528 1.2 127.261 1.84 129.581 3.12C131.928 4.37333 133.741 6.12 135.021 8.36C136.301 10.5733 136.941 13.1467 136.941 16.08C136.941 18.9867 136.301 21.5733 135.021 23.84C133.741 26.08 131.928 27.84 129.581 29.12C127.261 30.3733 124.528 31 121.381 31H111.661ZM117.101 26.2H121.501C123.528 26.2 125.275 25.7867 126.741 24.96C128.235 24.1067 129.395 22.9333 130.221 21.44C131.048 19.92 131.461 18.1333 131.461 16.08C131.461 14 131.048 12.2133 130.221 10.72C129.395 9.22667 128.235 8.06666 126.741 7.24C125.275 6.41333 123.528 6 121.501 6H117.101V26.2Z" fill="white"/>
|
||||
<path d="M87.8722 31V1.2H107.672V6H93.3122V13.64H106.872V18.44H93.3122V26.2H107.672V31H87.8722Z" fill="white"/>
|
||||
<path d="M61.4269 31V1.2H72.5069C74.5335 1.2 76.3202 1.57333 77.8669 2.32C79.4402 3.04 80.6669 4.10666 81.5469 5.52C82.4269 6.90666 82.8669 8.6 82.8669 10.6C82.8669 12.6533 82.3735 14.4 81.3869 15.84C80.4269 17.28 79.1202 18.3467 77.4669 19.04L84.3069 31H78.1469L70.8269 17.92L74.3469 20H66.8669V31H61.4269ZM66.8669 15.2H72.5869C73.5735 15.2 74.4269 15.0133 75.1469 14.64C75.8669 14.24 76.4269 13.6933 76.8269 13C77.2269 12.3067 77.4269 11.5067 77.4269 10.6C77.4269 9.66667 77.2269 8.86666 76.8269 8.2C76.4269 7.50666 75.8669 6.97333 75.1469 6.6C74.4269 6.2 73.5735 6 72.5869 6H66.8669V15.2Z" fill="white"/>
|
||||
<path d="M33.7706 31V1.2H46.3306C48.304 1.2 49.984 1.54666 51.3706 2.24C52.784 2.90667 53.864 3.86667 54.6106 5.12C55.384 6.34667 55.7706 7.84 55.7706 9.6C55.7706 10.96 55.3973 12.24 54.6506 13.44C53.9306 14.6133 52.7706 15.5867 51.1706 16.36V13.84C52.6373 14.4 53.7973 15.0933 54.6506 15.92C55.504 16.7467 56.104 17.6667 56.4506 18.68C56.7973 19.6933 56.9706 20.76 56.9706 21.88C56.9706 24.7333 56.024 26.9733 54.1306 28.6C52.264 30.2 49.664 31 46.3306 31H33.7706ZM39.2106 26.2H46.8906C48.304 26.2 49.424 25.8133 50.2506 25.04C51.104 24.24 51.5306 23.1867 51.5306 21.88C51.5306 20.5733 51.104 19.52 50.2506 18.72C49.424 17.92 48.304 17.52 46.8906 17.52H39.2106V26.2ZM39.2106 12.76H46.6106C47.7306 12.76 48.624 12.44 49.2906 11.8C49.9573 11.1333 50.2906 10.28 50.2906 9.24C50.2906 8.2 49.9573 7.37333 49.2906 6.76C48.624 6.14667 47.7306 5.84 46.6106 5.84H39.2106V12.76Z" fill="white"/>
|
||||
<path d="M22.5988 31V1.2H28.0388V31H22.5988Z" fill="white"/>
|
||||
<path d="M0.880005 31V1.2H6.32V26.2H19.08V31H0.880005Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
152
blueprints/libredesk/template.toml
Normal file
152
blueprints/libredesk/template.toml
Normal file
@@ -0,0 +1,152 @@
|
||||
[variables]
|
||||
libredesk_domain = "${domain}"
|
||||
|
||||
libredesk_system_user_password = "${base64:32}"
|
||||
|
||||
pg_username = "${username}"
|
||||
pg_password = "${password:16}"
|
||||
pg_database = "libredesk"
|
||||
|
||||
[config]
|
||||
env = [
|
||||
"LIBREDESK_SYSTEM_USER_PASSWORD=${libredesk_system_user_password}",
|
||||
"POSTGRES_USER=${pg_username}",
|
||||
"POSTGRES_PASSWORD=${pg_password}",
|
||||
"POSTGRES_DB=${pg_database}",
|
||||
]
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "libredesk"
|
||||
port = 9000
|
||||
host = "${libredesk_domain}"
|
||||
|
||||
[[config.mounts]]
|
||||
filePath = "config.toml"
|
||||
content = """
|
||||
|
||||
[app]
|
||||
# Log level: info, debug, warn, error, fatal
|
||||
log_level = "debug"
|
||||
# Environment: dev, prod.
|
||||
# Setting to "dev" will enable color logging in terminal.
|
||||
env = "dev"
|
||||
# Whether to automatically check for application updates on start up, app updates are shown as a banner in the admin panel.
|
||||
check_updates = true
|
||||
|
||||
# HTTP server.
|
||||
[app.server]
|
||||
# Address to bind the HTTP server to.
|
||||
address = "0.0.0.0:9000"
|
||||
# Unix socket path (leave empty to use TCP address instead)
|
||||
socket = ""
|
||||
# Do NOT disable secure cookies in production environment if you don't know exactly what you're doing!
|
||||
disable_secure_cookies = false
|
||||
# Request read and write timeouts.
|
||||
read_timeout = "5s"
|
||||
write_timeout = "5s"
|
||||
# Maximum request body size in bytes (100MB)
|
||||
# If you are using proxy, you may need to configure them to allow larger request bodies.
|
||||
max_body_size = 104857600
|
||||
# Size of the read buffer for incoming requests
|
||||
read_buffer_size = 4096
|
||||
# Keepalive settings.
|
||||
keepalive_timeout = "10s"
|
||||
|
||||
# File upload provider to use, either `fs` or `s3`.
|
||||
[upload]
|
||||
provider = "fs"
|
||||
|
||||
# Filesystem provider.
|
||||
[upload.fs]
|
||||
# Directory where uploaded files are stored, make sure this directory exists and is writable by the application.
|
||||
upload_path = 'uploads'
|
||||
|
||||
# S3 provider.
|
||||
[upload.s3]
|
||||
# S3 endpoint URL (required only for non-AWS S3-compatible providers like MinIO).
|
||||
# Leave empty to use default AWS endpoints.
|
||||
url = ""
|
||||
|
||||
# AWS S3 credentials, keep empty to use attached IAM roles.
|
||||
access_key = ""
|
||||
secret_key = ""
|
||||
|
||||
# AWS region, e.g., "us-east-1", "eu-west-1", etc.
|
||||
region = "ap-south-1"
|
||||
# S3 bucket name where files will be stored.
|
||||
bucket = "bucket-name"
|
||||
# Optional prefix path within the S3 bucket where files will be stored.
|
||||
# Example, if set to "uploads/media", files will be stored under that path.
|
||||
# Useful for organizing files inside a shared bucket.
|
||||
bucket_path = ""
|
||||
# S3 signed URL expiry duration (e.g., "30m", "1h")
|
||||
expiry = "30m"
|
||||
|
||||
# Postgres.
|
||||
[db]
|
||||
# If running locally, use `localhost`.
|
||||
host = "db"
|
||||
# Database port, default is 5432.
|
||||
port = 5432
|
||||
# Update the following values with your database credentials.
|
||||
user = "${pg_username}"
|
||||
password = "${pg_password}"
|
||||
database = "${pg_database}"
|
||||
ssl_mode = "disable"
|
||||
# Maximum number of open database connections
|
||||
max_open = 30
|
||||
# Maximum number of idle connections in the pool
|
||||
max_idle = 30
|
||||
# Maximum time a connection can be reused before being closed
|
||||
max_lifetime = "300s"
|
||||
|
||||
# Redis.
|
||||
[redis]
|
||||
# If running locally, use `localhost:6379`.
|
||||
address = "redis:6379"
|
||||
password = ""
|
||||
db = 0
|
||||
|
||||
[message]
|
||||
# Number of workers processing outgoing message queue
|
||||
outgoing_queue_workers = 10
|
||||
# Number of workers processing incoming message queue
|
||||
incoming_queue_workers = 10
|
||||
# How often to scan for outgoing messages to process, keep it low to process messages quickly.
|
||||
message_outgoing_scan_interval = "50ms"
|
||||
# Maximum number of messages that can be queued for incoming processing
|
||||
incoming_queue_size = 5000
|
||||
# Maximum number of messages that can be queued for outgoing processing
|
||||
outgoing_queue_size = 5000
|
||||
|
||||
[notification]
|
||||
# Number of concurrent notification workers
|
||||
concurrency = 2
|
||||
# Maximum number of notifications that can be queued
|
||||
queue_size = 2000
|
||||
|
||||
[automation]
|
||||
# Number of workers processing automation rules
|
||||
worker_count = 10
|
||||
|
||||
[autoassigner]
|
||||
# How often to run automatic conversation assignment
|
||||
autoassign_interval = "5m"
|
||||
|
||||
[webhook]
|
||||
# Number of webhook delivery workers
|
||||
workers = 5
|
||||
# Maximum number of webhook deliveries that can be queued
|
||||
queue_size = 10000
|
||||
# HTTP timeout for webhook requests
|
||||
timeout = "15s"
|
||||
|
||||
[conversation]
|
||||
# How often to check for conversations to unsnooze
|
||||
unsnooze_interval = "5m"
|
||||
|
||||
[sla]
|
||||
# How often to evaluate SLA compliance for conversations
|
||||
evaluation_interval = "5m"
|
||||
|
||||
"""
|
||||
16
meta.json
16
meta.json
@@ -2898,6 +2898,22 @@
|
||||
"productivity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "libredesk",
|
||||
"name": "Libredesk",
|
||||
"logo": "libredesk.svg",
|
||||
"version": "latest",
|
||||
"description": "Open source, self-hosted customer support desk. Single binary app.",
|
||||
"links": {
|
||||
"github": "https://github.com/abhinavxd/libredesk",
|
||||
"website": "https://libredesk.io",
|
||||
"docs": "https://docs.libredesk.io/introduction"
|
||||
},
|
||||
"tags": [
|
||||
"storage",
|
||||
"object-storage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "linkding",
|
||||
"name": "Linkding",
|
||||
|
||||
Reference in New Issue
Block a user