Υπηρεσία: Business Intelligence (Metabase)
URL: https://www.metabase.com/
Υποδομή: Docker / Docker Compose
Reverse Proxy: Caddy
Δίκτυο: web (external overlay/bridge)
Η υπηρεσία Metabase εγκαθίσταται μέσω containerization. Για τη διασφάλιση της ακεραιότητας των δεδομένων και των ρυθμίσεων (dashboards, χρήστες, credentials), δεν χρησιμοποιείται η ενσωματωμένη H2 database, αλλά μια αποκλειστική instance της PostgreSQL (version 15-alpine).
Τα δεδομένα της βάσης αποθηκεύονται στο host σύστημα μέσω bind volume, επιτρέποντας την εύκολη λήψη αντιγράφων ασφαλείας (backup) και τη μεταφορά της υπηρεσίας.
Για την αποφυγή σφαλμάτων δικαιωμάτων (permission denied) κατά την εγγραφή της PostgreSQL στο host filesystem, απαιτείται η δημιουργία καταλόγου με συγκεκριμένη ιδιοκτησία (UID 999).
Εντολές προετοιμασίας:
# Δημιουργία καταλόγου για τα δεδομένα της βάσης
mkdir -p metabase-db-data
# Αλλαγή ιδιοκτησίας για να αποφύγουμε permission denied errors.
# Ρύθμιση ιδιοκτησίας για τον χρήστη postgres (UID 999 εντός του container)
sudo chown -R 999:999 metabase-db-data
# Εναλλακτικά, αν δεν σε πειράζει η ασφάλεια σε τοπικό επίπεδο φακέλου:
# sudo chmod 777 metabase-db-dataΑρχείο: docker-compose.yml
#version: '3.8'
services:
# ----------------------------------------------------------------
# Application Service: Metabase
# ----------------------------------------------------------------
metabase:
image: metabase/metabase:latest
container_name: metabase
restart: unless-stopped
networks:
- web
environment:
# Database Connection Configuration
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: metabase
MB_DB_PASS: ${MB_DB_PASS} # Ορίζεται στο .env ή αντικαθίσταται με τον κωδικό
MB_DB_HOST: metabase-db
# Service Configuration
MB_SITE_URL: https://metabase.iosifidis.gr
JAVA_OPTS: "-Xmx1024m" # Όριο μνήμης Java Heap
depends_on:
- metabase-db
# ----------------------------------------------------------------
# Backend Service: PostgreSQL (Metadata Storage)
# ----------------------------------------------------------------
metabase-db:
image: postgres:15-alpine
container_name: metabase-db
restart: unless-stopped
networks:
- web
environment:
POSTGRES_USER: metabase
POSTGRES_PASSWORD: ${MB_DB_PASS} # Πρέπει να ταυτίζεται με το MB_DB_PASS
POSTGRES_DB: metabase
volumes:
# Persistent Storage (Bind Mount)
- ./metabase-db-data:/var/lib/postgresql/data
networks:
web:
external: trueΣημείωση: Συνιστάται η χρήση αρχείου .env για την αποθήκευση των κωδικών με το περιεχόμενο:
MB_DB_PASS=αλλάξε_με_έναν_ισχυρό_κωδικό_σου
Η υπηρεσία εξυπηρετείται μέσω του Caddy, το οποίο διαχειρίζεται αυτόματα τα πιστοποιητικά SSL/TLS. Η επικοινωνία μεταξύ Caddy και Metabase γίνεται εσωτερικά μέσω του δικτύου web.
Αρχείο: Caddyfile
metabase.iosifidis.gr {
# Forwarding traffic to the metabase container on port 3000
reverse_proxy metabase:3000
# Logging configuration
log {
output file /var/log/caddy/metabase_access.log
}
}docker compose up -dΕφόσον τροποποιηθεί το Caddyfile:
docker exec -w /etc/caddy caddy caddy reloadΛόγω της χρήσης bind volume, η διαδικασία backup περιλαμβάνει την απλή αντιγραφή του φακέλου δεδομένων.
- Τερματισμός υπηρεσίας για διασφάλιση data consistency:
docker compose stop
- Αρχειοθέτηση του φακέλου δεδομένων:
tar -czvf metabase_backup_$(date +%F).tar.gz ./metabase-db-data - Επανεκκίνηση υπηρεσίας:
docker compose up -d
Για την αναβάθμιση στην τελευταία έκδοση:
docker compose pull
docker compose up -d