VPS ম্যানেজমেন্ট নিয়ে বিস্তারিত

সাধারণত VPS কিনলে একটা ব্ল্যাংক রিমোট কম্পিউটার পাই আমরা, ঠিক নতুন কম্পিউটারের মত। এখানে সব কিছু নিজে নিজে ইন্সটল করতে হয়। আর বেশির ভাগই কমান্ডলাইন / টার্মিনাল ব্যবহার করে। মূল অপারেটিং সিস্টেম যেমন উইন্ডোজ, লিনাক্স অথবা ম্যাক সার্ভারের কন্ট্রোল প্যানেল থেকে ইন্সটল করা যায়। সেখান থেকে রুট পাসওয়ার্ড পাওয়া যায়। এই রুট পাসওয়ার্ড ব্যবহার করে বাকি কাজ করতে হয়।

রিমোটলি কোন VPS আমরা টার্মিনাল থেকেই এক্সেস করতে পারব। অনেক সুন্দর SSH অ্যাপ রয়েছে। সুন্দর একটা অ্যাপ হচ্ছে Terminus। এর আগে PuTTY জনপ্রিয় ছিল। যে অ্যাপই ব্যবহার করেন, করতে পারেন। রেগুলার টার্মিনাল থেকেও এক্সেস করতে পারেন। আমরা যারা ডেভেলপার, তারা সব কিছু ভিজ্যুয়াল স্টুডিও কোড থেকেই করতে পারব। বিস্তারিত নিচের দিকে লিখেছি।

যে কোন VPS এ লগিন করার জন্য সার্ভারের আইপি এড্রেস, ইউজারনেম এবং পাসওয়ার্ড লাগবে। সাধারণত ইউজারনেম পরিবর্তন না করলে root হয়ে থাকে। আইপি এড্রেস 192.168.106.88 হলে আমরা টার্মিনালে এভাবে লিখবঃ

এরপর আমাদের পাসওয়ার্ড জিজ্ঞেস করবে। পাসওয়ার্ড টাইপ অথবা পেস্ট করে এন্টার প্রেস করব। পাসওয়ার্ড টাইম করলে বা এন্টার করলে দেখা যাবে না। সব ঠিক থাকলে root ডিরেক্টরিতে এক্সেস পাবো।এটা কম্পিউটারে থাকা ইউজারের হোম ডিরেক্টরির মত। কোন কন্টেন্ট আছে কিনা, তা দেখা যাবে ls কমান্ড দিয়ে।

ls

আমরা কোন ডিরেক্টরিতে রয়েছি, তা দেখা যাবেঃ

pwd

ফাইল সিস্টেমের রুটে যেতেঃ

cd /

এক লেভেল উপরে যেতেঃ

cd ..

হোম ডিরেক্টরিতে যেতে

cd ~

সিম্পল নোড অ্যাপ রান করা

প্রথমে NodeJS ইন্সটল করে নিতে হবেঃ

    sudo apt update
    sudo apt upgrade -y
    sudo apt install nodejs npm -y

এবার আমরা সিম্পল একটা Node.js কোড লিখব। তার জন্য এই কমান্ড গুলো রান করবঃ

mkdir /var/www/hello
cd /var/www/hello
nano server.js

যদি var ডিরেক্টরিতে www ফোল্ডার না থাকে, তাহলে এরর দেখাবে। এই জন্য প্যারেন্ট ডিরেক্টরি তৈরি করার জন্য এভাবে কমান্ড লিখবঃ

mkdir -p /var/www/hello

এরপর hello ফোল্ডারে ন্যাভিগেট করব। এবং server.js নামে একটা ফাইল তৈরি করবঃ

cd /var/www/hello
nano server.js

এবার server.js এ নিচের কোড লিখবঃ

const http = require('http');

const hostname = '0.0.0.0';
const port = 80;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World from your VPS!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

কপি পেস্ট করলেই হবে। এরপর Ctrl + O → Enter → Ctrl + X প্রেস করে ফাইল সেভ করে nano এডিটর থেকে বের হব।

এবার কোড রান করার জন্য লিখবঃ

