Alpine Linux ہمارا سب سے چھوٹا امیج ہے۔ ہمارے سرورز پر نیا Alpine 3.21 خالی حالت میں 55 MB RAM اور 153 MB ڈسک لیتا تھا، جبکہ Ubuntu 24.04 نے 313 MB اور 2.7 GB لیے۔ اس کی قیمت یہ ہے کہ آپ مانوس ٹولز چھوڑ دیتے ہیں۔ Alpine میں apt کی جگہ apk، sudo کی جگہ doas، systemd کی جگہ OpenRC اور glibc کی جگہ musl ہے۔
نیچے کے قدم وہی پہلے دس منٹ ہیں جو 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 ویسے ہی کام کرتا ہے جیسے Ubuntu پر sudo apt install nano۔
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 کمیونٹی ریپوزٹری میں ہے، جو ہمارے امیج میں فعال ہے:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit SSH کو آنے دیتا ہے مگر جو لگاتار بہت سے کنکشن کھولے اسے سست کر دیتا ہے۔ یہاں rc-update ضروری ہے، کیونکہ جب تک آپ فائر وال کو runlevel میں شامل نہ کریں، OpenRC ری اسٹارٹ کے بعد اسے نہیں چلاتا۔ ری اسٹارٹ کے بعد ہمارا سرور 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 کے اگلے ریلیز پر جانا الگ، دستی قدم ہے۔ کرنل اپ ڈیٹس کو اب بھی ری اسٹارٹ چاہیے: قدم 1 والی 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 میں $8 ماہانہ پر اپنا IPv4 ہے۔ بھاری Docker اسٹیکس کے لیے Micro $5 ماہانہ میں 2 GB دیتا ہے۔
Alpine 3.21 Alpine VPS صفحے پر ہے اور VPS کے ہر Linux پلان پر دستیاب ہے۔ ادائیگی Base، Ethereum یا Polygon نیٹ ورکس پر USDT، USDC یا ETH میں ہوتی ہے، بغیر شناختی دستاویز اور کارڈ کے۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