Δημιουργία server

Προαιρετικός. Προσθέτει διαδρομή μέσω διαδικτύου όταν υπάρχει, χωρίς να αγγίζει τη λειτουργία χωρίς δίκτυο.

Τι κάνει

Ο rendezvous server είναι το σημείο συνάντησης δύο συσκευών IRIS 3 μέσω διαδικτύου. Με αυτόν κάνεις ζεύξη συσκευών με κωδικό QR και στέλνεις μηνύματα και δεδομένα με το Κανάλι Γ, σε μία συγκεκριμένη συσκευή ή ομάδα. Κρατά μόνο έναν μικρό κατάλογο με το ποια συσκευή βρίσκεται πού και προωθεί κρυπτογραφημένα πακέτα.

Πότε τον χρειάζεσαι

Δεν τον χρειάζεσαι για τίποτα από τα υπόλοιπα. Ο χάρτης, οι καταχωρήσεις πεδίου και η επικοινωνία μέσω της γέφυρας δουλεύουν χωρίς server. Ο server προσθέτει μια δεύτερη διαδρομή όταν υπάρχει διαδίκτυο, και μπορείς να έχεις ενεργές και τις δύο ταυτόχρονα.

Κανάλι Β (γέφυρα)Κανάλι Γ (server)
ΜέσοΑσύρματος, χωρίς δίκτυοΔιαδίκτυο
ΠαραλήπτηςΌλες οι συνδεδεμένες συσκευέςΜία συσκευή ή μία ομάδα
ΠροαπαιτούμενοΣυνδεδεμένη γέφυραΔιεύθυνση server και ζεύξη QR

Πριν ξεκινήσεις

Η εφαρμογή χρειάζεται μία διεύθυνση της μορφής https://host:port, χωρίς τελικό /, προσβάσιμη μέσω HTTPS από όλες τις συσκευές. Ο οδηγός δεν προϋποθέτει γνώσεις πληροφορικής: κάθε βήμα λέει τι κάνεις και γιατί. Χρειάζεσαι περίπου μία ώρα, έναν υπολογιστή Windows, ένα email και τον φάκελο του project IRIS 3, από όπου χτίζεται ο server.

Επιλογή Α: Oracle Cloud

Προτεινόμενη. Δωρεάν για πάντα στο πρόγραμμα Always Free. Σταθερή διεύθυνση, καμία εξάρτηση από το ρεύμα ή το internet του σπιτιού σου.

Επιλογή Β: Raspberry Pi

Δικό σου μηχάνημα στο σπίτι (περίπου 60 έως 90 €). Καμία εξάρτηση από τρίτους, αλλά θες πρόσβαση στο router.

Επιλογή Γ: Πληρωμένο cloud VPS

Οποιοσδήποτε πάροχος (DigitalOcean, Hetzner κ.ά.), περίπου 4 έως 6 € τον μήνα. Χρήσιμο αν δεν θες την εγγραφή της Oracle.

Επιλογή Δ: Server σε Windows

Τρέχεις τον server σε μηχάνημα με Windows (PC στο σπίτι ή Windows VPS), χωρίς SSH και Linux.

