Powerful, open-source, and privacy-first link shortener
Shlink adalah layanan pemendekan URL yang dihosting sendiri dan bersifat Open Source yang memungkinkan pengguna membuat dan mengelola URL pendek di bawah domain mereka sendiri. Aplikasi ini menyediakan antarmuka yang powerful namun sederhana untuk menghasilkan URL pendek, melacak klik, dan menganalisis data pengunjung. Shlink menawarkan berbagai fitur termasuk kode pendek kustom, akses API untuk integrasi yang mulus dengan aplikasi lain, dan antarmuka command-line untuk manajemen tingkat lanjut. Progressive web app (PWA) yang dimilikinya memberikan pengalaman pengguna yang intuitif. Dibangun dengan PHP dan memanfaatkan framework modern seperti Mezzio, Doctrine, dan Symfony, memastikan stabilitas dan performa. Shlink dirancang untuk pengguna yang menghargai kontrol atas data mereka dan lebih memilih solusi self-hosted dengan fitur yang ekstensif.
| Nama | NIM |
|---|---|
| Tsabitha Naylasafa Aurora | G6401231036 |
| Givari Mirzacky | G6401231098 |
| Naufal Rama Koswara | G6401231113 |
| Benadeo Eldian Manting | G6401231117 |
| Tristian Yosa | G6401231122 |
- Server / VPS (Ubuntu 22.04 atau lebih baru)
- Domain aktif (
dashboard.iloveurl.sitedanshort.iloveurl.site) - Sudah terinstal Docker, Docker Compose, dan Nginx
sudo apt-get update && sudo apt-get upgrade -y
sudo apt install docker.io docker-compose nginx -y
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl enable nginx
sudo systemctl start nginxClone repository Shlink Backend:
git clone https://github.com/shlinkio/shlink.git
cd shlinkEdit file docker-compose.yml dan sesuaikan konfigurasi berikut:
Pastikan port yang digunakan sesuai dengan konfigurasi NGINX:
- Shlink server:
8800:8080(port 8800 di host, 8080 di container) - Dashboard:
3000:80(port 3000 di host, 80 di container)
Atur password database di environment variables:
environment:
MYSQL_DATABASE: shlink
MYSQL_USER: shlink
MYSQL_PASSWORD: your_secure_password
MYSQL_ROOT_PASSWORD: your_root_passwordsudo docker-compose up -dSetelah container berjalan, masuk ke container Shlink dan generate API key:
docker exec -it shlink_php sh
php /home/shlink/www/bin/cli api-key:generate
exitSalin API key yang dihasilkan dan simpan dengan baik, lalu restart container:
sudo docker-compose restart shlinkMasuk ke container Shlink dan jalankan migrasi database:
docker exec -it shlink_php sh
php /home/shlink/www/bin/cli db:create
php /home/shlink/www/bin/cli db:migrate
exitPindah ke direktori terpisah untuk web client:
cd ..
git clone https://github.com/shlinkio/shlink-web-client.git
cd shlink-web-clientTambahkan konfigurasi berikut di file vite.config.ts untuk mengizinkan akses dari domain dashboard:
server: {
port: 3000,
allowedHosts: ['dashboard.iloveurl.site', 'localhost', '127.0.0.1'],
watch: {
// Do not watch test files or generated files, avoiding the dev server to constantly reload when not needed
ignored: ['**/.idea/**', '**/.git/**', '**/build/**', '**/coverage/**', '**/test/**'],
},
},server {
listen 80;
server_name iloveurl.site short.iloveurl.site;
location / {
proxy_pass http://127.0.0.1:8800;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Aktifkan konfigurasi:
sudo ln -s /etc/nginx/sites-available/shlink.site /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxserver {
listen 80;
server_name dashboard.iloveurl.site;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Aktifkan konfigurasi:
sudo ln -s /etc/nginx/sites-available/shlink.dashboard /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxInstall Certbot:
sudo apt install certbot python3-certbot-nginx -yJalankan Certbot untuk Shlink:
sudo certbot --nginx -d iloveurl.site -d short.iloveurl.siteJalankan Certbot untuk Dashboard:
sudo certbot --nginx -d dashboard.iloveurl.siteCertbot akan secara otomatis mengkonfigurasi SSL dan mengubah file NGINX untuk menggunakan HTTPS.
| Komponen | URL | Deskripsi |
|---|---|---|
| Dashboard Shlink | https://dashboard.iloveurl.site | Antarmuka untuk membuat dan memantau link |
| Backend API | http://103.226.138.119:8800/rest/v3 | Endpoint API REST |
| Short Domain | https://short.iloveurl.site | Domain untuk tautan pendek |
Masuk ke:
https://dashboard.iloveurl.site
Masukkan API Key yang telah di-generate sebelumnya (contoh):
11dca439-54f1-4df3-a078-88480a1adfa5
Isi formulir dengan:
- Long URL: tautan asli
- Custom Slug (opsional): nama pendek unik
- Tag / Expiry (opsional): keterangan tambahan
Hasil contoh:
https://short.iloveurl.site/kelas-paralel1
Fitur analitik tersedia langsung di dashboard:
- Total klik
- Lokasi negara pengunjung
- Browser / sistem operasi
- Waktu dan sumber referer
Contoh membuat short URL melalui terminal:
curl -X POST "http://103.226.138.119:8800/rest/v3/short-urls" \
-H "X-Api-Key: your_api_key_here" \
-d "longUrl=https://example.com&customSlug=promo"| Aspek | Shlink | Linktree |
|---|---|---|
| Hosting | Self-hosted (dikelola sendiri di server pribadi atau VPS) | Cloud-based (dikelola oleh penyedia layanan) |
| Privasi Data | Kontrol penuh di tangan pengguna, data tersimpan di server sendiri | Data dikelola oleh pihak ketiga, bergantung pada kebijakan privasi mereka |
| Analitik | Lengkap dan real-time dengan detail klik, lokasi geografis, browser, sistem operasi, dan referer | Terbatas pada paket gratis, fitur analitik lengkap hanya tersedia di paket berbayar |
| Domain Kustom | Dapat menggunakan domain sendiri tanpa biaya tambahan | Tersedia hanya untuk pengguna paket berbayar |
| Multi-link Profil | Tidak tersedia (fokus pada URL shortening) | Tersedia, cocok untuk bio link di media sosial |
| API Integration | API REST lengkap untuk integrasi dengan sistem lain | Tidak tersedia atau sangat terbatas |
| Biaya | Gratis (open-source), hanya biaya server/hosting | Gratis dengan fitur terbatas, fitur premium berbayar |
| Kemudahan Setup | Membutuhkan pengetahuan teknis (Docker, server management) | Sangat mudah, tanpa setup teknis |
| Kustomisasi | Penuh, dapat dimodifikasi sesuai kebutuhan | Terbatas pada template yang tersedia |
| QR Code | Otomatis generate untuk setiap short URL | Tersedia di paket berbayar |
- Gratis dan Open Source: Tidak ada biaya lisensi, dapat dimodifikasi sesuai kebutuhan
- Kontrol Penuh: Data dan infrastruktur sepenuhnya di bawah kendali pengguna
- Privasi Terjamin: Tidak ada pihak ketiga yang mengakses data klik dan analitik
- Analitik Lengkap: Tracking detail real-time tanpa batasan
- Domain Kustom: Menggunakan domain sendiri tanpa biaya tambahan
- API Lengkap: Integrasi mudah dengan aplikasi dan sistem lain
- QR Code Generator: Generate QR code otomatis untuk setiap URL
- Scalable: Dapat disesuaikan dengan kebutuhan traffic dan storage
- Setup Teknis: Membutuhkan pengetahuan tentang server, Docker, dan networking
- Maintenance: Perlu maintenance rutin (update, backup, monitoring)
- Biaya Hosting: Memerlukan server atau VPS untuk menjalankan aplikasi
- Tidak Ada Multi-link Profil: Tidak cocok untuk kebutuhan bio link seperti Instagram
- Learning Curve: Butuh waktu untuk mempelajari cara penggunaan dan konfigurasi
- Membutuhkan kontrol penuh atas data dan privasi
- Mengintegrasikan URL shortener dengan sistem internal perusahaan
- Memerlukan analitik detail dan real-time tanpa batasan
- Ingin menggunakan domain sendiri tanpa biaya tambahan
- Memiliki kemampuan teknis untuk setup dan maintenance server
- Mengelola volume URL dalam jumlah besar
- Membutuhkan API untuk automasi dan integrasi
- Tim atau organisasi yang memerlukan solusi self-hosted
- Membutuhkan bio link untuk profil media sosial (Instagram, TikTok, dll)
- Ingin setup cepat tanpa pengetahuan teknis
- Tidak ingin repot dengan server maintenance
- Fokus pada tampilan profil dengan multiple links
- Analitik dasar sudah cukup untuk kebutuhan
- Budget terbatas dan tidak keberatan dengan fitur terbatas
- Pengguna individu atau personal branding
- Tidak memerlukan integrasi API atau kustomisasi mendalam