Self Hosted Link-in-Bio Solution

October 5, 2025 · Vivaan M #Lab #Guide #Services

Table of Contents

It’s nice to keep a link in my Instagram bio that links to some of the stuff I work on, just in case anyone wanted to take a look. Previously, I’d just include a link to my GitHub, but recently, with my new website and this blog, I’d like other things to be accessible there. In this case you’d normally use a cloud-hosted link in bio solution, of which there are many of. But what’s the fun in that? How about we self-host one instead.

Enter: Linkstack - a highly customizable link sharing platform with an intuitive, easy to use user interface.

Linkstack is one of many self-hosted alternatives to Linktree, and I picked for it’s ease of setup and management. It’s pretty easy to get spun up, all you need is Docker and a domain you wish to use, in my case l.example.com .

Self-hosting

Spinning up Linkstack is pretty simple, you just need Docker installed:

 1services:
 2  linkstack:
 3    hostname: linkstack
 4    image: linkstackorg/linkstack:latest
 5    environment:
 6      TZ: Europe/London
 7      SERVER_ADMIN: serveradmin@example.com
 8      HTTP_SERVER_NAME: l.example.com
 9      HTTPS_SERVER_NAME: l.example.com
10      LOG_LEVEL: info
11      PHP_MEMORY_LIMIT: 256M
12      UPLOAD_MAX_FILESIZE: 8M
13    volumes:
14      - /lcl/linkstack:/htdocs
15    restart: unless-stopped
16    networks:
17      - proxy
18    labels:
19      - "traefik.enable=true"
20      # HTTP Routers
21      - "traefik.http.routers.l-rtr.entrypoints=websecure"
22      - "traefik.http.routers.l-rtr.rule=Host(`l.example.com`)"
23      - "traefik.http.routers.l-rtr.tls=true"
24      - "traefik.http.routers.l-rtr.tls.certresolver=cloudflare"
25      # Middlewares
26      - "traefik.http.routers.l-rtr.middlewares=chain-no-auth@file"
27      # HTTP Services
28      - "traefik.http.routers.l-rtr.service=l-svc"
29      - "traefik.http.services.l-svc.loadbalancer.server.port=80"
30
31networks:
32  proxy:
33    external: true

Just before we spin it up, however, we need to download the latest version of linkstack from the releases page, and extract into /lcl/linkstack or wherever else your linkstack data dir is.

1curl LINKSTACKURL -o linkstack.zip
2unzip ./linkstack.zip -d /lcl/linkstack

And then… start it.

1docker compose up -d

Once you’ve got it running, setting up Linkstack is relatively easy, you just following the steps on the UI. I set my Linkstack instance’s homepage to automatically redirect to my Linkstack page, and disabled signups so that no one else could use it.