Επιλογή Α: Oracle Cloud

  1. Άνοιξε λογαριασμό Oracle Cloud

    Πήγαινε στο oracle.com/cloud/free και πάτα «Start for free». Θα ζητηθούν email, χώρα και στοιχεία κάρτας για επιβεβαίωση ταυτότητας. Στο πρόγραμμα Always Free δεν χρεώνεσαι. Διάλεξε περιοχή δεδομένων κοντά σου, π.χ. στην Ευρώπη.

  2. Δημιούργησε το virtual machine

    1. Στο μενού: Compute, Instances, Create Instance.
    2. Όνομα: iris3-server.
    3. Image: Ubuntu, τελευταία LTS.
    4. Shape: Ampere (Always Free) ή VM.Standard.E2.1.Micro. Και τα δύο είναι δωρεάν.
    5. Στο «Add SSH keys» διάλεξε «Save private key» και κράτα το αρχείο .key. Αν το χάσεις, δεν μπαίνεις στον server.
    6. Πάτα Create και περίμενε να γίνει Running. Σημείωσε το Public IP Address.
  3. Άνοιξε τη θύρα 443

    Στη σελίδα του instance πάτα στο Subnet, μετά στο Security List, Add Ingress Rules. Source CIDR 0.0.0.0/0, πρωτόκολλο TCP, θύρα προορισμού 443.

    Μην ανοίξεις τη θύρα 8443. Ο server ακούει σε αυτήν μόνο εσωτερικά. Κάθε αίτημα κουβαλά ένα bearer token, και αν η 8443 ήταν ανοιχτή προς τα έξω θα ταξίδευε χωρίς κρυπτογράφηση.

  4. Συνδέσου με SSH από τα Windows

    Άνοιξε το PowerShell. Άλλαξε το μονοπάτι και την IP με τα δικά σου.

    icacls "C:\Users\you\Downloads\ssh-key-xxxx.key" /inheritance:r /grant:r "${env:USERNAME}:R"
    ssh -i "C:\Users\you\Downloads\ssh-key-xxxx.key" ubuntu@132.145.x.x

    Στο «yes/no» γράψε yes. Όταν το prompt γίνει ubuntu@iris3-server:~$, μπήκες.

  5. Εγκατάστησε Java

    Ο server είναι γραμμένος σε Kotlin/Java. Μέσα στο SSH:

    sudo apt-get update
    sudo apt-get install -y openjdk-17-jre
  6. Πάρε το πακέτο και στείλ' το στον server

    Κατέβασε το έτοιμο πακέτο του server στον δικό σου υπολογιστή και αποσυμπίεσέ το. Μέσα θα βρεις έναν φάκελο rendezvous-server.

    Αν προτιμάς να το χτίσεις μόνος σου, και έχεις το project IRIS 3, τρέξε μέσα στον φάκελό του, σε δεύτερο παράθυρο PowerShell:

    .\gradlew.bat :rendezvous-server:installDist

    Το build δημιουργεί τον φάκελο rendezvous-server\build\install\rendezvous-server\. Όποια επιλογή κι αν διάλεξες, στείλε τον φάκελο rendezvous-server με το WinSCP (δωρεάν, winscp.net): πρωτόκολλο SFTP, host η IP του server, user ubuntu, και στο Advanced, SSH, Authentication το ίδιο αρχείο .key (αν ζητήσει μετατροπή σε .ppk, πάτα OK). Φτιάξε τον φάκελο /opt/iris3 και σύρε μέσα τον rendezvous-server.

    Αν το WinSCP δεν σε αφήνει να γράψεις στο /opt, τρέξε πρώτα στο SSH:

    sudo mkdir -p /opt/iris3 && sudo chown ubuntu /opt/iris3
  7. Φτιάξε το κλειδί διαχειριστή (admin token)

    Πριν στήσεις τον server ως μόνιμη υπηρεσία, φτιάξε ένα δεύτερο, ξεχωριστό μυστικό. Δεν είναι το κλειδί SSH και δεν σε βάζει στο μηχάνημα. Επιτρέπει μόνο στο εργαλείο διαχείρισης να δει και να διαχειριστεί τη λίστα συσκευών. Μέσα στο SSH:

    openssl rand -hex 32

    Θα τυπωθεί μια μακριά σειρά από γράμματα και αριθμούς. Αντίγραψέ την και κράτησέ την κάπου ασφαλές. Θα τη χρειαστείς στο επόμενο βήμα και ξανά στο εργαλείο διαχείρισης. Όποιος την έχει μπορεί να δει και να σβήσει συσκευές, οπότε μην τη μοιράζεσαι.

  8. Κάν' τον να τρέχει μόνιμα

    Ο server θα ξεκινά μόνος του μετά από κάθε επανεκκίνηση. Μέσα στο SSH άνοιξε το αρχείο:

    sudo nano /etc/systemd/system/iris3-rendezvous.service

    Επικόλλησε αυτό, βάζοντας στη θέση του ΤΟ-TOKEN-ΣΟΥ τη σειρά που αντέγραψες στο προηγούμενο βήμα. Αποθήκευσε με Ctrl+O και Enter, και βγες με Ctrl+X:

    [Unit]
    Description=IRIS3 Rendezvous Server
    After=network.target
    
    [Service]
    Environment=RENDEZVOUS_DB_URL=jdbc:sqlite:/opt/iris3/rendezvous.db
    Environment=RENDEZVOUS_PORT=8443
    Environment=RENDEZVOUS_ADMIN_TOKEN=ΤΟ-TOKEN-ΣΟΥ
    ExecStart=/opt/iris3/rendezvous-server/bin/rendezvous-server
    Restart=always
    User=ubuntu
    
    [Install]
    WantedBy=multi-user.target
    sudo systemctl enable --now iris3-rendezvous
    curl http://127.0.0.1:8443/health

    Αν απαντήσει OK, ο server δουλεύει.

    Αν ξέχασες το προηγούμενο βήμα: χωρίς τη γραμμή RENDEZVOUS_ADMIN_TOKEN ο server δουλεύει κανονικά για την εφαρμογή, αλλά οι διαδρομές διαχείρισης είναι κλειστές και το εργαλείο διαχείρισης δεν θα συνδεθεί. Μπορείς να την προσθέσεις οποτεδήποτε: άνοιξε ξανά το αρχείο, πρόσθεσε τη γραμμή, αποθήκευσε και τρέξε sudo systemctl daemon-reload && sudo systemctl restart iris3-rendezvous.

  9. Πάρε ένα όνομα (domain)

    Η εφαρμογή χρειάζεται HTTPS, και το HTTPS θέλει όνομα και όχι γυμνή IP. Η εύκολη δωρεάν λύση είναι το DuckDNS: μπες στο duckdns.org με λογαριασμό Google ή GitHub, διάλεξε υπο-domain (π.χ. iris3 δίνει iris3.duckdns.org), βάλε στο «current ip» την Public IP του server και πάτα «update ip». Αν έχεις δικό σου domain, φτιάξε εκεί μια εγγραφή A προς την ίδια IP.

  10. Βάλε HTTPS με nginx

    Το nginx στέκεται μπροστά από τον server, μιλά HTTPS προς τα έξω και περνά τα αιτήματα εσωτερικά στη θύρα 8443.

    sudo apt-get install -y nginx certbot python3-certbot-nginx
    sudo nano /etc/nginx/sites-available/default

    Σβήσε ό,τι υπάρχει και βάλε το παρακάτω, με το δικό σου όνομα στη θέση του iris3.example.org:

    server {
        listen 80;
        server_name iris3.example.org;
    
        location / {
            proxy_pass http://127.0.0.1:8443;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_http_version 1.1;
            proxy_read_timeout 300s;
        }
    }
    sudo nginx -t
    sudo systemctl reload nginx
    sudo certbot --nginx -d iris3.example.org

    Το certbot ζητά ένα email για ειδοποιήσεις λήξης και στήνει δωρεάν πιστοποιητικό, που ανανεώνεται μόνο του κάθε 90 μέρες.

    Γιατί οι τρεις γραμμές proxy_set_header: η εφαρμογή κρατά μόνιμη σύνδεση WebSocket για να παίρνει μηνύματα αμέσως. Χωρίς αυτές το nginx την κλείνει και η εφαρμογή πέφτει σιωπηλά σε πιο αργή λειτουργία, χωρίς ορατό σφάλμα.

  11. Έλεγξε από έξω

    Σε browser στον υπολογιστή σου άνοιξε:

    https://iris3.example.org/health

    Αν δείξει OK, δουλεύει όλη η αλυσίδα: εφαρμογή, διαδίκτυο, nginx, server. Μετά πήγαινε στην ενότητα «Ρύθμιση στην εφαρμογή».

