Ubuntu VPS ပြင်ဆင်နည်း — HTTPS ဝက်ဘ်ဆိုက်တစ်ခု စတင်ပါ
Ubuntu 24.04 LTS VPS အသစ်ပေါ်တွင် Nginx နှင့် HTTPS သုံးသော static ဝက်ဘ်ဆိုက်ငယ်တစ်ခု တင်ကြည့်ပါ။ သီးခြား administrator၊ SSH key၊ certificate renewal နှင့် reboot နောက်တွင် ဝက်ဘ်ဆိုက်ပြန်တက်လာမှုကို အဆင့်ဆင့် စစ်ဆေးမည်။
VPSuntu · ပြင်ဆင်ရက် · ဖတ်ရန် 9 မိနစ်ခန့်
စာမျက်နှာအကြောင်းအရာ
ဆာဗာ၊ domain နှင့် recovery လမ်းကြောင်းကို ပြင်ဆင်ပါ
Public IPv4၊ SSH port 22၊ sudo သုံးနိုင်သော မူလ account နှင့် မိမိထိန်းချုပ်သော domain လိုသည်။ VPS မဖန်တီးမီ နောက်အဆင့်တွင် SSH key အရင်လုပ်ပါ။ ဆာဗာအလွတ်ရှိပြီးသားဆိုလျှင် လက်ရှိဝင်ရောက်ခွင့်မှ key ထည့်သည့်လမ်းကို သုံးပါ။ Client command များသည် Linux၊ macOS သို့မဟုတ် WSL ပေါ်မှ Bash အတွက်ဖြစ်ပြီး server command များကို SSH အတွင်း ရိုက်ရမည်။ ဥပမာဖိုင်လမ်းကြောင်းများတွင် အသုံးပြုနေသော deployment ရှိလျှင် ဆက်မလုပ်ပါနှင့်။
203.0.113.10 ကို မိမိဆာဗာ IP၊ app.example.com ကို မိမိ hostname ဖြင့် နေရာတိုင်းတွင် အစားထိုးပါ။ နှစ်ခုစလုံးသည် စာရွက်စာတမ်းဥပမာများဖြစ်သည်။ ubuntu နေရာတွင် provider ပေးသော username ကို သုံးပါ။ Access သို့မဟုတ် firewall မပြင်မီ recovery console ကို ဖွင့်ထားပါ။ Image အတွက် provider ၏ firewall ညွှန်ကြားချက်ကို ဖတ်ပါ။ Oracle Cloud Ubuntu image အတွက် UFW လမ်းကြောင်းကို မသုံးရပါ။
SSH key ဖန်တီးပြီး ဆာဗာသို့ ထည့်ပါ
မိမိကွန်ပျူတာတွင် သီးခြား key ဖန်တီးပြီး passphrase သတ်မှတ်ပါ။ ဖိုင်နာမည်ရှိပြီးသားဆိုလျှင် အခြားနာမည်ရွေးကာ အဆင့်တိုင်းတွင် တူညီစွာသုံးပါ။ .pub သည် public key ဖြစ်ပြီး private key ကို မိမိကွန်ပျူတာတွင်သာ လုံခြုံစွာ သိမ်းပါ။
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pubVPS အသစ်ဖန်တီးမည်ဆိုလျှင် Ubuntu 24.04 ရွေးပြီး provider ၏ SSH key အကွက်တွင် public key ထည့်ပါ။ မူလ username ကို အတည်ပြုပြီး အောက်မှ host fingerprint စစ်ဆေးခြင်းသို့ ဆက်ပါ။ ရှိပြီးသားဆာဗာအတွက် command များကို ကျော်ပါ။
ဆာဗာအလွတ်ရှိပြီးသားဆိုလျှင် အလုပ်လုပ်နေသော SSH session ကို ဖွင့်ထားပါ။ မိမိကွန်ပျူတာ၏ အခြား terminal မှ public key အသစ်ကို လက်ရှိ authentication ဖြင့် ကူးပါ။ existing_vps_key ကို လက်ရှိ private key နာမည်ဖြင့် အစားထိုးပါ။ Password သို့မဟုတ် SSH agent ဖြင့် ဝင်နေပါက -i ~/.ssh/existing_vps_key ကို ချန်ထားပါ။ Server authentication မူဝါဒကို ပြောင်းရန်မလိုပါ။
scp -i ~/.ssh/existing_vps_key ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pubရှိပြီးသား server session ထဲတွင် တင်ထားသော public key ကို စစ်ပြီး မိမိမူလ account ၏ authorized_keys သို့ ထပ်ပေါင်းပါ။ Append သည် ရှိပြီးသား key များကို ထိန်းထားပြီး newline အပိုသည် နောက်ဆုံးလိုင်းတွင် newline မရှိသည့်ဖိုင်ကိုလည်း ကိုင်တွယ်ပေးသည်။ ဝင်ရောက်ခွင့်တစ်ခုမျှ မရှိလျှင် provider recovery လုပ်ငန်းစဉ်ကို အရင်သုံးပါ။
if ssh-keygen -lf ~/ubuntu-vps-admin.pub; then
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '\n' >> ~/.ssh/authorized_keys
cat ~/ubuntu-vps-admin.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
fiမည်သည့်လမ်းဖြစ်စေ ပထမချိတ်ဆက်မှုကို လက်မခံမီ ယုံကြည်ရသော recovery console ထဲမှ host public key နှင့် fingerprint တိုက်ပါ။ Ed25519 host key အတွက် console ထဲတွင် ရိုက်ပါ။
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubမိမိကွန်ပျူတာမှ key အသစ်ဖြင့် connection အသစ် ဖွင့်ပါ။ အောင်မြင်သည်အထိ မူလ access ကို မပိတ်ပါနှင့်။
ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10နောက်တွင်ဖန်တီးမည့် administrator အတွက် public key ကို ကွန်ပျူတာ၏ အခြား terminal မှ ကူးပါ။ ယခင်လမ်းကြောင်းတွင် တင်ပြီးသား ယာယီ public key ဖိုင်ကို ထပ်ကူးခြင်းမှာ ပြဿနာမရှိပါ။
scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pubသီးခြား administrator ဖန်တီးပြီး စမ်းပါ
ဆာဗာတွင် getent passwd deploy ကို အရင်စစ်ပါ။ Account တစ်ခုမှ မပြသင့်ပါ။ deploy ရှိပြီးသားဖြစ်လျှင် မသုံးရသေးသော username ရွေးကာ home path နှင့် group အပါအဝင် နေရာတိုင်းကို အစားထိုးပြီးမှ ဆက်ပါ။ အခြားသူ၏ key ဖိုင်ကို မရေးမိစေရန်ဖြစ်သည်။
Image နှင့် အရင်းအမြစ်ကို စစ်၊ upgrade စာရင်းကို ဖတ်ပြီး administrator ဖန်တီးပါ။ Sudo အတွက် ခိုင်မာသော password သတ်မှတ်ပါ။ Install command များက key ဖိုင်၏ owner နှင့် permission ကို သတ်မှတ်ပေးသည်။
cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keysမိမိကွန်ပျူတာ၏ terminal အသစ်မှ administrator အသစ်အဖြစ် ဝင်ပါ။
ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10Server session အသစ်တွင် sudo စမ်းပါ။ deploy password ကို လက်ခံပြီး root ပြသင့်သည်။ Login နှင့် sudo နှစ်ခုလုံးအောင်မြင်မှ ဒီ session တွင် ဆက်လုပ်ပြီး မူလ access ကို ထိန်းထားပါ။
sudo whoamiNginx နှင့် image က ပံ့ပိုးသော firewall ကို ပြင်ပါ
ဆာဗာတွင် Nginx အရင်တပ်ဆင်ပါ။ Guest firewall နှင့် provider network firewall နှစ်မျိုးလုံးက ဝင်ရောက်ခွင့်ကို သက်ရောက်သည်။ ပြင်ဆင်စဉ် console နှင့် လက်ရှိ SSH ကို ဖွင့်ထားပါ။
sudo apt install nginx
sudo systemctl enable --now nginxProvider firewall တွင် administrator တည်နေရာမှ TCP 22 နှင့် ဝက်ဘ်ဆိုက်အသုံးပြုသူများအတွက် TCP 80/443 ကို ခွင့်ပြုပါ။ SSH port မတူလျှင် တကယ်သုံးသည့် port ၏ rule ကို ထိန်းပါ။ Network rule တစ်ခုတည်းဖြင့် guest firewall ပိတ်ထားသည့် port မပွင့်ပါ။
Oracle Cloud Ubuntu image အတွက် အောက်ပါ UFW block အားလုံးကို ကျော်ပါ။ UFW သည် image ၏ မရှိမဖြစ် firewall rules နှင့် ပဋိပက္ခဖြစ်ကာ boot မတက်နိုင်ကြောင်း Oracle က သတိပေးထားသည်။ iSCSI boot နှင့် block volume အတွက် rules အပါအဝင် ပေးထားသော iptables ကို ထိန်းထားပါ။ HTTP/HTTPS အတွက် OCI security lists၊ NSGs နှင့် စာရွက်စာတမ်းပါ guest rules ကို သုံးပါ။ Rules ကို flush မလုပ်ပါနှင့်၊ firewall packages ကို မအစားထိုးပါနှင့်။
အခြား Ubuntu image အသစ်များတွင် UFW သုံးမည်ဆိုလျှင် provider က ပံ့ပိုးပြီး အခြား managed firewall မလိုကြောင်း စစ်ပါ။ Enable မလုပ်မီ SSH port အမှန်ကို ခွင့်ပြုပါ။ ဒီဥပမာသည် port 22 ဖြစ်သည်။
sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseလမ်းကြောင်းနှစ်မျိုးစလုံးနောက်တွင် SSH login အသစ် စမ်းပါ။ ဖွင့်ထားပြီး session တစ်ခုသည် connection အသစ်အလုပ်လုပ်ကြောင်း မပြနိုင်ပါ။ Certificate မတောင်းမီ နောက်အဆင့်၏ ပြင်ပ HTTP စစ်ဆေးချက် အောင်မြင်ရမည်။ ပြဿနာရှာစဉ် မူလ login နည်းလမ်းများကို ထိန်းထားပါ။
Nginx site သီးခြားတစ်ခုတွင် စာမျက်နှာတင်ပါ
ဆာဗာတွင် document root နှင့် configuration အသစ်လုပ်ပါ။ Block ထဲက hostname ကို အစားထိုးပါ။ EOF အနားရှိ quote များကို မဖျက်ပါနှင့်။ ၎င်းတို့က shell မှ $uri ကဲ့သို့ Nginx variable များကို အစားမထိုးစေရန် ကာကွယ်သည်။
sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="en"><title>First deployment</title><h1>Ubuntu VPS is serving this page</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
listen 80;
listen [::]:80;
server_name app.example.com;
root /var/www/first-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -tConfiguration test အောင်မြင်မှ ဆာဗာတွင် reload လုပ်ပါ။
sudo systemctl reload nginxDNS မပြောင်းမီ မိမိကွန်ပျူတာမှ ဆာဗာ IP ကို သုံးကာ ဒီ hostname ကို ခေါ်ကြည့်ပါ။ Nginx welcome page မဟုတ်ဘဲ မိမိ heading ကို တွေ့ရမည်။
curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/DNS ချိတ်ပြီး HTTPS certificate ထုတ်ပါ
Hostname ၏ DNS A record ကို VPS IPv4 သို့ ညွှန်ပါ။ IPv6 တကယ်အလုပ်လုပ်မှ AAAA ထည့်ပါ။ မှားနေသော AAAA က visitor နှင့် certificate validation ကို အခြားနေရာသို့ ပို့နိုင်သည်။ ဒီဥပမာတွင် proxy မပါဘဲ DNS မှ VPS ကို တိုက်ရိုက်ညွှန်သည်။
မိမိကွန်ပျူတာတွင် --resolve မပါဘဲ http://app.example.com/ ကို ခေါ်ပါ။ မိမိစာမျက်နှာပြမှ ဆက်ပါ။ ဆာဗာတွင် Ubuntu archive မှ Certbot နှင့် Nginx plugin တပ်ဆင်ပါ။ Ubuntu Universe repository လိုအပ်ပြီး package-not-found error ကို အရင်ဖြေရှင်းရမည်။
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timerEmail နှင့် စည်းကမ်းလက်ခံမှုအဆင့်များကို လိုက်လုပ်ပါ။ Certbot က ဒီ site config ကို ပြင်ကာ HTTP မှ HTTPS redirect ထည့်ပေးသည်။ Renewal timer စီစဉ်ထားကြောင်း စစ်ပါ။ မဖွင့်ရသေးလျှင် sudo systemctl enable --now certbot.timer ကို သုံးပါ။ Certificate စစ်ဆေးခြင်းနှင့် renewal အတွက် port 80 ကို ရောက်ရှိနိုင်အောင် ထားပါ။
ပြင်ပမှနှင့် reboot နောက်တွင် စစ်ပါ
မိမိကွန်ပျူတာမှ redirect၊ certificate နှင့် content ကို စစ်ပါ။ HTTP သည် HTTPS သို့ redirect ဖြစ်ပြီး HTTPS က မိမိ heading ကို ပြရမည်။ Certificate error ဖုံးကွယ်စေသော curl -k ကို မထည့်ပါနှင့်။
curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/စမ်းသပ် deployment ဖြစ်နေစဉ် ဆာဗာတွင် sudo reboot လုပ်ပါ။ ပြန်တက်လာလျှင် deploy အဖြစ်ဝင်ပြီး systemctl is-active nginx နှင့် ပြင်ပ HTTPS request ကို ထပ်စစ်ပါ။ Reboot သည် SSH ကို ရည်ရွယ်ချက်ရှိရှိ ပိတ်သည်။ ပြန်မတက်လျှင် console ကို သုံးပါ။
စစ်ဆေးချက် မအောင်မြင်လျှင် အကြောင်းရင်းခွဲပါ
မျက်နှာပြင်ငယ်တွင် ကော်လံအားလုံးကြည့်ရန် ဇယားကို ဘေးတိုက်ရွှေ့ပါ။
| လက္ခဏာ | အရင်စစ်ရန် |
|---|---|
| SSH timeout | IP၊ provider/guest firewall နှင့် recovery console |
| Permission denied (publickey) | Username၊ private key နှင့် authorized_keys permission |
| Nginx default page ပြသည် | DNS destination၊ server_name နှင့် enabled site |
| Certificate validation မအောင်မြင် | Public A/AAAA နှင့် port 80 |
| ပြင်ပြီး Nginx မတက် | sudo nginx -t နှင့် sudo journalctl -u nginx -n 50 --no-pager |
Login မရလျှင် SSH ပြဿနာခွဲခြားနည်း ဖြင့် network၊ service နှင့် key ကို ခွဲစစ်ပြီးမှ access setting ပြင်ပါ။
Site files၊ Nginx config၊ DNS records နှင့် ပြန်တည်ဆောက်နည်းကို VPS ပြင်ပတွင် သိမ်းပြီး အခြားစက်၌ restore စမ်းပါ။ Certificate private keys ကို backup လုပ်လျှင် လုံခြုံစွာသိမ်းပါ။ Availability နှင့် certificate expiry alerts ထည့်ပါ။ တစ်ကြိမ်အောင်မြင်ခြင်းသည် နောက်နေ့ renewal ကို စောင့်ကြည့်ပေးမည်မဟုတ်ပါ။
ဖိုင် backup နှင့် restore လေ့ကျင့်ခန်း က လက်ရှိ site မပြောင်းဘဲ static page နှင့် Nginx config သီးခြားမိတ္တူကို စစ်ပေးသည်။ အပြည့်အစုံ recovery အတွက် အခြား assets၊ certificates နှင့် service config လည်း လိုသည်။
ဒီ deployment သည် static files အတွက်ဖြစ်သည်။ Database သို့မဟုတ် runtime အတွက် သီးခြား service configuration နှင့် backup နည်းလမ်းလိုသည်။ ထပ်ထည့်မည်ဆိုလျှင် အရင်းအမြစ်တိုင်းတာနည်း ကို ဖတ်ပါ။
အမေးအဖြေ
ရှိပြီးသား ဝက်ဘ်ဆိုက်ပေါ်တွင် ဒီ command များ သုံးနိုင်သလား။
သီးခြား test VPS တွင် အရင်စမ်းပါ။ ဥပမာသည် ဖိုင်ဖန်တီး၊ firewall ဖွင့်ပြီး Certbot ဖြင့် Nginx ပြင်သည်။ ရှိပြီးသားဆာဗာ၏ site၊ access rules နှင့် recovery ကို အရင်စစ်ရမည်။
WordPress၊ Node.js သို့မဟုတ် database ကိုပါ တပ်ဆင်ပေးသလား။
မပါပါ။ Static HTTPS site ကို အရင်အလုပ်လုပ်အောင် လုပ်ခြင်းဖြစ်သည်။ နောက်မှ runtime ထည့်ပြီး startup၊ health check နှင့် data recovery ကို သီးခြားစမ်းပါ။