প্রথম ওয়েবসাইটের জন্য Ubuntu VPS সেটআপ
নতুন Ubuntu 24.04 VPS-এ SSH key দিয়ে ঢুকে আলাদা প্রশাসক, Nginx ও HTTPS তৈরি করুন। এই পদ্ধতিতে একটি static ওয়েবসাইট প্রকাশ হবে; WordPress, Node.js বা database স্থাপন আলাদা কাজ।
VPSuntu · হালনাগাদ · পড়তে প্রায় 4 মিনিট
এই নির্দেশনায়
শুরু করার আগে প্রবেশপথ রাখুন
একটি নতুন Ubuntu 24.04 instance, public IPv4, sudo অধিকার ও নিজের domain লাগবে। Provider-এর recovery console খুলে পরীক্ষা করুন। এখানে শুরুতে ubuntu account ও SSH port 22 ধরা হয়েছে; আপনার image ভিন্ন হলে সেগুলো বদলান। চলমান গুরুত্বপূর্ণ server-এ এই fresh-install ধাপ সরাসরি চালাবেন না।
স্থানীয় কমান্ড Linux, macOS বা WSL-এর Bash terminal-এ চালান; server কমান্ড SSH session-এ। 203.0.113.10 ও app.example.com উদাহরণ—নিজের IP ও hostname দিন। একই নামের user, file বা directory আগে থাকলে থামুন এবং তার ব্যবহার বোঝার পর এগোন।
SSH key ও host identity যাচাই করুন
নিজের কম্পিউটারে নতুন key তৈরি করুন। শক্ত passphrase দিন; আগে থাকা key overwrite করবেন না। নতুন VM তৈরির সময় public .pub key দিন, private file নিজের কাছে রাখুন।
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pubআগে থেকেই key বসানো থাকলে নিচের existing-server branch বাদ দিন। অন্যথায় বর্তমান কাজ করা account দিয়ে public key পাঠান। existing_vps_key-এর বদলে পুরোনো key-এর path দিন; password বা agent ব্যবহার করলে -i অংশ বাদ দিন। বর্তমান session খোলা রাখুন।
scp -i ~/.ssh/existing_vps_key ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pubServer-এ পাঠানো key যাচাই করে authorized_keys-এ যোগ করুন। বিদ্যমান key সরাবেন না; নিচের ধাপে তার content ও শেষ newline সংরক্ষিত থাকে।
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
fiProvider-এর বিশ্বস্ত console-এ server-এর Ed25519 fingerprint নিন।
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubস্থানীয় terminal থেকে নতুন key দিয়ে আলাদা connection খুলুন। Prompt-এর fingerprint console-এর সঙ্গে মেলান; অমিল হলে গ্রহণ করবেন না।
ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10নতুন administrator-এর জন্য একই public key server-এ রাখুন।
scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pubআলাদা administrator তৈরি করুন
প্রথমে getent passwd deploy চালান। Account থাকলে তার পরিচয় না জেনে বদলাবেন না; নতুন নাম নিলে নিচের সব user, group ও path-এ একই নাম ব্যবহার করুন। Image ও resource দেখুন, update করুন এবং শক্ত sudo password-সহ deploy তৈরি করুন।
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 থেকে deploy হিসেবে নতুন login খুলুন।
ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10নতুন server session-এ sudo কাজ করছে নিশ্চিত করুন। পুরোনো session বন্ধ করবেন না।
sudo whoamiNginx ও firewall প্রস্তুত করুন
sudo apt install nginx
sudo systemctl enable --now nginxProvider firewall-এ আপনার প্রকৃত SSH port শুধু প্রয়োজনীয় administrator source থেকে খুলুন; public site-এর জন্য TCP 80 ও 443 দিন। নতুন SSH login ও বাহির থেকে HTTP পরীক্ষা করুন।
Oracle Cloud Ubuntu হলে পরের UFW block সম্পূর্ণ বাদ দিন। OCI-এর persistent iptables-এ iSCSI boot/block storage-এর দরকারি নিয়ম থাকতে পারে; flush করে বা UFW দিয়ে তা প্রতিস্থাপন করবেন না। Security list/NSG ও provider-সমর্থিত guest rule ব্যবহার করুন। অন্য provider-এর নতুন image-এ UFW সমর্থিত হলে প্রকৃত SSH port আগে অনুমতি দিয়ে তারপর enable করুন।
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নিজের site তৈরি ও আলাদা করে পরীক্ষা করুন
একটি নতুন document root ও Nginx site ব্যবহার করুন। app.example.com সব জায়গায় নিজের domain দিয়ে বদলান। Quoted heredoc-এর EOF অক্ষত রাখুন, যাতে $uri shell 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 -tSyntax সফল হলেই reload করুন।
sudo systemctl reload nginxনিজের কম্পিউটার থেকে DNS বদলানোর আগেই সঠিক IP ও Host header দিয়ে পরীক্ষা করুন। নিজের পৃষ্ঠার heading আসতে হবে, Nginx default page নয়।
curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/DNS ও HTTPS চালু করুন
A record-এ server IPv4 দিন। IPv6 end-to-end কাজ করলেই AAAA রাখুন; পুরোনো AAAA validation অন্য server-এ পাঠাতে পারে। প্রথম পরীক্ষা direct DNS-এ করুন। --resolve ছাড়া নিজের কম্পিউটার থেকে HTTP-তে একই পৃষ্ঠা খুলছে নিশ্চিত করুন।
Ubuntu repository থেকে Certbot বসান; প্রয়োজনে Universe চালু হয়। নিজের email দিন, শর্ত পড়ুন এবং HTTPS redirect নির্বাচন করুন।
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.timerRenewal timer inactive হলে sudo systemctl enable --now certbot.timer চালান। HTTP validation নবায়নের জন্য port 80 পৌঁছানো দরকার। Proxy যোগ করলে আবার HTTPS ও renewal path পরীক্ষা করুন।
বাইরে থেকে HTTPS এবং reboot পরীক্ষা করুন
নিজের computer থেকে HTTP redirect ও HTTPS response দেখুন। Certificate যাচাই বাদ দেওয়ার -k option ব্যবহার করবেন না।
curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/Recovery console প্রস্তুত রেখে reboot দিন। তারপর সম্পূর্ণ নতুন deploy SSH login, sudo, Nginx service এবং একই বাহ্যিক curl পরীক্ষা পুনরায় করুন। Server না ফিরলে console দিয়ে কারণ দেখুন; শুধু আগের terminal থাকা সফল recovery-এর প্রমাণ নয়।
সমস্যা হলে নির্দিষ্ট স্তর দেখুন
ছোট পর্দায় সব কলাম দেখতে টেবিলটি পাশে স্ক্রল করুন।
| লক্ষণ | প্রথম পরীক্ষা |
|---|---|
| SSH timeout | IP, port, route, provider ও guest firewall |
| Publickey ব্যর্থ | সঠিক account, দেওয়া key ও authorized_keys |
| Nginx default page | Host header, server_name ও enabled site |
| Certificate validation ব্যর্থ | A/AAAA, port 80 এবং domain response |
| Nginx reload ব্যর্থ | nginx -t এবং service journal |
SSH-এর জন্য ত্রুটি নির্ণয়ের নির্দেশনা অনুসরণ করুন। Site ও configuration-এর স্বাধীন কপি রিস্টোর করুন, DNS ও পুনর্নির্মাণের ধাপ লিখুন এবং certificate private key সুরক্ষিত রাখুন। অ্যাপের লোড, update ও failure alert-এর দায়িত্ব ঠিক করুন।
প্রশ্ন ও উত্তর
এই ধাপ কি চলমান server-এ চালানো যাবে?
এটি নতুন server-এর পথ। বিদ্যমান user, firewall, site, database ও data বুঝে পৃথক migration plan করুন।
Site খুললেই কাজ শেষ?
নতুন SSH, sudo, HTTPS, renewal এবং reboot-এর পর পরীক্ষা করুন। স্বাধীন backup থেকে পুনরুদ্ধারও দরকার।