Self Hosted Link-in-Bio Solution
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.