Επιλογή Β: Raspberry Pi

Η λογική είναι ίδια με την επιλογή Α (SSH, Java, υπηρεσία, nginx). Αλλάζουν τρία πράγματα: δεν νοικιάζεις μηχάνημα, η θύρα ανοίγει στο router, και χρειάζεται ένα κόλπο για να «θυμάται» το όνομα τη μεταβαλλόμενη IP του σπιτιού.

  1. Ετοίμασε το Raspberry Pi

    Κατέβασε το Raspberry Pi Imager (raspberrypi.com/software). Διάλεξε το μοντέλο σου και Raspberry Pi OS Lite (64-bit). Πριν γράψεις την κάρτα (microSD, τουλάχιστον 8 GB) πάτα το γρανάζι: ενεργοποίησε SSH, όρισε χρήστη και κωδικό, και βάλε το Wi-Fi σου. Βάλε την κάρτα στο Pi, δώσε ρεύμα και περίμενε περίπου ένα λεπτό. Βρες την τοπική IP του από τη λίστα συσκευών του router.

  2. SSH, Java και αντιγραφή του server

    Όπως στα βήματα 4, 5 και 6 της επιλογής Α, με δύο διαφορές: συνδέεσαι με το τοπικό όνομα και IP (όχι με κλειδί Oracle), και βάζεις Java 21, γιατί οι νεότερες εκδόσεις του Pi OS δεν έχουν το πακέτο 17.

    ssh your-user@192.168.1.xx
    sudo apt-get update
    sudo apt-get install -y openjdk-21-jre-headless
  3. Έλεγξε ότι η θύρα είναι ελεύθερη

    Αν το Pi τρέχει άλλη υπηρεσία, μπορεί να έχει πιάσει ήδη την 8443.

    sudo ss -tlnp

    Αν δεις κάτι στο :8443, χρησιμοποίησε την 9443. Τα παρακάτω την υποθέτουν.

  4. Κάν' τον να τρέχει μόνιμα

    Το ίδιο αρχείο υπηρεσίας με το βήμα 8 της επιλογής Α. Άλλαξε το RENDEZVOUS_PORT στο 9443 αν διάλεξες άλλη θύρα, και το User στον δικό σου χρήστη. Φτιάξε και το admin token όπως στο βήμα 7 (openssl rand -hex 32) και βάλε το στη γραμμή RENDEZVOUS_ADMIN_TOKEN.

    sudo systemctl enable --now iris3-rendezvous
    curl http://127.0.0.1:9443/health
  5. Όνομα που «θυμάται» το σπίτι σου

    Το σπίτι σου δεν έχει σταθερή δημόσια IP. Φτιάξε το domain στο DuckDNS όπως στο βήμα 9 της επιλογής Α και βάλε ένα μικρό script να το ανανεώνει κάθε 5 λεπτά.

    mkdir ~/duckdns && cd ~/duckdns
    nano duck.sh

    Μέσα στο αρχείο βάλε (με το δικό σου token και domain από τη σελίδα του DuckDNS):

    echo url="https://www.duckdns.org/update?domains=iris3&token=YOUR_TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -
    chmod 700 duck.sh
    crontab -e

    Πρόσθεσε στο τέλος του αρχείου που ανοίγει:

    */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
  6. Port forwarding στο router

    Εδώ αντικαθιστάς το Security List του cloud. Μπες στη διαχείριση του router (συχνά 192.168.1.1), βρες το Port Forwarding ή Virtual Server και φτιάξε κανόνα: εξωτερική θύρα 443, εσωτερική IP η τοπική IP του Pi, εσωτερική θύρα 443.

  7. HTTPS με nginx

    Ακολούθησε το βήμα 10 της επιλογής Α, με μία αλλαγή: στο proxy_pass βάλε τη θύρα που διάλεξες.

    proxy_pass http://127.0.0.1:9443;

    Μετά τρέξε certbot και κάνε τον έλεγχο του βήματος 11. Αν μεταφέρεσαι από τον Oracle server και θες να κρατήσεις τις συσκευές, αντίγραψε με το WinSCP το rendezvous.db στο /opt/iris3/ του Pi πριν ξεκινήσεις την υπηρεσία. Αλλιώς ξεκίνα με άδεια βάση και οι συσκευές ξαναγράφονται μόνες τους.

