Alpine Linux ჩვენს შეთავაზებაში ყველაზე პატარა იმიჯია. ჩვენს სერვერებზე ახალი Alpine 3.21 უმოქმედობისას 55 MB RAM-სა და 153 MB დისკს იკავებდა, Ubuntu 24.04 კი 313 MB-სა და 2,7 GB-ს. ამის საფასური ნაცნობ ინსტრუმენტებზე უარის თქმაა. Alpine იყენებს apk-ს apt-ის ნაცვლად, doas-ს sudo-ს ნაცვლად, OpenRC-ს systemd-ის ნაცვლად და musl-ს glibc-ის ნაცვლად.
ქვემოთ მოცემული ნაბიჯები იგივე პირველი ათი წუთია, რაც Debian-ზე ან Ubuntu-ზე, ოღონდ Alpine-ზე გადატანილი. გამოქვეყნებამდე ყველა ბრძანება ჩვენს Alpine 3.21 იმიჯზე გავუშვით და ორმა მათგანმა პირველად შეგვაცდინა. შედით root-ად პანელში მოცემული პაროლით.
1. განაახლეთ და ერთხელ გადატვირთეთ
apk update && apk upgrade
uname -r
ls /lib/modules
სერვერმა ხელმისაწვდომი განახლებები პირველივე ჩატვირთვისას დააყენა, ამიტომ apk upgrade-ს ჩვეულებრივ ცოტა საქმე რჩება. ამის ნაცვლად ბოლო ორ სტრიქონს შეხედეთ. თუ იმ პირველმა განახლებამ ახალი ბირთვი მოიტანა, გაშვებულ ბირთვს (uname -r) აღარ აქვს მოდულები დისკზე. ყველაფერი, რაც მოდულს ტვირთავს, გადატვირთვამდე შეცდომას მისცემს. ჩვენს სატესტო სერვერზე ფაერვოლის დაყენებამ დაწერა ERROR: Couldn't determine iptables version. თუ ორი ვერსია განსხვავდება, ახლავე გადატვირთეთ:
reboot
ჩვენი სატესტო სერვერი ერთ წუთზე ნაკლებში დაბრუნდა.
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 გასაღები დაამატეთ, ის root-ის authorized_keys-შია. დააკოპირეთ ახალ მომხმარებელთან:
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 sudo-ს ნაცვლად doas-ს იყენებს და ჩვენი იმიჯი ამას უკვე უშვებს 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/-ის ფაილებს სახელების მიხედვით და თითოეული პარამეტრისთვის პირველ ნაპოვნ მნიშვნელობას იტოვებს. ჩვენს იმიჯში პირველი ფაილი 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-ზე მნიშვნელობა აქვს. იმიჯი OpenSSH-ის PAM-იან ვერსიას იყენებს და მხოლოდ პირველი ორი სტრიქონით ჩვენი სატესტო სერვერი კვლავ სთავაზობდა keyboard-interactive შესვლას. სამივესთან ერთად გასაღების გარეშე შესვლის მცდელობა იღებს:
Permission denied (publickey).
root-ის სესია ღია დატოვეთ. მეორე ტერმინალში შეამოწმეთ, რომ ssh deploy@YOUR.SERVER.IP მუშაობს (NAT ტარიფზე დაამატეთ -p და პირადი პორტი პანელიდან) და რომ doas id პაროლს იღებს.
5. ფაერვოლი: ufw
ufw არის community რეპოზიტორიაში, რომელიც ჩვენს იმიჯში უკვე ჩართულია:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit SSH-ს უშვებს, მაგრამ ანელებს ყველას, ვინც ზედიზედ ბევრ კავშირს ხსნის. rc-update აქ მნიშვნელოვანია, რადგან OpenRC გადატვირთვის შემდეგ ფაერვოლს არ გაუშვებს, თუ runlevel-ში არ დაამატებთ. გადატვირთვის შემდეგ ჩვენი სერვერი Status: active-ით დაბრუნდა. NAT ტარიფზე SSH 22-ე პორტზე დატოვეთ: თქვენი პირადი გარე პორტი სერვერის შიგნით 22-ზეა გადამისამართებული. საკუთარი IPv4-ის მქონე ტარიფზე ვებ-პორტები საჭიროებისამებრ გახსენით (ufw allow 80/tcp, ufw allow 443/tcp). დანარჩენი ufw-ის სახელმძღვანელოშია.
6. ჩართეთ cron და ყოველდღიური განახლებები
ახალ Alpine სერვერზე cron საერთოდ არ მუშაობს. ჩართეთ:
rc-update add crond default
rc-service crond start
Alpine-ში root-ის crontab უკვე უშვებს ყველაფერს /etc/periodic/daily-დან 02:00 საათზე. ჩადეთ იქ განახლების სკრიპტი:
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
ბოლო ბრძანება აჩვენებს სკრიპტებს, რომლებსაც cron გაუშვებს, და თქვენი სიაში უნდა იყოს. ასე 3.21-ის შესწორებებს იღებთ. Alpine-ის შემდეგ გამოშვებაზე გადასვლა ცალკე, ხელით გასაკეთებელი ნაბიჯია. ბირთვის განახლებებს კვლავ გადატვირთვა სჭირდება: დროდადრო გაიმეორეთ პირველი ნაბიჯის შემოწმება uname -r / ls /lib/modules.
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 Docker-ისთვის კარგი ჰოსტია, რადგან თავად სისტემა თითქმის ხელს არ უშლის:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
ჩვენს სერვერზე ამას ჩამოტვირთვასთან ერთად 12 წამი დასჭირდა. Docker-ის დემონის მუშაობისას დაკავებული მეხსიერება 57 MB-დან 124 MB-მდე გაიზარდა.
ხაფანგი, რომელიც მხოლოდ Alpine-ს არ ეხება: Docker ფაერვოლის საკუთარ წესებს წერს. როცა ufw მხოლოდ SSH-ს უშვებდა, nginx გავუშვით -p 8080:80-ით და სერვერის გარედან 8080 პორტზე მივწვდით. ufw-მ არ დაბლოკა. თუ კონტეინერი მხოლოდ იმავე სერვერზე არსებული reverse proxy-ით უნდა იყოს ხელმისაწვდომი, გამოაქვეყნეთ localhost-ზე:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
რომელი ტარიფი
Alpine თითქმის მთელ RAM-ს თქვენს პროგრამებს უტოვებს. Nano ტარიფი (2 vCPU, 1 GB, 15 GB, $3/თვე) საკმარისია პატარა სერვისისთვის ან რამდენიმე კონტეინერისთვის. ეს NAT ტარიფია, ამიტომ SSH პირადი პორტით შემოდის. თუ 80 და 443 პორტები ინტერნეტისთვის ღია უნდა იყოს, Nano-IP-ს საკუთარი IPv4 აქვს $8/თვე. უფრო მძიმე Docker სტეკებისთვის Micro 2 GB-ს გაძლევთ $5/თვე.
Alpine 3.21 არის Alpine VPS-ის გვერდზე და ხელმისაწვდომია ყველა Linux ტარიფზე VPS განყოფილებაში. გადახდა ხდება USDT-ით, USDC-ით ან ETH-ით Base, Ethereum ან Polygon ქსელებში, დოკუმენტისა და ბარათის გარეშე.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.