
ΠΑΡΑΡΤΗΜΑ Β
ΠΑΡΑΡΤΗΜΑ Β: ΑΡΧΕΙΑ ΔΙΑΜΟΡΦΩΣΗΣ ΣΥΣΤΗΜΑΤΟΣ LXD
ΠΑΡΑΡΤΗΜΑ Β: ΑΡΧΕΙΑ ΔΙΑΜΟΡΦΩΣΗΣ ΣΥΣΤΗΜΑΤΟΣ LXD
Το παρόν παράρτημα περιλαμβάνει τα πλήρη αρχεία διαμόρφωσης (YAML/JSON) που χρησιμοποιήθηκαν για τη δημιουργία και λειτουργία του περιβάλλοντος εικονικοποίησης του έργου. Τα αρχεία αυτά καθορίζουν τις παραμέτρους δικτύωσης, τα προφίλ εκκίνησης, και τις εξατομικευμένες ρυθμίσεις για κάθε container (CT-101, CT-102, CT-103).
Β.1. Ρυθμίσεις Δικτύου: lxdbr1
Ο κώδικας YAML που ορίζει τη γέφυρα δικτύου lxdbr1, το οποίο χρησιμεύει ως εσωτερικό δίκτυο των containers. Η ρύθμιση ipv4.address: 10.11.100.1/24 καθορίζει το υποδίκτυο και την ενεργοποίηση του NAT για πρόσβαση στο Ίντερνετ.
# Ρυθμίσεις της συσκευής δικτύου (network devices) lxdbr1, δημιουργήθηκε για την εργασία μου MyThesis
access_entitlements:
- can_edit
- can_delete
project: default
name: lxdbr1
description: Είναι το δίκτυο (γέφυρα) για τους Container Servers, έχει ρυθμιστεί στο profile:MyThesis_Containers
type: bridge
config:
ipv4.address: 10.11.100.1/24
ipv4.dhcp: 'true'
ipv4.nat: 'true'
ipv6.address: fd42:4607:1f4b:9a65::1/64
ipv6.dhcp: 'true'
ipv6.nat: 'true'
Β.2. Ρυθμίσεις Προφίλ: MyThesis_Containers
Ο κώδικας YAML για το προφίλ MyThesis_Containers, το οποίο εφαρμόζεται σε όλους τους εικονικούς servers. Το προφίλ συνδέει τους containers με το δίκτυο lxdbr1 και επιβάλλει την αυτόματη εκκίνηση (boot.autostart: 'true').
# Οι ρυθμίσεις του νέου προφίλ που δημιουργήθηκε για την εργασία μου MyThesis
name: MyThesis_Containers
description: ''
devices:
eth-1:
network: lxdbr1
type: nic
root:
path: /
pool: default
type: disk
config:
boot.autostart: 'true'
boot.autostart.delay: '15'
access_entitlements:
- can_delete
- can_edit
project: default
Β.3. Ρυθμίσεις Container: CT-101 (DEVSRV)
Ο κώδικας YAML για τον CT-101 (Development Server), ο οποίος φιλοξενεί την πλατφόρμα VuePress. Σημαντικές ρυθμίσεις περιλαμβάνουν τη στατική IP 10.11.100.101 και τον κανόνα proxy-vuepress-dev για την πρόσβαση στο VuePress UI.
access_entitlements:
- can_access_console
- can_delete
- can_edit
- can_exec
- can_manage_backups
- can_manage_snapshots
- can_update_state
name: CT-101-DEVSRV-UBU2404
description: EINAI TO CONTAINER ΟΠΟΥ ΤΡΕΧΕΙ Ο DEVELOPMENT SERVER ΤΟΥ VUEPRESS. UFW ALLOW (8080, 10000, IN-OUT-ROUTE) USER sudo digilady (3edc+^YHN). APPS(WEBMIN FASTFETCH VUEPRESS) SCRIPTS (START,STOP,BUILD,BACKUP,PUBLISH)
status: Stopped
status_code: 102
created_at: '2025-10-13T02:10:14.73723057Z'
last_used_at: '2025-10-13T02:11:07.692983041Z'
location: none
type: container
project: default
architecture: x86_64
ephemeral: false
stateful: false
profiles:
- MyThesis_Containers
config:
boot.autostart.delay: '10'
image.architecture: amd64
image.description: ubuntu 24.04 LTS amd64 (release) (20251001)
image.label: release
image.os: ubuntu
image.release: noble
image.serial: '20251001'
image.type: squashfs
image.version: '24.04'
volatile.base_image: 22b3bd8a5d4842f1955ffbaeb8e02900019c28758a6e7b7b27869172652202e9
volatile.cloud-init.instance-id: c06ed4da-7b0c-4ec2-8816-b274476ff530
volatile.eth-1.hwaddr: 00:16:3e:2c:65:7a
volatile.idmap.base: '0'
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: STOPPED
volatile.last_state.ready: 'false'
volatile.uuid: 89ec45de-e705-4b53-917e-96660443a6e8
volatile.uuid.generation: 89ec45de-e705-4b53-917e-96660443a6e8
devices:
eth-1:
ipv4.address: 10.11.100.101
name: eth0
nictype: bridged
parent: lxdbr1
type: nic
proxy-vuepress-dev:
connect: tcp:10.11.100.101:8080
listen: tcp:192.168.1.146:1010
type: proxy
proxy-webmin:
connect: tcp:10.11.100.101:10000
listen: tcp:192.168.1.146:10101
type: proxy
Β.3.1. Αρχείο Εξαρτήσεων VuePress (package.json)
Το αρχείο package.json του VuePress, το οποίο τεκμηριώνει τις εξαρτήσεις (devDependencies) και τα scripts που απαιτούνται για τη δημιουργία και λειτουργία του συστήματος τεκμηρίωσης.
{
"name": "mythesis-digilady-uth2025",
"description": "Σύστημα διαχείρισης τεκμηρίωσης για την οργάνωση και δημοσίευση περιεχομένου πτυχιακής εργασίας. Βασίζεται σε τεχνολογίες στατικών γεννητριών ιστοσελίδων, VuePress, Apache και Linux containers, προσφέροντας λειτουργίες όπως εκτύπωση, αυτόματα backups και απομακρυσμένη συνεργασία.",
"version": "2.0.0",
"license": "MIT",
"type": "module",
"scripts": {
"docs:build": "vuepress-vite build src",
"docs:clean-dev": "vuepress-vite dev src --clean-cache",
"docs:dev": "vuepress-vite dev src",
"docs:update-package": "npx vp-update"
},
"devDependencies": {
"@vuepress/bundler-vite": "2.0.0-rc.24",
"@vuepress/plugin-copyright": "^2.0.0-rc.112",
"@vuepress/plugin-prismjs": "^2.0.0-rc.112",
"@vuepress/plugin-reading-time": "^2.0.0-rc.112",
"@vuepress/plugin-revealjs": "^2.0.0-rc.112",
"@vuepress/plugin-search": "^2.0.0-rc.112",
"@vuepress/plugin-shiki": "^2.0.0-rc.112",
"@vuepress/plugin-watermark": "^2.0.0-rc.112",
"chart.js": "^4.5.0",
"echarts": "^5.6.0",
"markmap-lib": "^0.18.12",
"markmap-toolbar": "^0.18.12",
"markmap-view": "^0.18.12",
"sass-embedded": "^1.93.2",
"vue": "^3.5.17",
"vuepress": "2.0.0-rc.24",
"vuepress-plugin-reading-time": "^0.1.1",
"vuepress-theme-hope": "2.0.0-rc.94"
}
}
Β.4. Ρυθμίσεις Container: CT-102 (FILESRV)
Ο κώδικας YAML για τον CT-102 (File Server). Η κρίσιμη ρύθμιση proxy-samba επιτρέπει την ανακατεύθυνση της θύρας 445 (SMB) για κοινή χρήση αρχείων.
# ΡΥΘΜΙΣΕΙΣ CT-102-FILESRV-UBU2404
access_entitlements:
- can_access_console
- can_delete
- can_edit
- can_exec
- can_manage_backups
- can_manage_snapshots
- can_update_state
name: CT-102-FILESRV-UBI2404
description: 'ΕΊΝΑΙ ΤΟ CONTAINER ΌΠΟΥ ΤΡΈΧΕΙ Ο ΔΙΑΚΟΜΙΣΤΉΣ ΙΣΤΟΎ. UFW ALLOW (10000, 139, 445, 2003, IN-OUT-ROUTE). ΧΡΉΣΤΗΣ: sudo digilady (3edc+^YHN). ΕΦΑΡΜΟΓΈΣ: (Samba, WEBMIN, FASTFETCH). SCRIPTS: ( - )'
status: Stopped
status_code: 102
created_at: '2025-10-11T07:16:04.11228356Z'
last_used_at: '2025-10-12T20:26:43.603890649Z'
location: none
type: container
project: default
architecture: x86_64
ephemeral: false
stateful: false
profiles:
- MyThesis_Containers
config:
boot.autostart.delay: '10'
image.architecture: amd64
image.description: ubuntu 24.04 LTS amd64 (release) (20251001)
image.label: release
image.os: ubuntu
image.release: noble
image.serial: '20251001'
image.type: squashfs
image.version: '24.04'
limits.memory: 1GiB
volatile.base_image: 22b3bd8a5d4842f1955ffbaeb8e02900019c28758a6e7b7b27869172652202e9
volatile.cloud-init.instance-id: b38ea56f-226b-4573-ac62-e5f901c2a38d
volatile.eth-1.hwaddr: 00:16:3e:26:59:0e
volatile.idmap.base: '0'
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: STOPPED
volatile.last_state.ready: 'false'
volatile.uuid: 22d6bf1b-44cd-4c81-adca-deef9aae84cc
volatile.uuid.generation: 22d6bf1b-44cd-4c81-adca-deef9aae84cc
devices:
eth-1:
ipv4.address: 10.11.100.102
name: eth0
nictype: bridged
parent: lxdbr1
type: nic
proxy-samba:
connect: tcp::445
listen: tcp:192.168.1.146:445
type: proxy
proxy-webmin:
connect: tcp::10000
listen: tcp:192.168.1.146:10102
type: proxy
Β.5. Ρυθμίσεις Container: CT-103 (WEBSRV)
Ο κώδικας YAML για τον CT-103 (Web Server). Η κρίσιμη ρύθμιση proxy-apache-website ανακατευθύνει την HTTP θύρα 80 του container στην αντίστοιχη του Host για δημόσια πρόσβαση στον ιστότοπο.
# ΡΥΘΜΙΣΕΙΣ CT-103-WEBSRV-UBU2404
access_entitlements:
- can_access_console
- can_delete
- can_edit
- can_exec
- can_manage_backups
- can_manage_snapshots
- can_update_state
name: CT-103-WEBSRV-UBU2404
description: 'ΕΊΝΑΙ ΤΟ CONTAINER ΌΠΟΥ ΤΡΈΧΕΙ Ο ΔΙΑΚΟΜΙΣΤΉΣ ΑΡΧΕΊΩΝ. UFW ALLOW (10000, 80, 22 IN-OUT-ROUTE). ΧΡΉΣΤΗΣ: sudo digilady (3edc+^YHN). ΕΦΑΡΜΟΓΈΣ: (APACHE, SSH). SCRIPTS: (-).'
status: Stopped
status_code: 102
created_at: '2025-10-11T07:16:54.080323025Z'
last_used_at: '2025-10-12T20:54:15.541006685Z'
location: none
type: container
project: default
architecture: x86_64
ephemeral: false
stateful: false
profiles:
- MyThesis_Containers
config:
boot.autostart.delay: '0'
image.architecture: amd64
image.description: ubuntu 24.04 LTS amd64 (release) (20251001)
image.label: release
image.os: ubuntu
image.release: noble
image.serial: '20251001'
image.type: squashfs
image.version: '24.04'
limits.memory: 2GiB
volatile.apply_template: rename
volatile.base_image: 22b3bd8a5d4842f1955ffbaeb8e02900019c28758a6e7b7b27869172652202e9
volatile.cloud-init.instance-id: 41e852dc-ed20-4e80-949a-f1ebefbc1093
volatile.eth-1.hwaddr: 00:16:3e:25:78:96
volatile.idmap.base: '0'
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: STOPPED
volatile.last_state.ready: 'false'
volatile.uuid: fe465843-d575-4d08-a760-8022e43d5723
volatile.uuid.generation: fe465843-d575-4d08-a760-8022e43d5723
devices:
eth-1:
ipv4.address: 10.11.100.103
name: eth0
nictype: bridged
parent: lxdbr1
type: nic
proxy-apache-website:
connect: tcp::80
listen: tcp:192.168.1.146:80
type: proxy
proxy-webmin:
connect: tcp::10000
listen: tcp:192.168.1.146:10103
type: proxy
Β.6.Φάση Δημιουργίας Αντιγράφου Ασφαλείας (lxc-export-image)
Η διαδικασία Backup εκτελείται από το script, το οποίο έχει ως πρωταρχικό σκοπό τη λήψη ενός ακριβούς στιγμιότυπου της κατάστασης του container.
!/bin/bash
#===================================================================================#
# Script: lxc-export-image #
# Σκοπός: Δημιουργία αντιγράφου ασφαλείας (Image & Config) του container. #
#===================================================================================#
# --- 1. Ορισμός Μεταβλητών ---
CONTAINER_NAME="CT-101-DEVSRV-UBU2404" # Όνομα του container
IMAGE_ALIAS="prometheus_devsrv" # Alias για την εικόνα
BACKUP_PATH="/opt/dlek" # Διαδρομή αποθήκευσης των backups
LOG_FILE="${BACKUP_PATH}/backup_log.txt" # Αρχείο log
# --- 2. Λειτουργίες Χρώματος ---
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # Χωρίς χρώμα
# --- 3. Δημιουργία Καταλόγου για Logs ---
mkdir -p "$BACKUP_PATH" # Δημιουργούμε τον κατάλογο αν δεν υπάρχει
touch "$LOG_FILE" # Δημιουργούμε το log file αν δεν υπάρχει
chmod 664 "$LOG_FILE" # Ρυθμίζουμε δικαιώματα για το αρχείο log
# --- 4. Έναρξη Logging ---
exec > >(tee -a "$LOG_FILE") 2>&1
echo -e "\n${GREEN}=== Έναρξη Διαδικασίας Export/Backup του ${CONTAINER_NAME} ===${NC}"
# --- 5. Έλεγχος Κατάστασης Container ---
# Ελέγχουμε αν το container είναι σε κατάσταση 'RUNNING'. Αν είναι, τον σταματάμε.
STATUS=$(lxc info "$CONTAINER_NAME" | grep "Status" | awk '{print $2}')
if [ "$STATUS" == "RUNNING" ]; then
echo -e "${YELLOW}[ACTION]${NC} Το container '${CONTAINER_NAME}' είναι σε κατάσταση 'RUNNING'. Το σταματάμε..."
lxc stop "$CONTAINER_NAME" --force
echo -e "${GREEN}[SUCCESS]${NC} Το container σταμάτησε επιτυχώς."
else
echo -e "${GREEN}[INFO]${NC} Το container '${CONTAINER_NAME}' δεν είναι σε κατάσταση 'RUNNING'."
fi
# --- 6. Export του Config (YAML) ---
echo -e "\n${GREEN}---> 1/3: Εξαγωγή Ρυθμίσεων (YAML) <---${NC}"
# Εξάγουμε τις ρυθμίσεις σε αρχείο YAML
lxc config show "$CONTAINER_NAME" --expanded > "${BACKUP_PATH}/${CONTAINER_NAME}.yaml"
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR]${NC} Αποτυχία εξαγωγής του config YAML. Βεβαιωθείτε για τα δικαιώματα στον φάκελο ${BACKUP_PATH}. Διακόπτεται.${NC}"
exit 1
fi
echo -e "${GREEN}[SUCCESS]${NC} Οι ρυθμίσεις αποθηκεύτηκαν στο: ${BACKUP_PATH}/${CONTAINER_NAME}.yaml"
# --- 7. Export της εικόνας του Container ---
echo -e "\n${GREEN}---> 2/3: Export της εικόνας του Container <---${NC}"
# Εκτελούμε το export της εικόνας του container
lxc export "$CONTAINER_NAME" "${BACKUP_PATH}/${IMAGE_ALIAS}.tar.gz"
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR]${NC} Αποτυχία εξαγωγής της εικόνας του container. Διακόπτεται.${NC}"
exit 1
fi
echo -e "${GREEN}[SUCCESS]${NC} Η εικόνα αποθηκεύτηκε στο: ${BACKUP_PATH}/${IMAGE_ALIAS}.tar.gz"
# --- 8. Τέλος Διαδικασίας ---
echo -e "\n${GREEN}========================================================================${NC}"
echo -e "${GREEN}ΕΞΑΓΩΓΗ ΟΛΟΚΛΗΡΩΘΗΚΕ! Τα αρχεία σας είναι έτοιμα για το Rebuild script.${NC}"
echo -e "${GREEN
Β.7.Φάση Επαναφοράς (Script: lxc-dev-phoenix)
Σε περίπτωση αστοχίας ή ανάγκης ανακατασκευής, το δεύτερο script (lxc-dev-phoenix) αναλαμβάνει την πλήρη επαναφορά του container (rebuild).
#!/bin/bash
#===================================================================================#
# Script: lxc-dev-phoenix #
# Σκοπός: Επαναφορά (Import) του container από το backup αρχείο. #
#===================================================================================#
# --- 1. Ορισμός Μεταβλητών ---
BACKUP_PATH="/opt/dlek" # Διαδρομή αποθήκευσης των backups
LOG_FILE="${BACKUP_PATH}/import_log.txt" # Αρχείο log
# --- 2. Λειτουργίες Χρώματος ---
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # Χωρίς χρώμα
# --- 3. Δημιουργία Καταλόγου για Logs ---
mkdir -p "$BACKUP_PATH" # Δημιουργούμε τον κατάλογο αν δεν υπάρχει
touch "$LOG_FILE" # Δημιουργούμε το log file αν δεν υπάρχει
chmod 664 "$LOG_FILE" # Ρυθμίζουμε δικαιώματα για το αρχείο log
# --- 4. Έναρξη Logging ---
exec > >(tee -a "$LOG_FILE") 2>&1
echo -e "\n${GREEN}=== Έναρξη Διαδικασίας Επαναφοράς Container ===${NC}"
# --- 5. Έλεγχος Αρχείων Backup ---
echo -e "\n${YELLOW}[INFO]${NC} Διαθέσιμα αρχεία backup στο φάκελο '${BACKUP_PATH}':"
FILES=($(ls "${BACKUP_PATH}"/*.tar.gz 2>/dev/null))
if [ ${#FILES[@]} -eq 0 ]; then
echo -e "${RED}[ERROR]${NC} Δεν βρέθηκαν αρχεία backup. Διακόπτεται.${NC}"
exit 1
fi
# --- 6. Εμφάνιση Λίστας για Επιλογή ---
for i in "${!FILES[@]}"; do
echo -e "${YELLOW}[$i]${NC} ${FILES[$i]}"
done
# --- 7. Ζητάμε την Επιλογή του Χρήστη ---
read -p "Δώστε τον αριθμό του αρχείου που θέλετε να επαναφέρετε: " FILE_INDEX
# --- 8. Έλεγχος Επιλογής Χρήστη ---
if ! [[ "$FILE_INDEX" =~ ^[0-9]+$ ]] || [ "$FILE_INDEX" -ge "${#FILES[@]}" ]; then
echo -e "${RED}[ERROR]${NC} Μη έγκυρος αριθμός επιλογής. Διακόπτεται.${NC}"
exit 1
fi
# --- 9. Ρύθμιση της Διαδρομής του Backup Αρχείου ---
BACKUP_FILE="${FILES[$FILE_INDEX]}"
# --- 10. Επαναφορά του Container ---
echo -e "${YELLOW}[ACTION]${NC} Επαναφορά του container από το αρχείο '${BACKUP_FILE}'..."
lxc import "$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR]${NC} Αποτυχία επαναφοράς του container από το αρχείο. Διακόπτεται.${NC}"
exit 1
fi
# --- 11. Ενεργοποίηση του Container ---
CONTAINER_NAME=$(basename "$BACKUP_FILE" .tar.gz) # Λάβουμε το όνομα του container από το αρχείο
echo -e "${YELLOW}[ACTION]${NC} Ενεργοποίηση του container '${CONTAINER_NAME}'..."
lxc start "$CONTAINER_NAME"
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR]${NC} Αποτυχία ενεργοποίησης του container '${CONTAINER_NAME}'.${NC}"
exit 1
fi
# --- 12. Τέλος Διαδικασίας ---
echo -e "\n${GREEN}========================================================================${NC}"
echo -e "${GREEN}Η ΕΠΑΝΑΦΟΡΑ ΟΛΟΚΛΗΡΩΘΗΚΕ! Το container '${CONTAINER_NAME}' είναι έτοιμο προς χρήση.${NC}"
echo -e "${GREEN}========================================================================${NC}"