Επιλογή Γ: Πληρωμένο cloud VPS

Αν δεν θες να περάσεις από την εγγραφή της Oracle, ή θες πιο προβλέψιμο μηχάνημα χωρίς τα όρια του Always Free, μπορείς να χρησιμοποιήσεις οποιονδήποτε πάροχο VPS, π.χ. DigitalOcean, Hetzner ή Linode. Η λογική είναι ίδια με την επιλογή Α. Αλλάζουν η εγγραφή, το κόστος (συνήθως 4 έως 6 € τον μήνα για το μικρότερο μηχάνημα) και μερικά ονόματα στη διεπαφή.

  1. Εγγραφή και δημιουργία του μηχανήματος

    Κάνε εγγραφή στον πάροχο (digitalocean.com, hetzner.com/cloud ή linode.com). Χρειάζεται κάρτα και θα χρεώνεσαι κανονικά κάθε μήνα, δεν υπάρχει δωρεάν πλάνο. Μετά δημιούργησε νέο μηχάνημα («Droplet» στο DigitalOcean, «Server» στο Hetzner):

    1. Λειτουργικό: Ubuntu 22.04 ή 24.04 LTS.
    2. Μέγεθος: αρκεί το μικρότερο και φθηνότερο πλάνο (1 vCPU, 1 GB RAM).
    3. Πιστοποίηση: διάλεξε SSH key αντί για κωδικό. Αν δεν έχεις ζευγάρι κλειδιών, φτιάξε ένα στο PowerShell:
      ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\iris3_vps"
      Επικόλλησε το περιεχόμενο του αρχείου iris3_vps.pub στο πεδίο «SSH Key» του παρόχου.
    4. Πάτα δημιουργία. Σε 1 με 2 λεπτά θα δεις μια δημόσια IP (π.χ. 167.99.x.x). Σημείωσέ την.
  2. Άνοιξε τη θύρα 443 στο firewall του παρόχου

    Όπως στο βήμα 3 της επιλογής Α. Το firewall λέγεται «Firewalls» στο DigitalOcean και «Firewall» στο Hetzner Cloud. Φτιάξε κανόνα εισερχόμενης κίνησης: TCP, θύρα 443, πηγή 0.0.0.0/0, και εφάρμοσέ τον στο μηχάνημα. Μην ανοίξεις την 8443, για τον ίδιο λόγο.

    Μερικοί πάροχοι (π.χ. Hetzner) αφήνουν όλες τις θύρες ανοιχτές αν δεν φτιάξεις firewall. Τότε το βήμα είναι προαιρετικό, αλλά συστήνεται να προσθέσεις ένα έτσι κι αλλιώς.

  3. Συνέχισε από το βήμα 4 της επιλογής Α

    Ακολούθησε τα βήματα 4 έως 11 της επιλογής Α όπως είναι, γράφοντας στο SSH τη νέα IP και το δικό σου κλειδί αντί για της Oracle. Μετά πήγαινε στην ενότητα «Ρύθμιση στην εφαρμογή».

    ssh -i "$env:USERPROFILE\.ssh\iris3_vps" root@167.99.x.x

    Άλλο όνομα χρήστη. Οι περισσότεροι πάροχοι VPS σε συνδέουν ως root και όχι ως ubuntu. Ως root δεν χρειάζεται sudo (δουλεύει όμως και με αυτό). Στο αρχείο υπηρεσίας του βήματος 8 άλλαξε το User=ubuntu σε User=root, και στο WinSCP βάλε user root.

