Alpine Linux este cea mai mică imagine pe care o oferim. Pe serverele noastre, un Alpine 3.21 proaspăt instalat folosea în repaus 55 MB de RAM și 153 MB de disc, față de 313 MB și 2,7 GB la Ubuntu 24.04. În schimb renunți la uneltele obișnuite. Alpine folosește apk în loc de apt, doas în loc de sudo, OpenRC în loc de systemd și musl în loc de glibc.
Pașii de mai jos sunt aceleași primele zece minute ca pe Debian sau Ubuntu, traduse pentru Alpine. Am rulat fiecare comandă pe imaginea noastră Alpine 3.21 înainte de publicare, iar două dintre ele ne-au prins prima dată. Autentifică-te ca root cu parola din panou.
1. Actualizează, apoi repornește o dată
apk update && apk upgrade
uname -r
ls /lib/modules
Serverul a instalat deja actualizările disponibile la prima pornire, așa că apk upgrade are de obicei puțin de făcut. Uită-te mai degrabă la ultimele două linii. Dacă acea primă actualizare a adus un kernel nou, kernelul care rulează (uname -r) nu mai are modulele pe disc. Tot ce încarcă un modul eșuează apoi până repornești. Pe serverul nostru de test, instalarea firewallului a afișat ERROR: Couldn't determine iptables version. Dacă cele două versiuni diferă, repornește acum:
reboot
Serverul nostru de test a revenit în mai puțin de un minut.
2. Creează un utilizator care se poate autentifica
adduser -D deploy
passwd deploy
adduser deploy wheel
Nu sări peste passwd. adduser -D creează contul fără parolă, Alpine îl marchează ca blocat, iar sshd refuză un cont blocat chiar și cu cheia corectă. În testul nostru, singurul indiciu a fost această linie din /var/log/messages:
User deploy not allowed because account is locked
Parola contează și mai târziu: pe ea o va cere doas.
Dacă ai adăugat o cheie SSH când ai comandat serverul, ea se află în authorized_keys al lui root. Copiaz-o pentru noul utilizator:
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
Nu ai încă o cheie? Creează una pe calculatorul tău și lipește partea publică în /home/deploy/.ssh/authorized_keys.
3. Fă doas să ceară parola
Alpine folosește doas în loc de sudo, iar imaginea noastră îl permite deja grupului wheel. Regula din /etc/doas.d/wheel.conf este permit nopass :wheel, deci orice membru wheel devine root fără să tasteze nimic. Fă-l să ceară parola și s-o țină minte câteva minute:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
De acum, doas apk add nano funcționează ca sudo apt install nano pe Ubuntu.
4. SSH: doar chei, fără root
sshd citește fișierele din /etc/ssh/sshd_config.d/ în ordinea numelor și păstrează prima valoare găsită pentru fiecare setare. În imaginea noastră primul fișier este 00-eqvps.conf, care permite root și parole ca să poți intra din prima zi. Înlocuiește-i conținutul:
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) '
A treia linie contează pe Alpine. Imaginea rulează varianta OpenSSH cu PAM, iar doar cu primele două linii serverul nostru de test încă oferea autentificarea keyboard-interactive. Cu toate trei, o încercare fără cheie primește:
Permission denied (publickey).
Lasă sesiunea root deschisă. Într-un al doilea terminal, verifică dacă ssh deploy@YOUR.SERVER.IP merge (pe un plan NAT adaugă -p și portul personal din panou) și dacă doas id acceptă parola.
5. Firewall: ufw
ufw se află în depozitul community, activat deja în imaginea noastră:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit lasă SSH să treacă, dar încetinește pe oricine deschide multe conexiuni la rând. rc-update contează aici, pentru că OpenRC nu pornește firewallul după o repornire dacă nu îl adaugi în runlevel. După repornire, serverul nostru a revenit cu Status: active. Pe un plan NAT lasă SSH pe portul 22: portul tău extern personal e redirecționat spre 22 în server. Pe un plan cu IPv4 propriu, deschide porturile web când ai nevoie (ufw allow 80/tcp, ufw allow 443/tcp). Ghidul ufw acoperă restul.
6. Pornește cron și actualizările zilnice
Un Alpine proaspăt instalat nu rulează deloc cron. Pornește-l:
rc-update add crond default
rc-service crond start
crontab-ul lui root din Alpine rulează deja tot ce se află în /etc/periodic/daily la 02:00. Pune acolo un script de actualizare:
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
Ultima comandă listează scripturile pe care le va rula cron, iar al tău ar trebui să fie printre ele. Așa primești remedierile pentru 3.21. Trecerea la următoarea versiune Alpine este un pas separat, manual. Actualizările de kernel tot cer repornire: repetă din când în când verificarea uname -r / ls /lib/modules din pasul 1.
7. OpenRC într-un tabel
Dacă știi systemd, cam asta se schimbă:
| Acțiune | systemd | Alpine (OpenRC) |
|---|---|---|
| Pornește un serviciu | systemctl start nginx | rc-service nginx start |
| Pornire la boot | systemctl enable nginx | rc-update add nginx default |
| Stare | systemctl status nginx | rc-service nginx status |
| Ce rulează | systemctl list-units | rc-status |
| Jurnalul sistemului | journalctl | /var/log/messages |
8. Docker și portul pe care ufw nu îl blochează
Alpine este o gazdă bună pentru Docker, pentru că sistemul însuși nu stă în cale:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
Pe serverul nostru a durat 12 secunde, cu tot cu descărcarea. Cu daemonul Docker pornit, memoria folosită a crescut de la 57 MB la 124 MB.
O capcană care nu ține doar de Alpine: Docker își scrie propriile reguli de firewall. Cu ufw permițând doar SSH, am pornit nginx cu -p 8080:80 și l-am accesat din afara serverului pe portul 8080. ufw nu l-a blocat. Dacă un container trebuie să fie accesibil doar printr-un reverse proxy de pe același server, publică-l pe localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Ce plan
Alpine lasă aproape toată memoria RAM pentru software-ul tău. Planul Nano (2 vCPU, 1 GB, 15 GB, $3/lună) ajunge pentru un serviciu mic sau câteva containere. Este un plan NAT, deci SSH intră printr-un port personal. Dacă ai nevoie de porturile 80 și 443 deschise spre internet, Nano-IP are IPv4 propriu pentru $8/lună. Pentru stive Docker mai grele, Micro îți dă 2 GB pentru $5/lună.
Alpine 3.21 este pe pagina Alpine VPS și disponibil pe toate planurile Linux din VPS. Plata se face în USDT, USDC sau ETH pe Base, Ethereum sau Polygon, fără act de identitate și fără card.
Comentarii
Încă nu există comentarii. Fii primul.