Πώς να φιλοξενήσετε το Excalidraw οι ίδιοι το 2026: συνεργασία, TLS και όρια δεδομένων
Πρακτικός οδηγός αυτοφιλοξενίας του Excalidraw με Docker, θύρες, μόνιμα δεδομένα, TLS, ασφάλεια, αντίγραφα ασφαλείας και τις αστοχίες που εμποδίζουν τη χρήση σε production. Το 2026.
Αν έχετε ήδη προσπαθήσει να φιλοξενήσετε το Excalidraw οι ίδιοι, πιθανότατα γνωρίζετε την απογοητευτική κατάσταση: το UI εμφανίζεται, αλλά η συνεργασία αποτυγχάνει επειδή το WebSocket endpoint είναι λάθος. Η αναδημιουργία του container σπάνια διορθώνει μια ασυμφωνία μεταξύ URL, state και dependencies.
Αυτός ο οδηγός χρησιμοποιεί ένα συγκεκριμένο κριτήριο ολοκλήρωσης — σχεδιάστε και εξαγάγετε ένα διάγραμμα, μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και επανασυνδέστε ένα δεύτερο browser. Κάθε επιλογή ρύθμισης αξιολογείται με βάση αυτό το κριτήριο και όχι με βάση μια πράσινη ένδειξη container.
Επαναφορά του Excalidraw σε κεντρικό υπολογιστή χωρίς δεδομένα
Για τη βασική ανάπτυξη του Excalidraw, το επίπεδο των container είναι αναλώσιμο και δεν απαιτείται volume δεδομένων. Το manifest αποκατάστασης δεν περιλαμβάνει δεδομένα server στη βασική image· δημιουργήστε αντίγραφα ασφαλείας για οποιοδήποτε ξεχωριστό collaboration service. Διατηρήστε το image digest, τη ρύθμιση και τυχόν assets που συντηρούνται ξεχωριστά υπό έλεγχο αλλαγών.
Διαγράψτε και δημιουργήστε ξανά το service σε καθαρό περιβάλλον και, στη συνέχεια, αποδείξτε ότι ο client αναδημιουργείται από την pinned image και ότι το ξεχωριστό room service επαναφέρει οποιοδήποτε state συνεργασίας υπόσχεται να διατηρεί. Το Git repository to production guide αποτελεί το σχετικό μοντέλο εδώ: αναδημιουργήστε το artifact και δημιουργήστε αντίγραφα ασφαλείας μόνο για εξωτερικό state που πράγματι υπάρχει.
Μην χαρακτηρίζετε έναν κατάλογο ως persistent αν το Excalidraw δεν γράφει εκεί ουσιαστικά δεδομένα. Τα κενά ή αχρησιμοποίητα mounts δημιουργούν ψευδή αίσθηση ασφάλειας και κάνουν τους επόμενους operators να αναζητούν το state σε λάθος σημείο.
Χαρτογραφήστε το Excalidraw πριν αγγίξετε το Docker
Η HTTP διεργασία του Excalidraw ακούει στη θύρα 80· διατηρήστε αυτή τη θύρα στο application network και δημοσιεύστε μόνο το platform route. Η τοπική απαίτηση runtime είναι ένας ξεχωριστός room server και ένα storage layer για persistent συνεργασία. Διατηρήστε τον κύκλο ζωής του ρητά καθορισμένο, ώστε η μεταφορά του Excalidraw μεταξύ hosts να μην αλλάζει αθόρυβα τη συμπεριφορά του.
Καταγράψτε το όριο ως ένα σύντομο contract: ποιος είναι υπεύθυνος για την απαίτηση, ποιο credential χρησιμοποιείται, ποιο timeout είναι αποδεκτό και πώς εμφανίζεται η αστοχία. Στη συνέχεια εκτελέστε αυτή τη συναλλαγή: σχεδιάστε και εξαγάγετε ένα διάγραμμα, μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και επανασυνδέστε ένα δεύτερο browser. Παρατηρήστε την παράδοση static assets για τη βασική image, με τις WebSocket συνδέσεις και το room state να ανήκουν στο ξεχωριστό collaboration service κατά την εκτέλεση, επειδή αυτό το workload παρέχει πιο χρήσιμο αρχικό μέγεθος από ένα αδρανές container.
Έλεγχος αποδοχής production για το Excalidraw
Ένας release candidate για το Excalidraw κερδίζει traffic ολοκληρώνοντας ένα σταθερό σενάριο: σχεδιάστε και εξαγάγετε ένα διάγραμμα, μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και επανασυνδέστε ένα δεύτερο browser. Καταγράψτε το image digest, τη μη ευαίσθητη αποτελεσματική ρύθμιση, το public origin και τα timestamps για αυτό το σενάριο. Τα δεδομένα δοκιμής πρέπει να είναι αναλώσιμα, αλλά αρκετά ρεαλιστικά ώστε να ασκούν την ίδια διαδρομή με τους χρήστες.
Εκτελέστε τον έλεγχο μετά την αντικατάσταση του runtime και, στη συνέχεια, αναδημιουργήστε το service χωρίς δεδομένα server στη βασική image· δημιουργήστε αντίγραφα ασφαλείας για οποιοδήποτε ξεχωριστό collaboration service. Η αποκατάσταση πετυχαίνει όταν ο client αναδημιουργείται από την pinned image και το ξεχωριστό room service επαναφέρει οποιοδήποτε state συνεργασίας υπόσχεται να διατηρεί. Συγκρίνετε τις μετρήσεις πόρων για την παράδοση static assets της βασικής image, με τις WebSocket συνδέσεις και το room state να ανήκουν στο ξεχωριστό collaboration service, με την προηγούμενη έκδοση και διερευνήστε κάθε ουσιαστική απόκλιση πριν από την προώθηση.
Τέλος, εκτελέστε αυτή την ελεγχόμενη αστοχία: υποβάλετε ακίνδυνη είσοδο κοντά στο όριο πόρων ή μορφής που σχετίζεται με αυτό το όριο: το UI φορτώνει, αλλά η συνεργασία αποτυγχάνει επειδή το WebSocket endpoint είναι λάθος. Επαληθεύστε ότι το Excalidraw εξηγεί την αστοχία, δεν καταστρέφει το υπάρχον state και συνεχίζει μετά την επαναφορά της έγκυρης συνθήκης. Αποθηκεύστε ένα αποχαρακτηρισμένο απόσπασμα log και τον χρόνο αποκατάστασης. Συνολικά, αυτοί οι έλεγχοι καλύπτουν τη συμπεριφορά, την ανθεκτικότητα και τη λειτουργικότητα και όχι απλώς το uptime της διεργασίας.
Μετατρέψτε την τοπική εντολή σε inspectable service
Μια εκκίνηση με χαρακτηριστικά production είναι σκόπιμα απλή: ονομαστικό state, ρητή θύρα και κανένα secret μέσα στην image.
docker run -d \
--name excalidraw \
--restart unless-stopped \
-p 127.0.0.1:80:80 \
excalidraw/excalidraw:latest
Το παράδειγμα αποτελεί baseline και όχι πλήρη supporting stack. Επιβεβαιώστε την τοπική απαίτηση πριν από την έκθεση: ένας ξεχωριστός room server και ένα storage layer για persistent συνεργασία. Ελέγξτε τα ενεργά mounts και τον listener και, στη συνέχεια, δοκιμάστε να σχεδιάσετε και να εξαγάγετε ένα διάγραμμα, να μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και να επανασυνδέσετε ένα δεύτερο browser. Κλειδώστε την image που λειτουργεί πριν από την επόμενη επανεκκίνηση.
Αποφάσεις ασφάλειας ειδικά για το Excalidraw
Στο Excalidraw, η περιστροφή λογαριασμών δεν αποτελεί το δύσκολο έργο hardening, επειδή η standard image δεν διαθέτει account store. Εστιάστε στο να μην υποθέτετε ότι η static image από μόνη της παρέχει μόνιμη αποθήκευση κοινόχρηστων rooms και προστατεύστε τυχόν ιδιωτικά collaboration rooms. Μην ισχυρίζεστε ότι υπάρχει durable συνεργασία όταν έχει αναπτυχθεί μόνο η web image του Excalidraw.
Χρησιμοποιήστε HTTPS, προαιρετικό platform authentication και ένα ελεγμένο image digest. Μην κάνετε mount άσχετα δεδομένα του host και περιορίστε το workload που αντιπροσωπεύει η παράδοση static assets της βασικής image, με τις WebSocket συνδέσεις και το room state να ανήκουν στο ξεχωριστό collaboration service. Ένας καθαρός external client πρέπει να βλέπει το προβλεπόμενο build, ενώ ένας μη εξουσιοδοτημένος client πρέπει να απορρίπτεται πριν φτάσει στο container, όταν η πρόσβαση είναι περιορισμένη.
Δρομολογήστε το Excalidraw χωρίς να παραπλανάτε σχετικά με το HTTPS
Η έκδοση TLS είναι μόνο το μισό route του Excalidraw. Εξυπηρετήστε τον client μέσω HTTPS και ρυθμίστε ξεχωριστά τα collaboration endpoints. Στείλτε την κίνηση εσωτερικά στη θύρα 80 και προωθήστε το εξωτερικό scheme, ώστε τα generated URLs και τα secure cookies να παραμένουν συνεπή.
Χρησιμοποιήστε το πλήρες σενάριο του Excalidraw από ένα καθαρό network και όχι απλώς τη root page. Ένα 502 ή μια αποτυχία πιστοποιητικού μπορεί να απομονωθεί με το automatic domain and TLS setup. Αν η κίνηση φτάνει στη διεργασία και το UI φορτώνει, αλλά η συνεργασία αποτυγχάνει επειδή το WebSocket endpoint είναι λάθος, διαγνώστε τη συνθήκη στο σημείο όπου εμφανίζεται αντί να προσθέτετε διαδοχικά redirects.
Αναβαθμίστε το Excalidraw χωρίς εικασίες
Ο χρήσιμος δείκτης service για το Excalidraw είναι η επιτυχής ολοκλήρωση του «σχεδιάστε και εξαγάγετε ένα διάγραμμα, μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και επανασυνδέστε ένα δεύτερο browser». Συνδυάστε αυτό το αποτέλεσμα με την παράδοση static assets της βασικής image, με τις WebSocket συνδέσεις και το room state να ανήκουν στο ξεχωριστό collaboration service· μια πράσινη root page δεν λέει τίποτα για τη συμβατότητα του output ή την εξάντληση πόρων.
Πριν αντικαταστήσετε την image, υπολογίστε τον εξής κίνδυνο: οι εκδόσεις frontend, room-server και storage πρέπει να δοκιμάζονται μαζί, αντί να υποθέτετε ότι ο static client κατέχει τα κοινόχρηστα δεδομένα. Δοκιμάστε αντιπροσωπευτικές εισόδους και εισόδους ορίου και στις δύο εκδόσεις και διατηρήστε το παλιό digest μέχρι να περάσει ο candidate. Αν το UI φορτώνει, αλλά η συνεργασία αποτυγχάνει επειδή το WebSocket endpoint είναι λάθος, ελέγξτε τη μορφή του request, τη συμπεριφορά του client και τα runtime logs πριν αλλάξετε τις ρυθμίσεις route ή storage.
Χρησιμοποιήστε το Dockup για το platform layer
Ένα one-click template του Excalidraw πρέπει να κωδικοποιεί το image digest, τη θύρα 80, το health timing, το domain και το TLS. Επειδή το βασικό service είναι stateless, το Dockup μπορεί να το αναδημιουργήσει απευθείας σε Dockup compute ή σε συνδεδεμένο μηχάνημα, χωρίς να προσποιείται ότι ένα κενό volume αποτελεί αντίγραφο ασφαλείας.
Μετά την εκκίνηση, εξυπηρετήστε τον client μέσω HTTPS και ρυθμίστε ξεχωριστά τα collaboration endpoints. Το Dockup πρέπει να διατηρεί τις ρυθμίσεις runtime του Excalidraw, ενώ ο operator επιβεβαιώνει την εξής τοπική απαίτηση: έναν ξεχωριστό room server και ένα storage layer για persistent συνεργασία. Επαληθεύστε το εξής αποτέλεσμα: σχεδιάστε και εξαγάγετε ένα διάγραμμα, μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και επανασυνδέστε ένα δεύτερο browser. Κάθε μεταγενέστερη stateful επέκταση πρέπει να δηλώνει το δικό της mount, secret και restore test, αντί να αλλάζει αθόρυβα τη σημασία του βασικού template.
Συχνές ερωτήσεις
Τι χρειάζεται το Excalidraw για ανάπτυξη σε production;
Δρομολογήστε το container του Excalidraw στη θύρα 80 μέσω ενός HTTPS origin. Η τοπική απαίτηση runtime είναι ένας ξεχωριστός room server και ένα storage layer για persistent συνεργασία. Μην θεωρήσετε το Excalidraw έτοιμο μέχρι να μπορείτε να σχεδιάσετε και να εξαγάγετε ένα διάγραμμα, να μοιραστείτε έναν σύνδεσμο συνεργασίας μέσω του ρυθμισμένου room service και να επανασυνδέσετε ένα δεύτερο browser.
Ποια δεδομένα του Excalidraw πρέπει να περιλαμβάνονται σε αντίγραφο ασφαλείας;
Η standard image του Excalidraw δεν διαθέτει υποχρεωτικό mount δεδομένων εφαρμογής. Διατηρήστε τη ρύθμιση ανάπτυξής της και δημιουργήστε ξεχωριστά αντίγραφα ασφαλείας για οποιοδήποτε συνδεδεμένο state· η αποκατάσταση πετυχαίνει όταν ο client αναδημιουργείται από την pinned image και το ξεχωριστό room service επαναφέρει οποιοδήποτε state συνεργασίας υπόσχεται να διατηρεί.
Απαιτεί το Excalidraw HTTPS πίσω από reverse proxy;
Χρησιμοποιήστε HTTPS για το public origin του Excalidraw και διατηρήστε τη θύρα 80 στο internal route. Εφαρμόστε σωστά τη ρύθμιση του Excalidraw: εξυπηρετήστε τον client μέσω HTTPS και ρυθμίστε ξεχωριστά τα collaboration endpoints. Για το Excalidraw, το HTTPS προστατεύει credentials ή περιεχόμενο χρηστών κατά τη μεταφορά και διατηρεί συνεπή τη συμπεριφορά του client που εξαρτάται από το origin.
Πώς πρέπει να δοκιμάζεται μια αναβάθμιση του Excalidraw;
Αναπτύξτε την candidate image του Excalidraw δίπλα στην τρέχουσα και επαναλάβετε τη συναλλαγή αποδοχής με γνωστή είσοδο. Δώστε ιδιαίτερη προσοχή, επειδή οι εκδόσεις frontend, room-server και storage πρέπει να δοκιμάζονται μαζί, αντί να υποθέτετε ότι ο static client κατέχει τα κοινόχρηστα δεδομένα. Το standard container δεν περιλαμβάνει migration δεδομένων, επομένως διατηρήστε το προηγούμενο digest μέχρι να περάσουν οι έλεγχοι output και συμβατότητας.
