Skip to main content
50% off all plans, limited time. Starting at $2.48/mo
Kutt

Kutt

Kutt is a self-hosted URL shortener with custom domain support. Create and edit short links, view click statistics, manage users, and set link expiration, backed by PostgreSQL and Redis. MIT licensed with 10,000+ GitHub stars.

At a glance

11k

GitHub stars

3

Page views

284

Active installs

License MIT Version Latest OS Ubuntu Server 24.04 LTS Min RAM 1 GB IP IPV4

Active installs is sample data (staging preview); real metric wires in before launch.

Access

  • Open URL: https://<SERVER_IP>
  • HTTPS uses a self-signed certificate.
  • Browser warning is expected on first access.
  • Accept the browser certificate warning.
  • You will be redirected to /create-admin on first access.
  • Create an administrator account from the web interface.
  • Log in using the administrator account.

Important Files and Directories

  • Install Path: /root/kutt
  • Compose File: /root/kutt/docker-compose.yml
  • Environment File: /root/kutt/.env
  • Nginx Config: /etc/nginx/sites-available/kutt
  • SSL Certificate: /etc/nginx/ssl/kutt.crt
  • SSL Private Key: /etc/nginx/ssl/kutt.key
  • PostgreSQL Data Volume: /var/lib/docker/volumes/kutt_db_data_pg/_data
  • Redis Data Volume: /var/lib/docker/volumes/kutt_redis_data/_data
  • Custom Data Volume: /var/lib/docker/volumes/kutt_custom/_data

Docker Management

Check status:

docker compose -f /root/kutt/docker-compose.yml ps

View logs:

docker compose -f /root/kutt/docker-compose.yml logs -f

Restart service:

docker compose -f /root/kutt/docker-compose.yml restart

Stop service:

docker compose -f /root/kutt/docker-compose.yml down

Start service:

docker compose -f /root/kutt/docker-compose.yml up -d

NGINX Management

Test configuration:

nginx -t

Restart NGINX:

systemctl restart nginx

Reload NGINX:

systemctl reload nginx

Check status:

systemctl status nginx

Enabling SSL with a Domain

1. Point your domain to the server IP.

2. Edit Nginx config and replace both server_name _; with your domain (server_name <yourdomain.com>) for both HTTP (port 80) and HTTPS (port 443) blocks:

vim /etc/nginx/sites-available/kutt

3. Install Certbot:

apt install -y certbot python3-certbot-nginx

4. Run the following command to generate a valid Let's Encrypt certificate:

certbot certonly --nginx --non-interactive --agree-tos --email youremail@example.com -d yourdomain.com

5. Replace SSL paths in Nginx config:

vim /etc/nginx/sites-available/kutt
# Before:
    # ssl_certificate     /etc/nginx/ssl/kutt.crt;
    # ssl_certificate_key /etc/nginx/ssl/kutt.key;
# After:
    # ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

6. Reload Nginx to apply the changes:

systemctl reload nginx

7. Edit the /root/kutt/.env file to set your domain name: DEFAULT_DOMAIN=yourdomain.com

8. Recreate the services:

cd /root/kutt
docker compose up -d

9. Open your browser and visit: https://yourdomain.com

More in Self Hosted

Related apps.

Deploy Kutt now. From $2.48/mo.