Deployment & HTTPS
Deployment & HTTPS
Το PgArachne είναι σχεδιασμένο να κάνει καλά μία δουλειά: API Gateway. Για SSL/TLS (HTTPS), ασφάλεια headers, και δημόσια δρομολόγηση, θα πρέπει να τοποθετήσετε ένα Reverse Proxy μπροστά του.
Επιλογή A: Caddy Server
Καλύτερο για: Μοντέρνα deployments παραγωγής, ευκολία χρήσης.
Το Caddy είναι ο μοναδικός web server που αποκτά και ανανεώνει αυτόματα SSL certificates (Let’s Encrypt) εξ ορισμού. Απαιτεί σχεδόν καθόλου ρύθμιση.
# Caddyfile
example.com {
reverse_proxy localhost:8080
}Επιλογή B: Nginx
Καλύτερο για: Εταιρικά περιβάλλοντα, σύνθετη δρομολόγηση.
Το Nginx είναι το πρότυπο του κλάδου για load balancing υψηλής απόδοσης. Χρησιμοποιήστε το αν έχετε ήδη υποδομή Nginx. Θα χρειαστεί να διαχειριστείτε το Certbot χειροκίνητα.
server {
server_name example.com;
location / {
proxy_pass http://localhost:8080;
}
}Επιλογή Γ: Ngrok
Καλύτερο για: Τοπική ανάπτυξη, demos, δοκιμές webhook.
Το Ngrok δημιουργεί ένα ασφαλές tunnel από το δημόσιο διαδίκτυο απευθείας στο laptop σας χωρίς να ρυθμίσετε firewalls. Ιδανικό για να δείξετε τη δουλειά σας σε συνεργάτες άμεσα.
./ngrok http 8080Λίστα ελέγχου παραγωγής
- Τερματίστε το TLS στο reverse proxy και προωθήστε τα
X-Forwarded-ProtoκαιX-Forwarded-For. - Ορίστε
TRUSTED_PROXIESστο PgArachne στα εύρη IP/CIDR του proxy σας. - Απενεργοποιήστε το buffering για routes SSE και διατηρήστε τα read timeouts αρκετά μεγάλα για streaming.
- Εκθέστε τις μετρικές μόνο εσωτερικά (προεπιλογή
127.0.0.1:9090) και κάντε scrape από το δίκτυο monitoring σας.
Παράδειγμα ενίσχυσης Nginx (SSE, λήψεις αρχείων, forwarded headers)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# SSE: /{API_PREFIX}/{database}/sse — long-lived stream, must not be buffered
location ~ ^/db/[^/]+/sse$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 1h;
}
# File downloads: /{API_PREFIX}/{database}/file — large files and ZIP archives
location ~ ^/db/[^/]+/file/?$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 300s;
}Αντικαταστήστε το db με το API_PREFIX σας, αν το έχετε αλλάξει.
Μεγάλες λήψεις (/file) πίσω από reverse proxy
- Απενεργοποιήστε το buffering των απαντήσεων (
proxy_buffering offστο Nginx). Ένα μεμονωμένο αρχείο στέλνεται μεContent-Length, ενώ ένα αρχείο ZIP μεταδίδεται (streaming) χωρίς αυτό. Με ενεργό buffering, το Nginx γράφει πρώτα ολόκληρη την απάντηση σε προσωρινό αρχείο, κάτι που καθυστερεί την έναρξη της λήψης και καταναλώνει χώρο στον δίσκο. - Αυξήστε το read timeout (
proxy_read_timeout, προεπιλογή 60 s) αν η συνάρτηση της βάσης που δημιουργεί τα αρχεία μπορεί να τρέχει περισσότερο — το PgArachne δεν στέλνει τίποτα μέχρι η συνάρτηση να επιστρέψει όλες τις γραμμές. - Μη συμπιέζετε το
application/zipή τύπους μέσων που είναι ήδη συμπιεσμένοι (τοgzipσε ZIP απλώς σπαταλά CPU). - Όριο μνήμης: το PgArachne αποθηκεύει προσωρινά στη μνήμη τις γραμμές μίας απάντησης (με όριο το
FILE_MAX_BYTES, προεπιλογή 64 MiB, και τοFILE_MAX_ENTRIES)· ρυθμίστε τα όρια ανάλογα με τον αναμενόμενο αριθμό ταυτόχρονων λήψεων. Τοclient_max_body_sizeαφορά μόνο το μικρό αίτημα JSON, όχι τη λήψη. - Το Caddy κάνει streaming των απαντήσεων από προεπιλογή· δεν χρειάζεται επιπλέον ρύθμιση.