node server.js

এখন যদি সার্ভারের আইপি এড্রেস ভিজিট করি, তাহলে দেখব Hello World from your VPS!

কোন কারণে যদি কোড এডিট করতে হয়, তাহলে Ctrl + K ব্যবহার করে লাইন বাই লাইন কোড ডিলেট করা যাবে অথবা ব্যাকস্পেস ব্যবহার করেও কোড রিমুভ করা যাবে।

নোড সার্ভার বন্ধ করা এবং টার্মিনালে ফিরে আসার জন্যঃ

Ctrl + C 

ডকার ইন্সটল

লিনাক্স সার্ভারে ডকার ইন্সটল করার জন্য নিচের স্টেপ গুলো ফলো করব (Thanks to ChatGPT)।

# Update system
apt update && apt upgrade -y

# Install required packages
apt install -y ca-certificates curl gnupg lsb-release

# Add Docker’s official GPG key
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set up repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
  | tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Enable and start Docker service
systemctl enable docker
systemctl start docker

# Verify installation
docker --version
docker compose version

এরপর নিচের কমান্ড রান করবঃ

usermod -aG docker $USER

এই কমান্ড ব্যবহার করলে ডকার কমান্ড গুলো sudu কমান্ড ছাড়া ব্যবহার করা যাবে। না হয় প্রতিবার sudu ব্যবহার করতে হবে।

এবার একটা সিম্পল কন্টেইনার টেস্ট করব। তার জন্যঃ

docker run hello-world

এই কন্টেইনার আমরা চাইলে আমাদের সার্ভার আইপি ব্যবহার করে দেখতে পাবো। তার জন্য এই ডকার ইমেজ এক্সপোজ করতে হবেঃ

docker run -d -p 80:80 --name mysite nginx

এখন যদি আমাদের VPS এর আইপিতে যাই, তাহলে ডিফল্ট Nginx পেইজ দেখতে পাবো।

ডকার ইমেজ গুলো দেখতেঃ

docker images
# or
docker image ls 

ডকার ইমেজ ডিলেট করা

ডকার ইমেজ ডিলেট করার জন্য docker rmi কমান্ড ব্যবহার করতে হয়। এরপর ইমেজের আইডি ব্যবহার করতে হয়। যেমনঃ

docker rmi 1b44b5a3e06a
 cd /var/www/hello

নোড অ্যাপ ডকারে রান করা

এর আগে আমরা /var/www/hello ডিরেক্টরিতে সিম্পল একটা প্রজেক্ট রান করেছি। এবার এই প্রজেক্টের ডকার ইমেজ তৈরি করে রান করব। তার জন্য প্রথমে এই ডিরেক্টরিতে যাবোঃ

cd /var/www/hello

server.js ফাইল ইতিমধ্যে রয়েছে এখানে। না থাকলে তৈরি করে নিব। এরপর package.json তৈরি করবঃ

npm init -y

যা আমাদের নিচের মত করে একটা প্যাকেজ ফাইল তৈরি করে দিবেঃ

{
  "name": "hello",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {}
}

এবার ডকার ফাইল তৈরি করবঃ

nano Dockerfile

ডকার ইমেজে কি কি থাকবে, তা লিখবঃ

# Use official Node LTS image
FROM node:22

# Set working directory inside container
WORKDIR /usr/src/app

# Copy package.json first (for caching)
COPY package.json ./

# Install dependencies (empty for now)
RUN npm install

# Copy app source code
COPY . .

# Expose port 80
EXPOSE 80

# Run app
CMD ["node", "server.js"]

এবার উপরের ডেফিনেশন অনুযায়ী ডকার ইমেজ তৈরি করবঃ

docker build -t hello-node .

এবার ডকার কন্টেইনার রান করব।

docker run -d -p 80:80 --name hello-node-app -v /var/www/hello:/usr/src/app hello-node

