Cut
A tiny, self-hosted URL shortener — short links that are entirely yours, with per-link passwords, expiries, and click limits.
Configuration
services:
cut:
image: ghcr.io/mendylanda/cut:latest
restart: unless-stopped
depends_on:
redis:
condition: service_healthy
environment:
# Injected by Dokploy from template.toml (generated strong password).
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
# Bundled Redis below, private to the project network.
- REDIS_URL=redis://redis:6379
# Expose the container port only; Dokploy maps the domain to it.
ports:
- 3000
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:3000/"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: unless-stopped
# appendonly = durable across restarts; noeviction because this is Cut's
# primary datastore, not a cache (don't drop links under memory pressure).
command: redis-server --appendonly yes --maxmemory-policy noeviction
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
volumes:
redis-data:[variables]
main_domain = "${domain}"
admin_password = "${password:24}"
[config]
env = [
"ADMIN_PASSWORD=${admin_password}",
]
mounts = []
[[config.domains]]
serviceName = "cut"
port = 3000
host = "${main_domain}"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICBjdXQ6XG4gICAgaW1hZ2U6IGdoY3IuaW8vbWVuZHlsYW5kYS9jdXQ6bGF0ZXN0XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBkZXBlbmRzX29uOlxuICAgICAgcmVkaXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAjIEluamVjdGVkIGJ5IERva3Bsb3kgZnJvbSB0ZW1wbGF0ZS50b21sIChnZW5lcmF0ZWQgc3Ryb25nIHBhc3N3b3JkKS5cbiAgICAgIC0gQURNSU5fUEFTU1dPUkQ9JHtBRE1JTl9QQVNTV09SRH1cbiAgICAgICMgQnVuZGxlZCBSZWRpcyBiZWxvdywgcHJpdmF0ZSB0byB0aGUgcHJvamVjdCBuZXR3b3JrLlxuICAgICAgLSBSRURJU19VUkw9cmVkaXM6Ly9yZWRpczo2Mzc5XG4gICAgIyBFeHBvc2UgdGhlIGNvbnRhaW5lciBwb3J0IG9ubHk7IERva3Bsb3kgbWFwcyB0aGUgZG9tYWluIHRvIGl0LlxuICAgIHBvcnRzOlxuICAgICAgLSAzMDAwXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJ3Z2V0XCIsIFwiLXFPLVwiLCBcImh0dHA6Ly8xMjcuMC4wLjE6MzAwMC9cIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAxMFxuXG4gIHJlZGlzOlxuICAgIGltYWdlOiByZWRpczo3LWFscGluZVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgIyBhcHBlbmRvbmx5ID0gZHVyYWJsZSBhY3Jvc3MgcmVzdGFydHM7IG5vZXZpY3Rpb24gYmVjYXVzZSB0aGlzIGlzIEN1dCdzXG4gICAgIyBwcmltYXJ5IGRhdGFzdG9yZSwgbm90IGEgY2FjaGUgKGRvbid0IGRyb3AgbGlua3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS5cbiAgICBjb21tYW5kOiByZWRpcy1zZXJ2ZXIgLS1hcHBlbmRvbmx5IHllcyAtLW1heG1lbW9yeS1wb2xpY3kgbm9ldmljdGlvblxuICAgIHZvbHVtZXM6XG4gICAgICAtIHJlZGlzLWRhdGE6L2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRFwiLCBcInJlZGlzLWNsaVwiLCBcInBpbmdcIl1cbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogM3NcbiAgICAgIHJldHJpZXM6IDEwXG5cbnZvbHVtZXM6XG4gIHJlZGlzLWRhdGE6XG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuYWRtaW5fcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MjR9XCJcblxuW2NvbmZpZ11cbmVudiA9IFtcbiAgXCJBRE1JTl9QQVNTV09SRD0ke2FkbWluX3Bhc3N3b3JkfVwiLFxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiY3V0XCJcbnBvcnQgPSAzMDAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG4iCn0=Links
Tags
url-shortener, links
Version: 0.1.0