1. Περιγραφή Συστήματος

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 σου).

  1. Μπες στο: https://app.shlink.io
  2. Πάτα “Add a server”.
  3. Συμπλήρωσε τα στοιχεία:
    • Name: URL Shortener (ή ό,τι θες).
    • URL: https://mytiny.duckdns.org
    • API Key: Το κλειδί που παρήγαγες στο προηγούμενο βήμα (docker exec ...).
  4. Πάτα “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 (Σε νέο μηχάνημα)

  1. Μεταφορά του shlink-backup.tar.gz στο νέο μηχάνημα.
  2. Αποσυμπίεση:
    tar -xzvf shlink-backup.tar.gz
    
  3. Σημαντικό: Επιβεβαίωση δικαιωμάτων στο νέο μηχάνημα (αν χάθηκαν κατά τη μεταφορά):
    cd shlink
    sudo chown -R 1001:1001 ./database
    
  4. Εκκίνηση:
    docker compose up -d