উপরের কমান্ড একই সাথে VPS এর IP এবং /var/www/hello ফোল্ডারের কোডের সাথে ম্যাপ করবে। এর মানে server.js ফাইল এডিট করলে আউটপুট পরিবর্তন। সার্ভারের আইপি এবার ব্রাউজারে দেখলে server.js রান হবে এবং কোড অনুযায়ী রেসপন্স দেখাবে। যদিও এখনো আমরা হটরিলোড যোগ করিনি, তাই কোড পরিবর্তন করার পর ডকার ইমেজ রিস্টার্ট করতে হবেঃ

docker restart hello-node-app

যদি ডিফল্ট পোর্ট 80 অকোপাইড থাকে, তাহলে এরর দিবে। তাই আমাদের অন্য পোর্ট ব্যবহার করতে হবে। যেমন 8080 ব্যবহার করতে চাইলেঃ

docker run -d -p 8080:80 --name hello-node-app -v /var/www/hello:/usr/src/app hello-node

এরপর ব্রাউজারে গিয়ে http://192.168.106.88:8080 এভাবে VPS এর আইপি অনুযায়ী ব্রাউজ করা যাবে।

ভিজ্যুয়াল স্টুডিও কোড থেকে কোড এডিট

ভিজ্যুয়াল স্টুডিও কোড থেকে কোড এডিটের পাশাপাশি আসলে পুরা VPS ই কন্ট্রোল করা যাবে। তার জন্য Remote – SSH এক্সটেনশন ব্যবহার করব। অফিশিয়াল গাইড

ইন্সটল করার পর VS কোডের নিচের কোনায় ক্লিক করব। এরপর Connect to Host… এ ক্লিক করব।

এবার + Add New Host এ ক্লিক করে নতুন হোস্ট যোগ করব। বাকিটা টার্মিনালের মতই।

এই কনফিগারেশন ফাইলটা সেভ করতে বলবে। সাধারণত (~/.ssh/config) লোকেশনে। এর পর পাসওয়ার্ড চাইবে। পাসওয়ার্ড দেওয়ার পর আমরা বাকি সব কিছু ভিস্যুয়াল স্টুডিও কোড থেকেই করতে পারব। রেগুলার একটা প্রজেক্ট যেভাবে ওপেন করি, ঠিক সেভাবে। ভিজ্যুয়াল স্টুডিও কোডে SSH ক্লায়েন্টে কানেক্ট হওয়ার পর Open ফোল্ডারে ক্লিক করব। এরপর কোন ফোল্ডার ওপেন করব, তা সিলেক্ট করব। যেমন /var/www/hello। দেখব সার্ভারে থাকা কোড গুলো এখানে দেখাচ্ছে।

ভিস্যুয়াল স্টুডিও থেকে VPS ডকার ম্যানেজ

ভিজ্যুয়াল স্টুডিও কোডের জন্য Container Tools রয়েছে। যা ব্যবহার করে সার্ভারে থাকা কন্টেইনার গুলো দেখা, স্টার্ট, স্টপ, ডিলিট সবই করা যায়। অফিশিয়াল গাইড

সুন্দর না?

এবার আমরা আরেকটা ডকার ইমেজ রান করব। যেখানে নতুন আরেকটা নোড অ্যাপ রান হবে। এর জন্য www ফোল্ডারে নতুন আরেকটা ফোল্ডার তৈরি করে নিব। যেমন note।

mkdir -p /var/www/note

এরপর ঐ ডিরেক্টরিতে যাবোঃ

cd /var/www/note

আপনি চাইলে ভিজ্যুয়াল স্টুডিও কোড থেকেও ফাইল বা ফোল্ডার তৈরি করতে পারবেন। এবার আরেকটা সিম্পল নোড অ্যাপ তৈরি করবঃ

nano server.js

যেখানে নিচের মত করে বা নিজের মত করে কোড লিখবঃ

const http = require('http');

const hostname = '0.0.0.0';
const port = 3001;  // different port

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello from second Node app!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

ফাইলটা সেভ করব (Ctrl+O → Enter → Ctrl+X)। এরপর package.json ফাইল তৈরি করবঃ

npm init -y

এবার ডকার ফাইল তৈরি করবঃ

nano Dockerfile

এর ভেতর লিখবঃ

FROM node:22

WORKDIR /usr/src/app

