LinkBreeze कसे होस्ट करावे: संपूर्ण मार्गदर्शक
Docker Compose आणि Caddy वापरून स्वतःच्या VPS वर LinkBreeze कसे सेट करायचे ते शिका. यात cookieless ट्रॅकिंग, SQLite डेटाबेस आणि सुरक्षित डिप्लॉयमेंटसाठी आवश्यक पायऱ्या दिल्या आहेत.
LinkBreeze म्हणजे काय
LinkBreeze हा self-hosted Linktree चा पर्याय आहे: हा एक Docker container आहे जो सार्वजनिक link-in-bio पेज आणि admin dashboard चालवतो. यामध्ये सर्व माहिती एकाच SQLite फाईलमध्ये साठवली जाते. हे MIT लायसन्स अंतर्गत उपलब्ध असून TypeScript आणि Next.js मध्ये लिहिलेले आहे आणि ghcr.io/manak-hash/linkbreeze म्हणून प्रकाशित केले आहे. हे चालवण्यासाठी तुम्हाला एक VPS, त्या VPS कडे निर्देश करणारा A record असलेला domain, 80 आणि 443 पोर्ट्स खुले असणे आणि Docker Engine सोबत Compose plugin असणे आवश्यक आहे.
हे मार्गदर्शक रिपॉझिटरीद्वारे समर्थित असलेल्या deployment बद्दल माहिती देते: reverse proxy च्या मागे असलेले Docker Compose, जे स्वतःची प्रमाणपत्रे (certificates) मिळवते. यामध्ये काय बिघडू शकते हे देखील समाविष्ट आहे, कारण link-in-bio ही एक सार्वजनिक URL असते ज्यावर इतर लोक क्लिक करतात आणि ती बंद असल्यास तुम्हाला क्लिक गमवावे लागते.
या सर्वांच्या आधी, हा प्रकल्प किती नवीन आहे हे लक्षात घ्या.
LinkBreeze सार्वजनिक प्रोफाइल लिंकसाठी पुरेसे प्रगल्भ आहे का?
ऑगस्ट 2026 पर्यंत, या रिपॉझिटरीला 178 स्टार्स, 17 फोर्क्स आणि एकच मेंटेनकर्ता आहे. पहिली टॅग केलेली आवृत्ती, v1.0.0, 1 जुलै 2026 ची आहे. हा प्रकल्प काही वर्षांचा नसून केवळ काही आठवड्यांचा आहे.
The data behind this chart
[
{
"week": "2026-06-29",
"releases": 3,
"cumulative": 3
},
{
"week": "2026-07-06",
"releases": 3,
"cumulative": 6
},
{
"week": "2026-07-13",
"releases": 1,
"cumulative": 7
},
{
"week": "2026-07-20",
"releases": 2,
"cumulative": 9
},
{
"week": "2026-07-27",
"releases": 3,
"cumulative": 12
},
{
"week": "2026-08-03",
"releases": 2,
"cumulative": 14
},
{
"week": "2026-08-10",
"releases": 3,
"cumulative": 17
}
]v1.0.0 पासून, या प्रकल्पाने 17 टॅग केलेल्या आवृत्त्या 7 कॅलेंडर आठवड्यांमध्ये रिलीज केल्या आहेत. हे मार्गदर्शक लिहिताना त्या तक्त्यातील शेवटचा आठवडा सुरूच होता आणि त्यात आधीच 3 आवृत्त्या होत्या.
याकडे दोन स्वतंत्र तथ्ये म्हणून पहा. मेंटेनकर्ता सक्रिय आहे आणि त्रुटी काही दिवसांतच दूर केल्या जातात. मात्र, स्कीमा आणि डीफॉल्ट सेटिंग्ज अजूनही बदलत आहेत, त्यामुळे तुम्ही एकदा डिप्लॉय करून विसरलेले इन्स्टन्स मूळ कोडपासून खूप दूर जाऊ शकते.
परवाना तुम्हाला सर्वात वाईट परिस्थितीपासून वाचवतो. MIT परवाना, कंटेनर इमेज आणि तुमच्या स्वतःच्या डिस्कवरील SQLite फाईल याचा अर्थ असा की, जर विकास थांबला तरी तुमच्याकडे असलेले सॉफ्टवेअर चालू राहील. मात्र, हे तुम्हाला अशा सार्वजनिक वेब ॲपपासून वाचवत नाही ज्याला सुरक्षा अपडेट्स मिळणे बंद झाले आहे, जे कालांतराने एक दायित्व (liability) बनू शकते. हे अशा प्रकारे डिप्लॉय करा की तुम्ही ते नियमितपणे अपडेट करत राहाल आणि खाली दिलेली बॅकअप प्रक्रिया पहिल्या दिवसापासून कार्यरत ठेवाल.
इमेज टॅग पिन करा आणि latest वापरू नका
रिलीज वर्कफ्लो प्रत्येक व्हर्जनसाठी नेमके दोन टॅग पुश करतो: latest, आणि v काढून टाकलेला व्हर्जन नंबर. त्यामुळे v1.2.7 या रिलीजसाठी पिन केलेला टॅग ghcr.io/manak-hash/linkbreeze:1.2.7 असा आहे. :v1.2.7 लिहिल्याने काहीही पुल होत नाही आणि Docker manifest unknown असा रिपोर्ट देतो, कारण तो टॅग कधीही पुश केलेला नसतो.
तो पिन करा कारण latest बदलत असतो. वरील चार्टमधील गतीनुसार, latest विरुद्धचा docker compose pull म्हणजे तुमच्या वापरकर्त्यांनी वापरत असलेल्या पेजचे अनरीव्ह्यू केलेले अपग्रेड असते. पिन केलेल्या टॅगमुळे, तुम्ही फाईल एडिट करता तेव्हाच अपग्रेड होते.
इमेजबाबत आणखी एक गोष्ट. रिलीज वर्कफ्लो कोणत्याही platforms: सेटिंगशिवाय बिल्ड होतो, त्यामुळे प्रकाशित केलेली इमेज फक्त linux/amd64 असते. arm64 होस्टवर पुल करताना no matching manifest for linux/arm64/v8 in the manifest list entries मुळे ते अपयशी ठरते. जर तुम्ही x86 ऐवजी ARM VPS वापरत असाल, तर इमेज त्या मशीनवरच बिल्ड करा:
git clone --branch v1.2.7 --depth 1 https://github.com/Manak-hash/LinkBreeze.git
cd LinkBreeze
docker build -t linkbreeze:1.2.7 .त्यानंतर खालील compose फाईलमध्ये इमेजचे नाव म्हणून linkbreeze:1.2.7 वापरा.
Caddy च्या मागे LinkBreeze डिप्लॉय करणे आणि स्वयंचलित TLS वापरणे
Caddy स्वतःहून Let's Encrypt कडून प्रमाणपत्रे मिळवते आणि नूतनीकरण करते, त्यामुळे TLS (transport layer security) साठी स्वतंत्र प्रमाणपत्राची प्रक्रिया करण्याची गरज नाही. संपूर्ण डिप्लॉयमेंट एका डिरेक्टरीमधील तीन फाईल्सवर आधारित आहे.
प्रथम secret तयार करा:
mkdir -p ~/linkbreeze && cd ~/linkbreeze
printf 'SECRET_KEY=%s\n' "$(openssl rand -hex 32)" > .env
chmod 600 .envSECRET_KEY हे ॲडमिन सेशन कुकी साइन करते आणि ॲनालिटिक्स व्हिजिटर हॅशला सॉल्ट करते. रिपॉझिटरीमध्ये दिलेली compose फाईल डीफॉल्टनुसार ${SECRET_KEY:-changeme-in-production} वापरते, त्यामुळे जर तुम्ही ही पायरी वगळली, तर तुमची इन्स्टन्स अशा सेशन साइनिंग की सह चालेल जी GitHub वर सार्वजनिकरित्या उपलब्ध आहे. पहिल्यांदा सुरू करण्यापूर्वीच हे सेट करा, कारण नंतर बदलल्यास तुम्ही लॉग-आउट व्हाल आणि ॲनालिटिक्स सॉल्ट रिसेट होईल.
docker-compose.yml लिहा:
services:
linkbreeze:
image: ghcr.io/manak-hash/linkbreeze:1.2.7
restart: unless-stopped
volumes:
- linkbreeze-data:/app/data
environment:
- DATABASE_PATH=/app/data/linkbreeze.db
- SECRET_KEY=${SECRET_KEY}
- BASE_URL=https://links.example.com
networks:
- linkbreeze-net
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
networks:
- linkbreeze-net
networks:
linkbreeze-net:
volumes:
linkbreeze-data:
caddy-data:
caddy-config:BASE_URL ऐच्छिक आहे परंतु ते सेट करणे फायदेशीर ठरते: हे ॲपला त्याचा खरा सार्वजनिक पत्ता सांगते, जेणेकरून बनावट Host हेडरसह आलेली विनंती ॲपला दुसऱ्याच्या डोमेनवर लिंक तयार करण्यास भाग पाडू शकणार नाही.
त्याच्या शेजारी Caddyfile लिहा, तुमच्या स्वतःच्या डोमेनसह:
links.example.com {
encode zstd gzip
reverse_proxy linkbreeze:3000
}Caddy डीफॉल्टनुसार प्रॉक्सी केलेल्या विनंत्यांवर X-Forwarded-For आणि X-Forwarded-Proto सेट करते, ज्यावर ॲनालिटिक्स अवलंबून असतात. आता ते सुरू करा:
docker compose up -d
docker compose ps
docker compose logs -f caddydocker compose ps ने LinkBreeze कंटेनर healthy म्हणून दिसला पाहिजे. इमेजमध्ये स्वतःचे हेल्थचेक wget --spider -q http://127.0.0.1:3000/api/health समाविष्ट आहे, त्यामुळे तुम्हाला ते वेगळे जोडण्याची गरज नाही. रिपॉझिटरीच्या स्वतःच्या Caddy उदाहरणातून हेल्थचेक कॉपी करू नका: ते curl ला कॉल करते, आणि ही इमेज node:22-alpine वर आधारित आहे, ज्यामध्ये busybox wget आहे पण curl नाही. तो कंटेनर पेजेस व्यवस्थित सर्व्ह करत असतानाही unhealthy रिपोर्ट करतो.
ब्राउझरमध्ये https://links.example.com उघडा. पहिली भेट /setup वरील सेटअप विझार्डवर जाते, जे सिंगल ॲडमिन खाते तयार करते. त्यानंतर डॅशबोर्ड /dashboard वर आणि लॉगिन फॉर्म /login वर उपलब्ध असतो. ते खाते या इन्स्टन्सपुरते मर्यादित असते आणि ॲपमध्ये सिंगल साइन-ऑनची सुविधा नाही, त्यामुळे जर तुम्हाला डॅशबोर्डसाठी इतर सर्व सेवांप्रमाणेच समान लॉगिन हवे असेल, तर ते self-hosted Authentik सारख्या फॉरवर्ड ऑथ प्रॉक्सीद्वारे करावे लागेल.
compose फाईल काय करत नाही ते लक्षात घ्या: ती पोर्ट 3000 कधीही पब्लिश करत नाही. फक्त Caddy सार्वजनिक इंटरफेसवर लिसन करते. जर Compose फाईल सिंटॅक्स नवीन असेल, तर VPS साठी Docker Compose ची मूलभूत माहिती या फाईलसाठी आवश्यक असलेले भाग स्पष्ट करते, आणि जर तुम्ही आधीच समोर काहीतरी चालवत असाल, तर Nginx, Caddy आणि Traefik ची तुलना काय बदल करावे लागतील हे सांगते. रिपॉझिटरीमध्ये Certbot सह Nginx, Traefik आणि Cloudflare टनेलसाठी कार्यरत उदाहरणे दिली आहेत.
तुमचा डेटा कोठे राहतो आणि बॅकअपमध्ये काय समाविष्ट असावे
DATABASE_PATH हे /app/data/linkbreeze.db कडे निर्देश करते. अपलोड केलेले अवतार आणि लिंक थंबनेल याच्या शेजारी /app/data/uploads मध्ये लिहिलेले असतात. हे दोन्ही linkbreeze-data या named volume मध्ये असतात, त्यामुळे बॅकअपचे एकक हे volume असते, केवळ डेटाबेस फाईल नाही. जर तुम्ही अपलोड डिरेक्टरीशिवाय फाईल रिस्टोर केली, तर पेजवरील प्रत्येक इमेज 404 एरर देईल.
इतर सर्व काही खरोखर त्या एका डेटाबेसमध्ये असते: पेजेस, लिंक्स, सेटिंग्स, थीम, ईमेल सबस्क्राइबर्स आणि ॲनालिटिक्सच्या ओळी.
कंटेनर थांबवून प्रत घ्या:
docker compose stop linkbreeze
docker compose cp linkbreeze:/app/data ./backup-$(date +%F)
docker compose start linkbreezeप्रथम कंटेनर थांबवा, कारण SQLite डेटाबेसमध्ये प्रक्रिया लिहित असताना त्याची प्रत घेतल्यास अर्धवट राहिलेला व्यवहार (transaction) कॉपी होऊ शकतो आणि ती प्रत करप्ट फाईल म्हणून उघडते. कॉपी सुरू असताना पेज ऑफलाइन असते. रिस्टोर करणे ही उलट प्रक्रिया आहे:
docker compose stop linkbreeze
docker compose cp ./backup-2026-08-14/. linkbreeze:/app/data
docker compose start linkbreeze
docker compose logs -f linkbreezeडॅशबोर्ड JSON एक्सपोर्टची सुविधा देखील देतो, जी /api/backup वरून linkbreeze-backup-YYYY-MM-DD.json म्हणून सर्व्ह केली जाते. यामध्ये प्रोफाईल, लिंक्स, सेटिंग्स आणि सेव्ह केलेल्या थीम्स असतात. यामध्ये ॲनालिटिक्स हिस्ट्री, ईमेल सबस्क्राइबर्स किंवा अपलोड केलेल्या इमेजेस नसतात आणि ते रिस्टोर केल्यास त्या चार टेबलमधील सध्याच्या ओळी हटवून फाईलमधील माहिती टाकली जाते. याला होस्ट बदलण्यासाठी किंवा एडिटिंगमधील चूक सुधारण्यासाठी एक कॉन्फिगरेशन स्नॅपशॉट म्हणून वापरा. व्हॉल्यूमची प्रत हाच खरा बॅकअप आहे.
येथे दोन स्टोरेज नियम लागू होतात, जे इतरत्र running SQLite in production on a VPS साठी देखील लागू आहेत. डेटाबेस लोकल डिस्कवर ठेवा, कारण नेटवर्क फाईलसिस्टमवर SQLite चे लॉकिंग अविश्वसनीय असते आणि करप्ट पेज मिळाल्यावरच तुम्हाला ते समजते. आणि जर तुम्ही named volume ऐवजी host bind mount वापरत असाल, तर प्रथम होस्ट डिरेक्टरीचे chown करा: कंटेनर हा non-root node युजर म्हणून चालतो, ज्याचा uid node:22-alpine मध्ये 1000 असतो. root ने तयार केलेली डिरेक्टरी या युजरला लिहिता येत नाही, त्यामुळे ॲप डेटाबेस उघडू शकत नाही आणि कंटेनर सुरू होताच बंद होतो. Bind mounts against named volumes in Compose मध्ये यातील फरकाची सविस्तर माहिती दिली आहे.
अॅनालिटिक्स आणि संमती बॅनरची आवश्यकता नाही
इतरत्र मोफत उपलब्ध असलेले पेज स्वतः होस्ट करण्याचे हे एक महत्त्वाचे वैशिष्ट्य आहे.
हे अॅनालिटिक्स कुकीजचा वापर करत नाहीत. अभ्यागतासाठी कोणतीही कुकी सेट केली जात नाही आणि सार्वजनिक पेजवर कोणतीही थर्ड-पार्टी स्क्रिप्ट लोड होत नाही. अभ्यागताची ओळख IP address, user agent string आणि एका salt च्या SHA-256 हॅशद्वारे पटवली जाते, जो 16 हेक्साडेसिमल कॅरेक्टर्सपर्यंत मर्यादित असतो. हे salt स्वतः सध्याच्या UTC तारखेचा आणि तुमच्या SECRET_KEY चा हॅश असते, त्यामुळे ते मध्यरात्री UTC ला बदलते आणि कालचे हॅश आजच्या हॅशशी जुळवता येत नाहीत. मूळ IP address कधीही डेटाबेसमध्ये लिहिला जात नाही.
क्लिक्स सर्व्हरवर मोजल्या जातात. सार्वजनिक पेजवरील प्रत्येक http लिंक तुमच्या स्वतःच्या डोमेनवरील /go/<id> कडे निर्देश करते, जी क्लिकची नोंद करते आणि त्यानंतर प्रत्यक्ष गंतव्यस्थानावर 302 redirect द्वारे पाठवते. त्यामुळे, ज्या वाचकांनी JavaScript बंद केली आहे त्यांच्यासाठी आणि बॅकग्राउंड विनंत्या ब्लॉक करणाऱ्या इन-अॅप ब्राउझर्समध्येही हे मोजमाप कार्य करते. पेज व्ह्यूजची नोंद /api/track द्वारे केली जाते.
दोन अपवाद लक्षात घेणे महत्त्वाचे आहे. वैध admin session असलेली विनंती वगळली जाते, त्यामुळे स्वतःचे पेज एडिट करताना आकडेवारी वाढत नाही. ज्ञात crawler user agents देखील वगळले जातात.
संमतीबाबत: वाचकाच्या डिव्हाइसवर काहीही साठवले जात नाही आणि कुकी बॅनर ज्या गोष्टीसाठी परवानगी मागतो, ती म्हणजे वाचकाच्या डिव्हाइसवर साठवलेली कुकी. तुमच्या वाचकांचे वास्तव्य कोठे आहे यावर तुमची जबाबदारी अवलंबून असते, त्यामुळे त्या तपासा, परंतु येथे उघड करण्यासाठी कोणतीही ट्रॅकिंग कुकी नाही आणि कोणताही तिसरा पक्ष डेटा मिळवत नाही.
एक सावधगिरीची सूचना जी लोकांना आश्चर्यचकित करते: SECRET_KEY रोटेट केल्यास त्यासोबत दररोजचे salt बदलते, त्यामुळे प्रत्येक परत येणाऱ्या अभ्यागताला त्या क्षणापासून नवीन मानले जाते.
अॅनालिटिक्समधील देशाचा कॉलम रिकामा का आहे?
तुमच्या स्टॅकमध्ये कोणताही घटक देशाचा हेडर (country header) सेट करत नसल्यामुळे असे घडते. LinkBreeze हे cf-ipcountry आणि x-vercel-ip-country सारख्या प्रॉक्सी हेडर्सवरून देशाची माहिती मिळवते. तुमच्या स्वतःच्या Caddy किंवा Nginx मागे असलेल्या VPS वर हे हेडर्स अस्तित्वात नसतात, त्यामुळे देशाची नोंद null अशी होते आणि ब्रेकडाउन रिकामा राहतो. कंटेनरमध्ये कोणतीही GeoIP डेटाबेस फाईल नसते.
हे भरण्याचे दोन मार्ग आहेत. डोमेनच्या पुढे Cloudflare वापरा, जे प्रत्येक प्रॉक्सी विनंतीमध्ये cf-ipcountry जोडते. किंवा तुमच्या स्वतःच्या रिव्हर्स प्रॉक्सीमध्ये स्थानिक GeoIP लूकअप वापरून यापैकी एक हेडर सेट करा.
याशी संबंधित एक मोठी चूक टाळणे आवश्यक आहे, त्यामुळे ती तपासा. क्लिक आणि व्ह्यू हँडलर्स क्लायंटचा पत्ता मिळवण्यासाठी प्रथम X-Forwarded-For वाचतात, त्यानंतर X-Real-IP, आणि जर दोन्ही हेडर्स नसतील तर 0.0.0.0 चा वापर करतात. जर तुम्ही पोर्ट 3000 थेट इंटरनेटवर उघडले आणि पुढे कोणताही प्रॉक्सी नसेल, तर प्रत्येक अभ्यागताचा हॅश (hash) एकच येईल. याचा अर्थ असा की युनिक व्हिजिटर्सची संख्या नेहमी 1 दिसेल आणि प्रति-IP दर मिनिटाला 60 इव्हेंट्सची मर्यादा तुमच्या सर्व अभ्यागतांना एकत्रितपणे लागू होईल. वरील reverse_proxy डिरेक्टिव्ह वापरल्यास, Caddy तुमच्यासाठी हेडर सेट करते आणि दोन्ही समस्या सुटतात.
Linktree वरून आयात आणि काय हस्तांतरित होत नाही
डॅशबोर्डमधील मायग्रेशन विझार्ड सार्वजनिक प्रोफाइल URL किंवा एक्सपोर्ट केलेली फाईल स्वीकारतो. हे विझार्ड linktr.ee, bento.me, lnk.bio, tap.link, hopp.bio, beacons.ai, solo.to, linkfly, mssg.me आणि LittleLink पेजेस, तसेच सामान्य HTML आणि JSON एक्सपोर्ट ओळखते. Linktree किंवा Bento URL साठी, ते त्या पेजेसमध्ये एम्बेड केलेले __NEXT_DATA__ JSON वाचते. स्टॅटिक पेजसाठी, ते अँकर टॅग्स वाचते.
प्रत्येक लिंकचे शीर्षक, URL, वर्णन आणि प्रतिमा, लिंक सोशल प्रोफाइल आहे की नाही, तसेच तुमचे डिस्प्ले नेम, बायो आणि अवतार हस्तांतरित होतात. डेटाबेसमध्ये कोणतीही माहिती लिहिण्यापूर्वी, सापडलेल्या लिंक्सपैकी कोणत्या ठेवायच्या हे तुम्ही निवडू शकता.
अॅनालिटिक्स हिस्ट्री, थीम आणि लेआउट, ईमेल सबस्क्राइबर्स, शेड्युल केलेले पब्लिश डेट्स आणि जुन्या प्लॅटफॉर्मने त्यांच्या लॉगिनच्या मागे ठेवलेली कोणतीही माहिती हस्तांतरित होत नाही. लूक पुन्हा हाताने तयार करण्याची तयारी ठेवा आणि जुना क्लिक डेटा जुन्या सर्व्हिसवरच राहील हे स्वीकारा.
इम्पोर्टर तुमच्या ब्राउझरऐवजी तुमच्या सर्व्हरवरून URL फेच करतो, त्यामुळे तो सार्वजनिक नसलेले पत्ते नाकारतो. Private/local URLs are not allowed चा अर्थ असा आहे की तुम्ही तुमच्या स्वतःच्या नेटवर्कमधील पत्ता दिला आहे, आणि हे नाकारणे हेतुपुरस्सर आहे: याशिवाय, डॅशबोर्ड ॲक्सेस असलेला कोणीही तुमच्या सर्व्हरचा वापर करून अशा मशिनना तपासू शकेल जिथे फक्त तुमचा सर्व्हर पोहोचू शकतो. तुम्हाला दिसू शकणारे इतर मेसेज Only http and https URLs are allowed, Request timed out आणि Response too large हे आहेत.
स्क्रॅपिंग दुसऱ्याच्या मार्कअपवर अवलंबून असते. जर विझार्डला अशा पेजवर काहीही सापडले नाही जिथे स्पष्टपणे लिंक्स आहेत, तर पार्सर लिहिल्यानंतर त्या प्लॅटफॉर्मने त्यांचा HTML बदलला आहे. दुरुस्तीची वाट पाहण्याऐवजी लिंक्स हाताने ॲड करा. जर तुम्हाला प्रोफाइल पेजऐवजी मोजण्यायोग्य शॉर्ट लिंक्स हव्या असतील, तर Shlink सारखा self-hosted URL shortener हे काम करतो आणि त्याच बॉक्सवर व्यवस्थित चालतो.
Pinned deployment अपडेट करणे
# edit the image tag in docker-compose.yml, then
docker compose pull
docker compose up -d
docker compose logs -f linkbreezeकंटेनर सुरू झाल्यावर schema migrations आपोआप कार्यान्वित होतात. हे बदल मागे घेण्याची (reverse) कोणतीही अधिकृत पद्धत उपलब्ध नाही, त्यामुळे आधी volume ची प्रत (copy) तयार करून ठेवा. जर तुम्ही मागील स्थिती पुन्हा मिळवू शकत नसाल, तर असे अपग्रेड करणे सुरक्षित नसते.
जेव्हा नवीन release उपलब्ध असते, तेव्हा डॅशबोर्डवर एक बॅनर दिसतो. हे तपासण्यासाठी डॅशबोर्ड दर 24 तासांनी एकदा project च्या GitHub repository वरून एक छोटी version file मिळवतो; याद्वारे तुमच्या instance बद्दल कोणतीही माहिती पाठवली जात नाही. tag बदलण्यापूर्वी release notes वाचा, कारण या टप्प्यावर project च्या minor version मध्ये तुमच्या वापरातील defaults बदलू शकतात.
अपयशाचे प्रकार आणि दिसणारे संदेश
manifest unknown पुल (pull) करताना. टॅग :v1.2.7 असा लिहिला होता. रजिस्ट्री टॅगमध्ये v नसतात, म्हणून :1.2.7 वापरा.
no matching manifest for linux/arm64/v8 in the manifest list entries. प्रकाशित इमेज फक्त amd64 साठी आहे. ती ARM होस्टवर टॅग केलेल्या सोर्सवरून बिल्ड करा.
पेज लोड होत असताना कंटेनर unhealthy असा रिपोर्ट देतो. तुमच्या compose फाईलमध्ये असलेली हेल्थचेक curl ला कॉल करत आहे, जी इमेजमध्ये उपलब्ध नाही. ती काढून टाका आणि इमेजची स्वतःची wget हेल्थचेक चालू द्या.
Caddy प्रमाणपत्र त्रुटी दाखवत आहे किंवा काहीच प्रतिसाद देत नाही. docker compose logs caddy तपासा. सहसा याचे कारण असे असते की A रेकॉर्ड अजूनही या VPS कडे पॉइंट करत नाही, किंवा फायरवॉलवर पोर्ट 80 बंद आहे. यामुळे ACME (ऑटोमॅटिक सर्टिफिकेट मॅनेजमेंट एन्व्हायर्नमेंट) HTTP चॅलेंज ब्लॉक होते, ज्याचा वापर Caddy डोमेनवर नियंत्रण असल्याचे सिद्ध करण्यासाठी करते.
युनिक व्हिजिटर्सची संख्या 1 वरच अडकली आहे. कोणताही प्रॉक्सी X-Forwarded-For सेट करत नाही, त्यामुळे प्रत्येक व्हिजिटरची हॅश व्हॅल्यू सारखीच तयार होत आहे.
काल व्यवस्थित चालणारा कंटेनर सुरू होताच बंद पडतो. जर तुम्ही नेमड व्हॉल्यूमवरून होस्ट बाइंड माउंटवर स्थलांतर केले असेल, तर डेटा डिरेक्टरीची मालकी root कडे असते आणि ॲप uid 1000 म्हणून चालते, त्यामुळे ते डेटाबेस फाईल उघडू शकत नाही. होस्ट डिरेक्टरीवर sudo chown -R 1000:1000 करा.
ट्रॅकिंग विनंत्यांना HTTP 429 प्रतिसाद मिळत आहे. /api/track आणि /go/<id> वरील प्रति-IP थ्रॉटल मर्यादा ओलांडली गेली आहे. व्हिजिटर्सना अजूनही त्यांच्या गंतव्यस्थानी रिडायरेक्ट केले जाते, फक्त क्लिक मोजले जात नाही.
FAQ
LinkBreeze सार्वजनिक 'link in bio' साठी तयार आहे का?
हा एक नवीन प्रकल्प आहे. ऑगस्ट 2026 पर्यंत या रिपॉझिटरीला 178 स्टार्स, 17 फोर्क्स आणि एक मेंटेनर्स आहेत, आणि पहिली रिलीज 1 जुलै 2026 रोजी झाली आहे. सरासरी आठवड्यातून दोनदा पेक्षा जास्त वेळा नवीन रिलीज येतात, त्यामुळे बग्स लवकर दुरुस्त होतात आणि सॉफ्टवेअरचे वर्तनही वेगाने बदलू शकते. MIT लायसन्स आणि स्थानिक SQLite फाईलमुळे, विकास थांबला तरीही तुमचे पेज कार्यरत राहील. मात्र, सिक्युरिटी अपडेट्स नसलेले सार्वजनिक वेब ॲप धोक्याचे ठरू शकते, त्यामुळे हे सॉफ्टवेअर एकदा इन्स्टॉल करून विसरण्याऐवजी नियमित अपडेट करत राहणे आवश्यक आहे.
मी LinkBreeze ची कोणती इमेज टॅग वापरावी?
व्हर्जन टॅग वापरा, उदाहरणार्थ ghcr.io/manak-hash/linkbreeze:1.2.7, आणि तो जाणीवपूर्वक बदला. रिलीज वर्कफ्लो फक्त latest आणि व्हर्जन नंबर पुश करतो, त्यामुळे :v1.2.7 सोबत v अस्तित्वात नाही आणि Docker manifest unknown असा एरर देतो. ही इमेज फक्त linux/amd64 साठी बनवलेली आहे, त्यामुळे arm64 VPS वर तुम्हाला टॅग क्लोन करून स्थानिक पातळीवर बिल्ड करावा लागेल.
LinkBreeze ॲनालिटिक्समध्ये देशांची माहिती (country breakdown) रिकामी का दिसते?
LinkBreeze अभ्यागताचा देश cf-ipcountry किंवा x-vercel-ip-country सारख्या प्रॉक्सी हेडर्सवरून वाचते आणि त्यात स्वतःची कोणतीही GeoIP डेटाबेस नाही. तुमच्या स्वतःच्या Caddy किंवा Nginx च्या मागे असलेल्या VPS वर असे कोणतेही हेडर्स सेट केलेले नसतात, त्यामुळे देश 'null' म्हणून साठवला जातो. डोमेनच्या पुढे Cloudflare वापरा किंवा तुमच्या रिव्हर्स प्रॉक्सीला स्थानिक GeoIP लुकअपवरून यापैकी एक हेडर सेट करायला सांगा.
मला नेमका कशाचा बॅकअप घ्यायचा आहे आणि तो रिस्टोर कसा करायचा?
केवळ डेटाबेस फाईलचाच नाही, तर संपूर्ण linkbreeze-data व्हॉल्यूमचा बॅकअप घ्या. /app/data/linkbreeze.db मध्ये प्रत्येक लिंक, पेज, सेटिंग, सबस्क्रायबर आणि ॲनालिटिक्सची माहिती असते, आणि /app/data/uploads मध्ये पेजवर वापरलेले अवतार आणि थंबनेल इमेजेस असतात. कंटेनर थांबवा, docker compose cp linkbreeze:/app/data ./backup-$(date +%F) चालवा आणि नंतर तो पुन्हा सुरू करा. रिस्टोर करण्यासाठी, डिरेक्टरी पुन्हा थांबवलेल्या कंटेनरमध्ये कॉपी करा आणि कंटेनर सुरू करा. डॅशबोर्डवरून मिळणारी JSON एक्सपोर्ट फाईल ही प्रोफाइल, लिंक्स, सेटिंग्ज आणि थीम्सचा एक कॉन्फिगरेशन स्नॅपशॉट आहे; त्यात ॲनालिटिक्स किंवा इमेजेस नसतात.
Linktree वरून इम्पोर्ट केल्यास माझे ॲनालिटिक्स आणि थीम सोबत येतात का?
नाही. मायग्रेशन विझार्ड तुमच्या जुन्या सार्वजनिक प्रोफाइलवरून लिंकची शीर्षके, URL, वर्णन आणि इमेजेस, तसेच तुमचे डिस्प्ले नेम, बायो आणि अवतार वाचतो. ॲनालिटिक्स हिस्ट्री, थीम, ईमेल सबस्क्रायबर्स आणि शेड्युल केलेल्या पब्लिश तारखा तिथेच राहतात. इम्पोर्ट केल्यानंतर थीम एडिटरमध्ये लूक पुन्हा तयार करा आणि तुमची क्लिक हिस्ट्री जुन्या प्लॅटफॉर्मवरच राहील हे लक्षात ठेवा.