1. Περιγραφή Συστήματος
- Υπηρεσία: Shlink (Self-hosted URL Shortener)
- Μέθοδος: Docker Compose
- Βάση Δεδομένων: SQLite (Embedded - για ελαχιστοποίηση πόρων)
- Reverse Proxy: Caddy (μέσω εξωτερικού Docker network
web) - Storage: Local Bind Mounts (για εύκολο backup/migration)
- Domain:
mytiny.duckdns.org
2. Δομή Φακέλου
Δημιουργία φακέλου εγκατάστασης:
/docker/shlink/
├── docker-compose.yml
└── database/ (Φάκελος για το αρχείο SQLite)
3. Αρχεία Ρυθμίσεων
Α. docker-compose.yml
Δημιουργήστε το αρχείο στον φάκελο του project:
services:
shlink:
image: shlinkio/shlink:stable
container_name: shlink
restart: unless-stopped
environment:
# --- General Settings ---
- DEFAULT_DOMAIN=mytiny.duckdns.org
- IS_HTTPS_ENABLED=true
- SHELL_VERBOSITY=0
# --- Database Settings (SQLite) ---
# Χρήση SQLite για εξοικονόμηση πόρων (RAM/CPU)
- DB_DRIVER=sqlite
# Το αρχείο θα δημιουργηθεί στο /etc/shlink/data/database.sqlite
# --- URL Shortening Config ---
- SHORT_DOMAIN_SCHEMA=https
# Validate URLs to avoid shortening broken links
- VALIDATE_URL=true
# Προαιρετικό: Αν θες στατιστικά τοποθεσίας (χρειάζεται δωρεάν κλειδί από MaxMind)
# https://www.maxmind.com/en/geolite2/signup (επιλογή Manage License Keys)
# - GEOLITE_LICENSE_KEY=your_license_key_here
# ανωνυμοποίηση της IP
# - ANONYMIZE_REMOTE_ADDR=true # Κρύβει το τελευταίο μέρος της IP (π.χ. 192.168.1.xxx)
# - VISITS_WEBHOOKS_DELAY=0
# Redirects
- DEFAULT_BASE_URL_REDIRECT=https://iosifidis.gr
- DEFAULT_INVALID_SHORT_URL_REDIRECT=https://iosifidis.gr/404 # Αν χτυπήσει λάθος short link
volumes:
# Bind mount για εύκολο backup.
# Αντιστοιχίζει τον τοπικό φάκελο database στον εσωτερικό φάκελο data
- ./database:/etc/shlink/data
networks:
- web
networks:
web:
external: true
Β. Caddyfile (Τμήμα ρύθμισης)
Προσθήκη στο κεντρικό αρχείο ρυθμίσεων του Caddy:
mytiny.duckdns.org {
# Reverse proxy προς το container 'shlink' στην εσωτερική θύρα 8080
reverse_proxy shlink:8080
# Security Headers (Best Practices)
header {
Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Referrer-Policy "no-referrer-when-downgrade"
}
}
4. Διαδικασία Εγκατάστασης & Ρύθμιση Δικαιωμάτων
Το Shlink τρέχει εσωτερικά με χρήστη UID 1001. Για να αποφύγουμε σφάλματα εγγραφής (Permission Denied) στην SQLite βάση, πρέπει να προετοιμάσουμε τον φάκελο με τον σωστό ιδιοκτήτη.
Εκτελέστε τις παρακάτω εντολές στο τερματικό:
# 1. Μετάβαση στον φάκελο
cd /docker/shlink
# 2. Δημιουργία του φακέλου για τη βάση δεδομένων
mkdir database
# 3. Ρύθμιση ιδιοκτησίας (Chown)
# Δίνουμε τον φάκελο στον χρήστη 1001 (που χρησιμοποιεί το container)
sudo chown -R 1001:1001 ./database
# 4. Εκκίνηση υπηρεσίας
docker compose up -d
5. Initial Setup (Δημιουργία API Key)
Μετά την εκκίνηση, το Shlink δεν έχει GUI από προεπιλογή και χρειάζεται ένα API Key για να συνδεθείτε (π.χ. μέσω web client ή CLI).
Εκτελέστε:
docker exec -it shlink shlink api-key:generate
Αντιγράψτε το κλειδί που θα εμφανιστεί. Θα χρειαστεί για τη διαχείριση.
6. Σύνδεση με το Διαχειριστικό (Web Client)
Δεν χρειάζεται να στήσεις δικό σου διαχειριστικό αν δεν θες. Η ομάδα του Shlink παρέχει έναν δωρεάν web client που τρέχει αποκλειστικά στον browser σου (τα δεδομένα δεν πάνε στους servers τους, απλά ο browser σου μιλάει απευθείας με τον server σου).
- Μπες στο: https://app.shlink.io
- Πάτα “Add a server”.
- Συμπλήρωσε τα στοιχεία:
- Name:
URL Shortener(ή ό,τι θες). - URL:
https://mytiny.duckdns.org - API Key: Το κλειδί που παρήγαγες στο προηγούμενο βήμα (
docker exec ...).
- Name:
- Πάτα “Create server”.
Πλέον έχεις ένα πλήρες γραφικό περιβάλλον για να φτιάχνεις links, να βλέπεις στατιστικά, QR codes κλπ.
7. Διαδικασία Backup & Restore (Migration)
Επειδή χρησιμοποιούμε Bind Mounts και SQLite, το backup είναι απλά μια συμπίεση του φακέλου.
Backup (Στο τρέχον μηχάνημα)
cd /docker
# Συμπίεση όλου του φακέλου shlink
tar -czvf shlink-backup.tar.gz shlink/
Restore (Σε νέο μηχάνημα)
- Μεταφορά του
shlink-backup.tar.gzστο νέο μηχάνημα. - Αποσυμπίεση:
tar -xzvf shlink-backup.tar.gz - Σημαντικό: Επιβεβαίωση δικαιωμάτων στο νέο μηχάνημα (αν χάθηκαν κατά τη μεταφορά):
cd shlink sudo chown -R 1001:1001 ./database - Εκκίνηση:
docker compose up -d
Σχόλια