Το Alpine Linux είναι το μικρότερο image που προσφέρουμε. Στους servers μας ένα νέο Alpine 3.21 σε αδράνεια χρησιμοποιούσε 55 MB RAM και 153 MB δίσκου, έναντι 313 MB και 2,7 GB για το Ubuntu 24.04. Το τίμημα είναι ότι αφήνετε τα γνώριμα εργαλεία. Το Alpine χρησιμοποιεί apk αντί για apt, doas αντί για sudo, OpenRC αντί για systemd και musl αντί για glibc.
Τα παρακάτω βήματα είναι τα ίδια πρώτα δέκα λεπτά όπως στο Debian ή στο Ubuntu, προσαρμοσμένα στο Alpine. Τρέξαμε κάθε εντολή στο image μας με Alpine 3.21 πριν τη δημοσίευση, και δύο από αυτές μας ξάφνιασαν την πρώτη φορά. Συνδεθείτε ως root με τον κωδικό από τον πίνακα ελέγχου.
1. Ενημερώστε και κάντε μία επανεκκίνηση
apk update && apk upgrade
uname -r
ls /lib/modules
Ο server σας εγκατέστησε ήδη τις διαθέσιμες ενημερώσεις στην πρώτη εκκίνηση, οπότε το apk upgrade συνήθως έχει λίγα να κάνει. Κοιτάξτε καλύτερα τις δύο τελευταίες γραμμές. Αν εκείνη η πρώτη ενημέρωση έφερε νέο πυρήνα, ο πυρήνας που τρέχει (uname -r) δεν έχει πλέον τα modules του στον δίσκο. Ό,τι φορτώνει module αποτυγχάνει μέχρι να κάνετε επανεκκίνηση. Στον δοκιμαστικό μας server η εγκατάσταση του τείχους προστασίας τύπωσε ERROR: Couldn't determine iptables version. Αν οι δύο εκδόσεις διαφέρουν, κάντε επανεκκίνηση τώρα:
reboot
Ο δοκιμαστικός μας server επέστρεψε σε λιγότερο από ένα λεπτό.
2. Δημιουργήστε χρήστη που μπορεί να συνδεθεί
adduser -D deploy
passwd deploy
adduser deploy wheel
Μην παραλείψετε το passwd. Το adduser -D δημιουργεί τον λογαριασμό χωρίς κωδικό, το Alpine τον σημειώνει ως κλειδωμένο και το sshd απορρίπτει κλειδωμένο λογαριασμό ακόμη και με σωστό κλειδί. Στη δοκιμή μας η μόνη ένδειξη ήταν αυτή η γραμμή στο /var/log/messages:
User deploy not allowed because account is locked
Ο κωδικός χρειάζεται και αργότερα: αυτόν θα ζητάει το doas.
Αν προσθέσατε κλειδί SSH όταν παραγγείλατε τον server, βρίσκεται στο authorized_keys του root. Αντιγράψτε το στον νέο χρήστη:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
Δεν έχετε ακόμη κλειδί; Δημιουργήστε ένα στον υπολογιστή σας και επικολλήστε το δημόσιο μέρος στο /home/deploy/.ssh/authorized_keys.
3. Βάλτε το doas να ζητάει κωδικό
Το Alpine χρησιμοποιεί doas αντί για sudo, και το image μας το επιτρέπει ήδη στην ομάδα wheel. Ο κανόνας στο /etc/doas.d/wheel.conf είναι permit nopass :wheel, άρα κάθε μέλος του wheel γίνεται root χωρίς να πληκτρολογήσει τίποτα. Κάντε το να ζητάει τον κωδικό και να τον θυμάται για λίγα λεπτά:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
Από εδώ και πέρα το doas apk add nano λειτουργεί όπως το sudo apt install nano στο Ubuntu.
4. SSH: μόνο κλειδιά, χωρίς root
Το sshd διαβάζει τα αρχεία στο /etc/ssh/sshd_config.d/ με σειρά ονόματος και κρατά την πρώτη τιμή που βρίσκει για κάθε ρύθμιση. Στο image μας το πρώτο αρχείο είναι το 00-eqvps.conf, που επιτρέπει root και κωδικούς ώστε να μπείτε την πρώτη μέρα. Αντικαταστήστε το περιεχόμενό του:
cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
Η τρίτη γραμμή μετράει στο Alpine. Το image τρέχει την έκδοση του OpenSSH με PAM, και μόνο με τις δύο πρώτες γραμμές ο δοκιμαστικός μας server εξακολουθούσε να προσφέρει σύνδεση keyboard-interactive. Με όλες τις τρεις, μια προσπάθεια σύνδεσης χωρίς κλειδί παίρνει:
Permission denied (publickey).
Κρατήστε ανοιχτή τη συνεδρία root. Σε δεύτερο τερματικό ελέγξτε ότι το ssh deploy@YOUR.SERVER.IP λειτουργεί (σε πακέτο NAT προσθέστε -p και την προσωπική θύρα από τον πίνακα ελέγχου) και ότι το doas id δέχεται τον κωδικό.
5. Τείχος προστασίας: ufw
Το ufw βρίσκεται στο αποθετήριο community, που είναι ενεργό στο image μας:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
Το limit επιτρέπει το SSH αλλά επιβραδύνει όποιον ανοίγει πολλές συνδέσεις στη σειρά. Το rc-update μετράει εδώ, γιατί το OpenRC δεν ξεκινά το τείχος μετά από επανεκκίνηση αν δεν το προσθέσετε στο runlevel. Μετά την επανεκκίνηση ο server μας επέστρεψε με Status: active. Σε πακέτο NAT αφήστε το SSH στη θύρα 22: η προσωπική εξωτερική σας θύρα προωθείται στην 22 μέσα στον server. Σε πακέτο με δική του IPv4 ανοίξτε θύρες web όταν τις χρειαστείτε (ufw allow 80/tcp, ufw allow 443/tcp). Τα υπόλοιπα στον οδηγό για το ufw.
6. Ενεργοποιήστε το cron και τις καθημερινές ενημερώσεις
Ένας νέος server με Alpine δεν τρέχει καθόλου cron. Ενεργοποιήστε το:
rc-update add crond default
rc-service crond start
Το crontab του root στο Alpine τρέχει ήδη ό,τι υπάρχει στο /etc/periodic/daily στις 02:00. Βάλτε εκεί ένα script ενημέρωσης:
cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily
Η τελευταία εντολή δείχνει τα scripts που θα τρέξει το cron, και το δικό σας πρέπει να είναι στη λίστα. Έτσι παίρνετε τις διορθώσεις για την 3.21. Η μετάβαση στην επόμενη έκδοση του Alpine είναι ξεχωριστό, χειροκίνητο βήμα. Οι ενημερώσεις πυρήνα θέλουν πάντα επανεκκίνηση: επαναλαμβάνετε πότε πότε τον έλεγχο uname -r / ls /lib/modules από το βήμα 1.
7. Το OpenRC σε έναν πίνακα
Αν ξέρετε systemd, αυτά είναι σχεδόν όλα όσα αλλάζουν:
| Εργασία | systemd | Alpine (OpenRC) |
|---|---|---|
| Εκκίνηση υπηρεσίας | systemctl start nginx | rc-service nginx start |
| Εκκίνηση με το σύστημα | systemctl enable nginx | rc-update add nginx default |
| Κατάσταση | systemctl status nginx | rc-service nginx status |
| Τι τρέχει | systemctl list-units | rc-status |
| Αρχείο καταγραφής | journalctl | /var/log/messages |
8. Docker, και η θύρα που το ufw δεν μπλοκάρει
Το Alpine είναι καλός host για Docker, γιατί το ίδιο το σύστημα σχεδόν δεν ενοχλεί:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
Στον server μας αυτό πήρε 12 δευτερόλεπτα μαζί με τη λήψη. Με τον daemon του Docker σε λειτουργία, η χρησιμοποιούμενη μνήμη ανέβηκε από 57 MB σε 124 MB.
Μια παγίδα που δεν αφορά μόνο το Alpine: το Docker γράφει δικούς του κανόνες τείχους προστασίας. Ενώ το ufw επέτρεπε μόνο SSH, ξεκινήσαμε το nginx με -p 8080:80 και το φτάσαμε από έξω στη θύρα 8080. Το ufw δεν το μπλόκαρε. Αν ένα container πρέπει να είναι προσβάσιμο μόνο μέσω reverse proxy στον ίδιο server, δημοσιεύστε το στο localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Ποιο πακέτο
Το Alpine αφήνει σχεδόν όλη τη RAM στο δικό σας λογισμικό. Το πακέτο Nano (2 vCPU, 1 GB, 15 GB, $3/μήνα) αρκεί για μια μικρή υπηρεσία ή μερικά containers. Είναι πακέτο NAT, οπότε το SSH έρχεται από προσωπική θύρα. Αν χρειάζεστε τις θύρες 80 και 443 ανοιχτές στο internet, το Nano-IP έχει δική του IPv4 για $8/μήνα. Για βαρύτερα stacks Docker, το Micro δίνει 2 GB για $5/μήνα.
Το Alpine 3.21 υπάρχει στη σελίδα Alpine VPS και σε κάθε πακέτο Linux στην ενότητα VPS. Η πληρωμή γίνεται σε USDT, USDC ή ETH στα δίκτυα Base, Ethereum ή Polygon, χωρίς ταυτότητα ή κάρτα.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.