Alpine Linux er det mindste image, vi tilbyder. På vores servere brugte en ny Alpine 3.21 i tomgang 55 MB RAM og 153 MB disk, mod 313 MB og 2,7 GB for Ubuntu 24.04. Prisen er, at du opgiver de vante værktøjer. Alpine bruger apk i stedet for apt, doas i stedet for sudo, OpenRC i stedet for systemd og musl i stedet for glibc.
Trinene nedenfor er de samme første ti minutter som på Debian eller Ubuntu, oversat til Alpine. Vi kørte hver kommando på vores Alpine 3.21-image før udgivelsen, og to af dem snød os første gang. Log ind som root med adgangskoden fra dit kontrolpanel.
1. Opdater, og genstart én gang
apk update && apk upgrade
uname -r
ls /lib/modules
Serveren installerede allerede de tilgængelige opdateringer ved første opstart, så apk upgrade har som regel ikke meget tilbage at gøre. Kig i stedet på de to sidste linjer. Hvis den første opdatering bragte en ny kerne, har den kørende kerne (uname -r) ikke længere sine moduler på disken. Alt, der indlæser et modul, fejler så, indtil du genstarter. På vores testserver skrev installationen af firewallen ERROR: Couldn't determine iptables version. Hvis de to versioner er forskellige, så genstart nu:
reboot
Vores testserver var tilbage på under et minut.
2. Opret en bruger, der kan logge ind
adduser -D deploy
passwd deploy
adduser deploy wheel
Spring ikke passwd over. adduser -D opretter kontoen uden adgangskode, Alpine markerer den som låst, og sshd afviser en låst konto selv med den rigtige nøgle. I vores test var det eneste spor denne linje i /var/log/messages:
User deploy not allowed because account is locked
Adgangskoden betyder også noget senere: det er den, doas spørger om.
Hvis du tilføjede en SSH-nøgle, da du bestilte serveren, ligger den i roots authorized_keys. Kopiér den til den nye bruger:
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
Ingen nøgle endnu? Lav en på din computer, og indsæt den offentlige del i /home/deploy/.ssh/authorized_keys.
3. Få doas til at spørge om adgangskoden
Alpine bruger doas i stedet for sudo, og vores image tillader det allerede for gruppen wheel. Reglen i /etc/doas.d/wheel.conf er permit nopass :wheel, så ethvert medlem af wheel bliver root uden at skrive noget. Få den til at spørge om adgangskoden og så huske den i nogle minutter:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
Fra nu af virker doas apk add nano ligesom sudo apt install nano på Ubuntu.
4. SSH: kun nøgler, ingen root
sshd læser filerne i /etc/ssh/sshd_config.d/ i navneorden og beholder den første værdi, den finder for hver indstilling. På vores image er den første fil 00-eqvps.conf, som tillader root og adgangskoder, så du kan komme ind på dag ét. Erstat indholdet:
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) '
Den tredje linje betyder noget på Alpine. Imaget kører PAM-udgaven af OpenSSH, og med kun de to første linjer tilbød vores testserver stadig keyboard-interactive-login. Med alle tre får et loginforsøg uden nøgle:
Permission denied (publickey).
Hold din root-session åben. Tjek i en anden terminal, at ssh deploy@YOUR.SERVER.IP virker (på en NAT-plan tilføjer du -p og den personlige port fra kontrolpanelet), og at doas id godtager adgangskoden.
5. Firewall: ufw
ufw ligger i community-arkivet, som er slået til på vores image:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit lukker SSH ind, men bremser alle, der åbner mange forbindelser i træk. rc-update er vigtig her, fordi OpenRC ikke starter firewallen efter en genstart, medmindre du føjer den til runlevel. Efter en genstart kom vores server tilbage med Status: active. På en NAT-plan lader du SSH blive på port 22: din personlige eksterne port videresendes til 22 inde i serveren. På en plan med egen IPv4 åbner du webporte, når du får brug for dem (ufw allow 80/tcp, ufw allow 443/tcp). ufw-guiden dækker resten.
6. Slå cron og daglige opdateringer til
En ny Alpine-server kører slet ikke cron. Slå det til:
rc-update add crond default
rc-service crond start
Roots crontab på Alpine kører allerede alt i /etc/periodic/daily klokken 02:00. Læg et opdateringsscript der:
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
Den sidste kommando viser de scripts, cron vil køre, og dit bør være på listen. Sådan får du rettelserne til 3.21. At skifte til den næste Alpine-udgave er et separat, manuelt trin. Kerneopdateringer kræver stadig en genstart: gentag tjekket uname -r / ls /lib/modules fra trin 1 en gang imellem.
7. OpenRC i én tabel
Kender du systemd, er det her det meste af det, der ændrer sig:
| Opgave | systemd | Alpine (OpenRC) |
|---|---|---|
| Start en tjeneste | systemctl start nginx | rc-service nginx start |
| Start ved opstart | systemctl enable nginx | rc-update add nginx default |
| Status | systemctl status nginx | rc-service nginx status |
| Hvad kører | systemctl list-units | rc-status |
| Systemlog | journalctl | /var/log/messages |
8. Docker, og den port ufw ikke blokerer
Alpine er en god Docker-vært, fordi selve systemet næsten ikke er i vejen:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
På vores server tog det 12 sekunder inklusive download. Med Docker-dæmonen kørende steg den brugte hukommelse fra 57 MB til 124 MB.
En fælde, der ikke kun gælder Alpine: Docker skriver sine egne firewallregler. Mens ufw kun tillod SSH, startede vi nginx med -p 8080:80 og nåede den udefra på port 8080. ufw blokerede den ikke. Skal en container kun kunne nås gennem en reverse proxy på samme server, så udgiv den på localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Hvilken plan
Alpine overlader næsten al RAM til dit eget software. Planen Nano (2 vCPU, 1 GB, 15 GB, $3/md.) er nok til en lille tjeneste eller nogle få containere. Det er en NAT-plan, så SSH kommer ind gennem en personlig port. Skal port 80 og 443 være åbne mod internettet, har Nano-IP egen IPv4 til $8/md. Til tungere Docker-stakke giver Micro dig 2 GB til $5/md.
Alpine 3.21 findes på Alpine VPS-siden og på alle Linux-planer under VPS. Betaling sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon, uden ID eller kort.
Kommentarer
Ingen kommentarer endnu. Vær den første.