Αυτός ο οδηγός περιγράφει την εγκατάσταση του PrivateBin χρησιμοποιώντας Docker Compose, με Reverse Proxy τον Caddy. Η εγκατάσταση χρησιμοποιεί Bind Mounts για εύκολη μεταφορά (portability) και backup.
Προαπαιτούμενα
- Docker & Docker Compose εγκατεστημένα.
- Υπάρχουσα εγκατάσταση Caddy που τρέχει στο δίκτυο
web. - Domain name (π.χ. μέσω DuckDNS) ρυθμισμένο να δείχνει στην IP του server.
1. Δομή Φακέλων
Δημιουργούμε έναν φάκελο (π.χ. /docker/privatebin) με την εξής δομή:
/privatebin
├── docker-compose.yml # Το αρχείο ορισμού του container
├── conf.php # Οι ρυθμίσεις της εφαρμογής
└── data/ # Φάκελος όπου αποθηκεύονται τα pastes (δημιουργείται αυτόματα)
2. Αρχείο docker-compose.yml
Δημιουργούμε το αρχείο docker-compose.yml. Χρησιμοποιούμε την εικόνα nginx-fpm-alpine που περιέχει ενσωματωμένο web server.
services:
privatebin:
image: privatebin/nginx-fpm-alpine
container_name: privatebin
restart: unless-stopped
# Τρέχει ως χρήστης 'nobody' (uid:65534) για ασφάλεια
read_only: true
# Η εικόνα από προεπιλογή ακούει στην πόρτα 8080
# ports:
# - "8090:8080" # <--- ΠΡΟΣΘΕΣΕ ΑΥΤΟ
# Χρήση Bind Mounts για εύκολο backup/restore
volumes:
- ./data:/srv/data
- ./conf.php:/srv/conf.php:ro
networks:
- web
# Ο χρήστης μέσα στο container είναι ο 'nobody' (uid: 65534)
networks:
web:
external: true
3. Αρχείο Ρυθμίσεων conf.php
Δημιουργούμε το αρχείο conf.php.
ΠΡΟΣΟΧΗ: Η παράμετρος basepath είναι κρίσιμη για να λειτουργεί πίσω από Reverse Proxy.
; <?php exit; ?> DO NOT REMOVE THIS LINE
[main]
name = "My PrivateBin"
; Αντικαταστήστε με το δικό σας domain. Πρέπει να τελειώνει με /
basepath = "https://privatebin.duckdns.org/"
; Ρυθμίσεις συζήτησης
discussion = true
opendiscussion = false
; Ενεργοποίηση Password
password = true
; Ρυθμίσεις λήξης αρχείων
[expire]
default = "1week"
[expire_options]
5min = 300
10min = 600
1hour = 3600
1day = 86400
1week = 604800
1month = 2592000
1year = 31536000
never = 0
[traffic]
limit = 10
4. Ρύθμιση Δικαιωμάτων (Permissions)
Το PrivateBin για λόγους ασφαλείας τρέχει ως χρήστης nobody (UID: 65534). Πρέπει ο φάκελος data στον host να ανήκει σε αυτόν τον χρήστη, αλλιώς η εφαρμογή δεν θα μπορεί να αποθηκεύσει τίποτα.
Τρέξτε τις παρακάτω εντολές στον φάκελο του project:
# Δημιουργία φακέλου (αν δεν υπάρχει)
mkdir data
# Αλλαγή ιδιοκτησίας
sudo chown -R 65534:65534 ./data
# Το conf.php αρκεί να είναι αναγνώσιμο
sudo chmod 644 conf.php
5. Ρύθμιση Caddy (Caddyfile)
Στο κεντρικό αρχείο Caddyfile του συστήματος, προσθέτουμε το παρακάτω μπλοκ.
Οι headers X-Forwarded-Proto και X-Forwarded-Ssl είναι απαραίτητοι για να καταλάβει το PrivateBin ότι λειτουργεί με HTTPS (ώστε να ενεργοποιηθεί η κρυπτογράφηση στον browser).
privatebin.duckdns.org {
# Προαιρετικό logging
log {
output file /var/log/caddy/privatebin.log
}
reverse_proxy privatebin:8080 {
header_up Host {host}
header_up X-Real-IP {remote}
# Απαραίτητα για να λειτουργεί η κρυπτογράφηση (WebCrypto API)
header_up X-Forwarded-Proto https
header_up X-Forwarded-Ssl on
}
}
Μετά την αλλαγή, κάντε reload ή restart το Caddy container.
6. Εκκίνηση και Έλεγχος
- Ξεκινάμε το PrivateBin:
docker compose up -d - Επανεκκινούμε το Caddy (για να δει το νέο config):
docker restart caddy - Ανοίγουμε τον browser στο
https://privatebin.duckdns.org. Tip: Αν δείτε παλιά έκδοση ή σφάλματα, πατήστεCTRL + F5για καθαρισμό cache.
7. Διαδικασία Backup & Restore (Μεταφορά)
Επειδή χρησιμοποιήσαμε bind mounts, η μεταφορά σε νέο μηχάνημα είναι εξαιρετικά απλή.
Backup (Στο παλιό μηχάνημα):
- Σταματάμε το container:
docker compose down - Συμπιέζουμε όλο τον φάκελο:
tar -czvf privatebin-backup.tar.gz .
Restore (Στο νέο μηχάνημα):
- Μεταφέρουμε και αποσυμπιέζουμε το αρχείο.
tar -xzvf privatebin-backup.tar.gz - Σημαντικό: Ελέγχουμε αν διατηρήθηκαν τα δικαιώματα στον φάκελο
data.ls -l data # Αν δεν λέει nobody/nogroup ή 65534, τρέχουμε πάλι: sudo chown -R 65534:65534 ./data - Ξεκινάμε:
docker compose up -d
Σχόλια