Επιλογή Δ: Server σε Windows

Αν έχεις ήδη μηχάνημα με Windows που μπορεί να μένει πάντα ανοιχτό (PC στο σπίτι ή Windows VPS), μπορείς να τρέξεις τον server εκεί, χωρίς SSH, Linux και WinSCP. Αντί για systemd χρησιμοποιούμε το δωρεάν εργαλείο NSSM, που «τυλίγει» τον server σε κανονική υπηρεσία Windows. Αντί για nginx και certbot χρησιμοποιούμε το Caddy, ένα ενιαίο πρόγραμμα που αποκτά μόνο του δωρεάν πιστοποιητικό HTTPS.

  1. Εγκατάστησε Java

    Κατέβασε το δωρεάν Eclipse Temurin JDK 17 (έκδοση .msi για Windows) από adoptium.net και εγκατάστησέ το, αφήνοντας επιλεγμένα τα «Set JAVA_HOME» και «Add to PATH». Έλεγξε σε νέο παράθυρο PowerShell:

    java -version
  2. Αντίγραψε το πρόγραμμα

    Χρησιμοποίησε το πακέτο του server (βήμα 6 της επιλογής Α). Περιέχει και launcher για Windows, το bin\rendezvous-server.bat. Αντίγραψε τον φάκελο rendezvous-server στο μηχάνημα-στόχο, π.χ. στο C:\iris3\rendezvous-server. Σε PC αρκεί αντιγραφή και επικόλληση. Σε Windows VPS χρησιμοποίησε Remote Desktop (σύρε τον φάκελο μέσα στο παράθυρο) ή ένα cloud drive.

  3. Φτιάξε το admin token

    Τα Windows δεν έχουν το openssl, αλλά το PowerShell φτιάχνει το ίδιο αποτέλεσμα με ασφαλή γεννήτρια τυχαίων αριθμών:

    $b = New-Object byte[] 32; [Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($b); ($b | ForEach-Object { $_.ToString('x2') }) -join ''

    Αντίγραψε τη σειρά που θα τυπωθεί και κράτησέ την κάπου ασφαλές. Θα τη χρειαστείς στο επόμενο βήμα και ξανά στο εργαλείο διαχείρισης.

  4. Κάν' τον να τρέχει μόνιμα

    Κατέβασε το NSSM (δωρεάν, nssm.cc/download), αποσυμπίεσε και βάλε το nssm.exe στο C:\iris3\nssm.exe. Φτιάξε το αρχείο C:\iris3\start.bat (δεξί κλικ στον φάκελο, New, Text Document, μετονόμασέ το, άνοιξέ το με Notepad) με αυτό το περιεχόμενο, βάζοντας το δικό σου token:

    @echo off
    set RENDEZVOUS_DB_URL=jdbc:sqlite:C:\iris3\rendezvous.db
    set RENDEZVOUS_PORT=8443
    set RENDEZVOUS_ADMIN_TOKEN=ΤΟ-TOKEN-ΣΟΥ
    C:\iris3\rendezvous-server\bin\rendezvous-server.bat

    Μετά, σε PowerShell ως διαχειριστής (δεξί κλικ στο εικονίδιο, «Run as administrator»):

    C:\iris3\nssm.exe install IRIS3Rendezvous "C:\iris3\start.bat"
    C:\iris3\nssm.exe set IRIS3Rendezvous AppDirectory C:\iris3
    C:\iris3\nssm.exe start IRIS3Rendezvous

    Η υπηρεσία IRIS3Rendezvous θα ξεκινά αυτόματα σε κάθε επανεκκίνηση και το NSSM θα την ξαναστήνει αν «πεθάνει», όπως το Restart=always του βήματος 8 της επιλογής Α. Έλεγχος:

    curl http://127.0.0.1:8443/health
  5. Άνοιξε τη θύρα 443 στο firewall των Windows

    Σε PowerShell ως διαχειριστής:

    New-NetFirewallRule -DisplayName "IRIS3 HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
    • Αν είναι PC στο σπίτι, πρόσθεσε και port forwarding στο router, όπως στο βήμα «Port forwarding στο router» της επιλογής Β (εξωτερική 443, εσωτερική IP του PC, εσωτερική 443).
    • Αν είναι Windows VPS, άνοιξε τη 443 και στο firewall του παρόχου, όπως στο βήμα 2 της επιλογής Γ.
  6. HTTPS με Caddy

    Το nginx και το certbot είναι φτιαγμένα για Linux. Στα Windows το πιο απλό ισοδύναμο είναι το Caddy: κάνει reverse proxy και αποκτά και ανανεώνει μόνο του πιστοποιητικό HTTPS. Κατέβασε το caddy_windows_amd64.exe από caddyserver.com/download, μετονόμασέ το σε caddy.exe και βάλε το στο C:\iris3\caddy\. Φτιάξε εκεί ένα αρχείο Caddyfile (χωρίς επέκταση), με το δικό σου domain στη θέση του iris3.example.org:

    iris3.example.org {
        reverse_proxy 127.0.0.1:8443
    }

    Εγκατάστησέ το κι αυτό ως υπηρεσία με το NSSM (PowerShell ως διαχειριστής):

    C:\iris3\nssm.exe install IRIS3Caddy "C:\iris3\caddy\caddy.exe" "run --config C:\iris3\caddy\Caddyfile"
    C:\iris3\nssm.exe set IRIS3Caddy AppDirectory C:\iris3\caddy
    C:\iris3\nssm.exe start IRIS3Caddy

    Το Caddy παίρνει πιστοποιητικό από το Let's Encrypt την πρώτη φορά που θα δεχτεί κίνηση στη 443. Για να γίνει αυτό, το domain πρέπει να δείχνει ήδη στη σωστή IP (επόμενο βήμα).

  7. Όνομα (domain)

    Φτιάξε το domain στο DuckDNS όπως στο βήμα 9 της επιλογής Α. Αν είναι Windows VPS με σταθερή IP, το ενημερώνεις μία φορά και τελείωσες.

    Αν είναι PC στο σπίτι (η IP αλλάζει), φτιάξε προγραμματισμένη εργασία που ανανεώνει το DuckDNS κάθε 5 λεπτά, αντί για το cron της επιλογής Β:

    1. Άνοιξε το Task Scheduler και πάτα Create Task.
    2. Trigger: Repeat task every 5 minutes, για διάρκεια Indefinitely.
    3. Action: Start a program, Program powershell.exe, Arguments (με το δικό σου token και domain):
      -Command "Invoke-WebRequest 'https://www.duckdns.org/update?domains=iris3&token=YOUR_TOKEN&ip='"
  8. Έλεγξε από έξω

    Όπως στο βήμα 11 της επιλογής Α, από browser:

    https://iris3.example.org/health

    Αν δείξει OK, συνέχισε με τις ενότητες «Ρύθμιση στην εφαρμογή» και «Εργαλείο διαχείρισης». Είναι ίδιες, όπου κι αν τρέχει ο server.

Ρύθμιση στην εφαρμογή

  1. Δώσε τη διεύθυνση

    Άνοιξε το μενού (☰) και μετά Ρύθμιση Επικοινωνιών. Στο πεδίο της διεύθυνσης server γράψε, π.χ., https://iris3.example.org χωρίς κάθετο στο τέλος, και αποθήκευσε. Κάν' το σε κάθε συσκευή που θα χρησιμοποιεί τον server. Χωρίς διεύθυνση, η οθόνη Ζεύγος Rendezvous γράφει «Δεν έχει ρυθμιστεί διεύθυνση rendezvous server.»

  2. Όρισε το Κλειδί Δικτύου

    Το πάνελ Server ανοίγει μόνο όταν υπάρχει Κλειδί Δικτύου.

  3. Κάνε ζεύξη συσκευών

    Δες την επόμενη ενότητα.

Ζεύξη με QR

Άνοιξε Ζεύγος Rendezvous από το συρτάρι πλοήγησης. Η μία συσκευή δείχνει κωδικό, η άλλη τον σαρώνει.

  1. Συσκευή Α: Δημιουργία Κωδικού

    Εμφανίζεται QR και κείμενο, με αντίστροφη μέτρηση. Ο κωδικός λήγει.

  2. Συσκευή Β: Σάρωση Κωδικού

    Χρειάζεται άδεια Κάμερας. Αν η συσκευή είναι νέα, δώσε της όνομα. Αν είναι ήδη γνωστή, εμφανίζεται «Pairing επιτυχές».

  3. Συσκευή Α: Ανανέωση και Αποθήκευση

    Η πλευρά που έφτιαξε τον κωδικό δεν βλέπει μόνη της ότι σαρώθηκε. Πάτα Ανανέωση στις Γνωστές Συσκευές, δώσε όνομα και Αποθήκευση.

  4. Στείλε με Κανάλι Γ

    Σε κάθε «Αποστολή» διάλεξε Κανάλι Γ και μετά έναν παραλήπτη: μία Γνωστή Συσκευή ή μία Ομάδα.

Οι Ομάδες φτιάχνονται από το πάνελ Server, με μέλη από τις Γνωστές Συσκευές σου. Μόνο ο δημιουργός μιας ομάδας μπορεί να την επεξεργαστεί ή να τη διαγράψει.

Εργαλείο διαχείρισης για Windows

Το Rendezvous Admin Tool είναι μια εφαρμογή Windows για όποιον διαχειρίζεται τον server. Δείχνει ποιες συσκευές είναι καταχωρημένες, καθαρίζει εκκρεμή μηνύματα και ελέγχει ότι η διαδρομή του δικτύου δουλεύει, χωρίς SSH και χωρίς χειροκίνητο SQL. Δεν βλέπει ποτέ το περιεχόμενο των μηνυμάτων.

Windows 10 ή 11, 64-bit. Δεν χρειάζεται εγκατάσταση ούτε .NET: κατέβασε και τρέξε το RendezvousAdminTool.exe (περίπου 116 MB). Τα Windows ίσως δείξουν «Windows protected your PC», γιατί το πρόγραμμα δεν είναι ψηφιακά υπογεγραμμένο. Πάτα «More info» και μετά «Run anyway».

Τι κάνει

  • Λίστα συσκευών: device id, endpoint, πότε εμφανίστηκε τελευταία φορά, πόσα μηνύματα έστειλε και πόσα δεν έχουν παραδοθεί ακόμα.
  • Διαγραφή μίας, πολλών ή όλων των συσκευών.
  • Εκκαθάριση όλων των εκκρεμών μηνυμάτων του server.
  • Χρόνος κράτησης: πόσο κρατά ο server ένα μη παραδομένο μήνυμα πριν το πετάξει (προεπιλογή 3 ημέρες).
  • Διάγνωση: έλεγχος βάσης, δρομολόγησης μηνύματος και πραγματικής σύνδεσης WebSocket στο /mailbox, από τον υπολογιστή σου μέχρι τον server.
  • Επανεκκίνηση του server από απόσταση.
  • Αυτόματη ανανέωση κάθε 5 δευτερόλεπτα.

Ρύθμιση

  1. Όρισε το admin token στον server

    Αν έφτιαξες τον server με τον οδηγό παραπάνω, το token έχει ήδη οριστεί. Αν όχι, φτιάξε ένα τυχαίο μυστικό, π.χ. με openssl rand -hex 32, και πρόσθεσέ το στο αρχείο υπηρεσίας, κάτω από το [Service]:

    Environment=RENDEZVOUS_ADMIN_TOKEN=το-μυστικό-σου
    sudo systemctl daemon-reload
    sudo systemctl restart iris3-rendezvous

    Χωρίς ορισμένο token, ο server απαντά 404 σε όλες τις διαδρομές διαχείρισης. Είναι κλειστός για διαχείριση από προεπιλογή.

  2. Άνοιξε το εργαλείο

    Στο Server URL γράψε την ίδια διεύθυνση με την εφαρμογή Android, χωρίς κάθετο στο τέλος, π.χ. https://iris3.example.org. Στο Admin Token γράψε το μυστικό του βήματος 1 και πάτα Connect/Refresh.

  3. Οι τιμές αποθηκεύονται

    Μετά την πρώτη επιτυχή σύνδεση, το εργαλείο τις κρατά στο %APPDATA%\IrisRendezvousAdmin\config.json και συνδέεται μόνο του στην επόμενη εκκίνηση.

Το token είναι κλειδί διαχείρισης. Όποιος το έχει μπορεί να διαγράψει συσκευές και να επανεκκινήσει τον server. Το config.json το κρατά ως απλό κείμενο, οπότε μην το μοιράζεσαι και μην το αφήνεις σε κοινόχρηστο υπολογιστή.

Τι κάνει κάθε στοιχείο

ΣτοιχείοΛειτουργία
Πίνακας συσκευώνDevice Id, Endpoint, Last Seen (τοπική ώρα), Sent, Undelivered. Πρώτες οι συσκευές που φάνηκαν πιο παλιά.
Delete selectedΕνεργό όταν επιλέξεις γραμμές. Ζητά επιβεβαίωση και διαγράφει μία μία. Αν κάποια αποτύχει, οι υπόλοιπες συνεχίζουν και βλέπεις σύνοψη. Η διαγραφή δεν αναιρείται, αλλά μια συσκευή ξαναγράφεται μόνη της στη λίστα αν ξανασυνδεθεί.
Delete allΔιαγράφει όλες τις καταχωρημένες συσκευές, με δεύτερη, πιο έντονη επιβεβαίωση.
Run diagnosticsΛίστα OK/FAIL ανά έλεγχο, με χρόνο απόκρισης.
Clear all pendingΣβήνει τα εκκρεμή μηνύματα όλων των συσκευών. Δεν αναιρείται.
Undelivered timeout + SaveΔιαβάζει και αλλάζει τον χρόνο κράτησης των μη παραδομένων μηνυμάτων.
Restart serverΖητά επανεκκίνηση. Το systemd (Restart=always) τον ξανασηκώνει σε λίγα δευτερόλεπτα και κάθε σύνδεση /mailbox ξανασυνδέεται.
Total undeliveredΣυνολικός αριθμός εκκρεμών μηνυμάτων σε όλον τον server.

Αν κάτι δεν δουλεύει

Τι βλέπειςΤι κάνεις
401Λάθος ή άδειο Admin Token. Πρέπει να ταιριάζει με το RENDEZVOUS_ADMIN_TOKEN του server.
404 σε όλαΟ server δεν έχει ορισμένο token. Ρύθμισέ το (βήμα 1) και κάνε επανεκκίνηση.
Σφάλμα δικτύουΈλεγξε το Server URL (https://...), ότι το nginx και το HTTPS δουλεύουν και ότι φτάνεις τη θύρα 443. Όχι απευθείας την εσωτερική θύρα του server.
Αποτυγχάνει μόνο ο έλεγχος WebSocketΤο nginx μάλλον δεν περνά το WebSocket προς το /mailbox. Έλεγξε τις γραμμές proxy_set_header Upgrade και Connection στη ρύθμιση του.

Δεν διαχειρίζεται ομάδες, ζεύξεις ή περιεχόμενο μηνυμάτων, δεν έχει πολλούς διαχειριστές ούτε αρχείο καταγραφής ενεργειών. Όταν διαγράφεις μια συσκευή, οι ζεύξεις της μένουν αδρανείς και δεν σβήνονται.

Ασφάλεια

  • Κράτα την 8443 κλειστή προς τα έξω. Μόνο η 443, με HTTPS, πρέπει να φαίνεται.
  • Ο κωδικός ζεύξης λήγει, και μη έγκυρος ή ληγμένος κωδικός απορρίπτεται. Δεν γίνεται ζεύξη με τη δική σου συσκευή.
  • Το Κανάλι Γ στέλνει πάντα σε συγκεκριμένο παραλήπτη, ποτέ σε όλο το δίκτυο.
  • Το Κλειδί Δικτύου κρυπτογραφεί την επικοινωνία μέσω της γέφυρας. Άλλαξέ το όταν αλλάζει η σύνθεση της ομάδας.
  • Κράτα το αρχείο κλειδιού SSH ασφαλές και μην δίνεις τη διεύθυνση του server σε ανθρώπους εκτός ομάδας.

Αν κάτι δεν δουλεύει

Τι βλέπειςΤι κάνεις
curl http://127.0.0.1:8443/health δεν απαντάΤρέξε sudo systemctl status iris3-rendezvous για να δεις το σφάλμα.
Η διεύθυνση HTTPS δεν ανοίγει απ' έξωΈλεγξε ότι η 443 είναι ανοιχτή (βήμα 3 ή port forwarding) και ότι η IP στο DuckDNS είναι σωστή.
Η IP του server άλλαξεΜπες στο DuckDNS και πάτα «update ip» ξανά.
Έκανες reboot τον serverΤίποτα. Το systemctl enable τον ξεκινά μόνο του.
Raspberry Pi: σταμάτησε μετά από διακοπή ρεύματος ή επανεκκίνηση routerΠερίμενε έως 5 λεπτά να ανανεωθεί το DuckDNS, ή τρέξε ~/duckdns/duck.sh με το χέρι.
BindException: Address already in useΆλλη υπηρεσία έχει τη θύρα. Έλεγξε με sudo ss -tlnp, διάλεξε άλλη και άλλαξε και το RENDEZVOUS_PORT και το proxy_pass.
Το εργαλείο διαχείρισης δείχνει «Refresh failed» ή UnauthorizedΤο token που έγραψες δεν ταιριάζει με το RENDEZVOUS_ADMIN_TOKEN του αρχείου υπηρεσίας, ή η γραμμή λείπει. Σύγκρινέ τα χαρακτήρα προς χαρακτήρα. Αν τα διόρθωσες, τρέξε sudo systemctl daemon-reload && sudo systemctl restart iris3-rendezvous και πάτα ξανά Connect/Refresh.
Τα Windows εμποδίζουν το άνοιγμα του εργαλείου διαχείρισηςΣτο παράθυρο SmartScreen πάτα «More info» και μετά «Run anyway». Το πρόγραμμα δεν είναι ψηφιακά υπογεγραμμένο, γι' αυτό τα Windows το θεωρούν άγνωστο.
(Cloud VPS) Δεν μπορείς να συνδεθείς με SSHΈλεγξε ότι χρησιμοποιείς το σωστό όνομα χρήστη (root σε DigitalOcean, Hetzner και Linode, όχι ubuntu) και το σωστό ιδιωτικό κλειδί.
(Windows) Η υπηρεσία δεν ξεκινάΤρέξε C:\iris3\nssm.exe status IRIS3Rendezvous, ή άνοιξε τα Windows Services (services.msc) και ψάξε το IRIS3Rendezvous ή το IRIS3Caddy για το σφάλμα.
(Windows) Το Caddy δεν παίρνει πιστοποιητικό HTTPSΣυνήθως το domain δεν δείχνει ακόμα στη σωστή δημόσια IP, ή η 443 δεν είναι πραγματικά ανοιχτή από έξω. Το Let's Encrypt πρέπει να φτάσει στη 443 από το διαδίκτυο για να επιβεβαιώσει το domain.

Θέλεις να τη δοκιμάσεις;

Η εφαρμογή διατίθεται σε ανοιχτή δοκιμή στο Google Play. Κατέβασέ την, δοκίμασέ την και πες μας τα σχόλιά σου.

Δοκίμασέ την στο Google Play