COPY package.json ./
RUN npm install

COPY . .

EXPOSE 3001

CMD ["node", "server.js"]

এই ডকার ইমেজটা তৈরি করবঃ

docker build -t note-node .

এবার এই কন্টেইনারটা নতুন আরেকটা পোর্টে রান করবঃ

docker run -d -p 3001:3001 --name note-app -v /var/www/note:/usr/src/app note-node

ব্রাউজারে ip_address:3001 এড্রেসে গেলে নতুন এই অ্যাপ রানিং অবস্থায় পাবো।

কন্টেইনার অটো রিস্টার্ট

কোন কন্টেইনার যেন সার্ভার রিস্টার্টের পর নিজে নিজে রিস্টার্ট নেয়, তার জন্য নিচের মত করে কমান্ড লিখবঃ

docker run -d -p 3001:3001 --name note-app --restart unless-stopped -v /var/www/note:/usr/src/app note-node

মানে –restart unless-stopped মডিফায়ার যোগ করব।

অলরেডি রানিং কোন ডকার ইমেজ আপডেটঃ

docker update --restart unless-stopped hello-node-app

ভেরিফাই করার জন্যঃ

docker inspect -f "{{ .HostConfig.RestartPolicy }}" hello-node-app

যা রিটার্ণ করবেঃ

map[Name:unless-stopped MaximumRetryCount:0]

প্রয়োজনীয় কিছু কমান্ড

নিচে কিছু প্রয়োজনীয় কমান্ড এবং কাজ উল্লেখ করা হয়েছে (Thanks to ChatGPT)।

1. System & Info

uname -a          # Show OS, kernel version, architecture
uptime            # Show server uptime and load average
top               # Interactive process monitor
htop              # Better interactive process monitor (if installed)
df -h             # Check disk usage
du -sh /path      # Check folder size
free -h           # Check memory usage


2. File & Directory Management

ls                # List files
ls -lh            # List files with human-readable sizes
cd /path          # Change directory
pwd               # Show current directory
mkdir folder      # Create a folder
rm file           # Delete a file
rm -rf folder     # Delete folder recursively (careful!)
cp source dest    # Copy file/folder
mv source dest    # Move/rename file/folder
nano file         # Edit file in terminal
cat file          # Display file content
tail -f file      # Monitor file live (e.g., logs)


3. User Management

whoami            # Current user
id username       # Info about user
adduser username  # Add new user
passwd username   # Set password for a user
usermod -aG group user  # Add user to a group


4. Package Management (Ubuntu/Debian)

sudo apt update            # Update package index
sudo apt upgrade -y        # Upgrade installed packages
sudo apt install pkg -y    # Install package
sudo apt remove pkg -y     # Remove package


5. Service Management

sudo systemctl status service     # Check service status
sudo systemctl start service      # Start service
sudo systemctl stop service       # Stop service
sudo systemctl restart service    # Restart service
sudo systemctl enable service     # Enable service at boot
sudo systemctl disable service    # Disable service at boot

Example: sudo systemctl restart apache2


6. Network & Connectivity

ping domain_or_ip                 # Test connectivity
curl http://example.com           # Fetch page from command line
wget http://example.com/file      # Download file
netstat -tulpn | grep :80         # Check which process is using port 80
ss -tulpn                         # Modern alternative to netstat


7. MySQL / Database

sudo mysql                         # Login as root via socket
mysql -u root -p                    # Login with password
SHOW DATABASES;                     # List databases
CREATE DATABASE dbname;             # Create a database
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';  # Create MySQL user
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';   # Grant privileges
FLUSH PRIVILEGES;                    # Apply changes
EXIT;                                # Exit MySQL


8. Docker (if installed)

docker ps                    # List running containers
docker ps -a                 # List all containers
docker images                # List images
docker run -d -p 80:80 image # Run container in background
docker stop container_id     # Stop container
docker rm container_id       # Remove container
docker rmi image_id          # Remove image


9. Logs & Monitoring

tail -f /var/log/syslog         # View system log live
journalctl -u service           # View service logs
dmesg                           # Kernel logs