Skip to main content

Command Palette

Search for a command to run...

কীভাবে আমি Aliases আর Bash দিয়ে আমার DevOps Workflow সহজ করেছি

Updated
3 min readView as Markdown
কীভাবে আমি Aliases আর Bash দিয়ে আমার DevOps Workflow সহজ করেছি
I

A highly motivated and experienced full-stack developer with a proven track record of developing and deploying web applications. Skilled in a range of programming languages and frameworks, as well as database technologies. Comfortable working in a fast-paced environment and able to adapt to new technologies quickly. A team player who is also able to work independently when required.

যখন DevOps engineer হিসেবে কাজ শুরু করি, তখন সবচেয়ে ঝামেলার জায়গা ছিল একাধিক সার্ভার ম্যানেজ করা। প্রতিটা সার্ভারের আলাদা IP, port, আর user credentials ছিল। প্রতিবার কানেক্ট করতে গিয়ে এইরকম লম্বা SSH কমান্ড লিখতে হতো:

ssh -p 2202 devopsadmin@192.168.20.45

অথবা কোনো ফাইল ডাউনলোড করতে:

scp -P 2202 devopsadmin@192.168.20.45:/var/log/app.log ~/Downloads/

কয়েকদিন পরেই বুঝলাম, এভাবে চললে সময় নষ্ট হবেই। নতুন DevOps engineer হিসেবে আমার কাজ এমনিতেই ফাস্ট—প্রতিদিন বারবার সার্ভার ডিটেইল মনে রাখা বা বড় কমান্ড টাইপ করা একদমই স্কেলেবল না।


সমস্যাটা কী ছিল

  • অনেক সার্ভার, সবার IP আর port আলাদা।

  • SSH/SCP কমান্ডগুলো বড়, ভুল করা সহজ।

  • credentials মনে রাখতে গিয়ে সময় নষ্ট।

  • দরকার ছিল এমন কিছু, যাতে যেকোনো সার্ভারে এক ক্লিকে কানেক্ট করা যায়।


সমাধান: Bash-এ Aliases আর Functions

ব্রেকথ্রুটা আসে যখন আমি আমার ~/.bashrc ফাইল কাস্টমাইজ করি। Bash-এ তুমি alias (মানে শর্টকাট কমান্ড) আর function (ছোট স্ক্রিপ্ট) বানাতে পারো।

আমি যা করেছিলাম:

১. সার্ভার ভ্যারিয়েবল ডিফাইন করো

~/.bashrc-এর শুরুতে এইভাবে ভ্যারিয়েবল রাখো:

# Server configs
export appserver_user="devopsadmin"
export appserver_host="192.168.20.45"
export appserver_port="2202"

export dbserver_user="devopsadmin"
export dbserver_host="192.168.20.50"
export dbserver_port="22"

এভাবে, কোনো ডিটেইল বদলাতে হলে শুধু এক জায়গায় আপডেট করলেই হবে।


২. SSH-এর জন্য Alias বানাও

লম্বা কমান্ড না লিখে, শর্টকাট বানিয়ে নাও:

# Aliases
alias appserver="ssh -p $appserver_port $appserver_user@$appserver_host"
alias dbserver="ssh -p $dbserver_port $dbserver_user@$dbserver_host"

এখন শুধু লিখো:

appserver

আর সরাসরি ঠিক সার্ভারে ঢুকে যাবে।


৩. ফাইল ট্রান্সফারের জন্য Function

ফাইল ডাউনলোড এখন এক লাইনে:

# Download from app server
download-app() {
    scp -P "$appserver_port" "$appserver_user@$appserver_host:$1" ~/Downloads/
}

# Upload to app server
upload-app() {
    scp -P "$appserver_port" "$1" "$appserver_user@$appserver_host:$2"
}

ব্যবহার:

download-app /var/log/app.log
upload-app ./config.yaml /etc/myapp/config.yaml

৪. ডিপ্লয়মেন্ট অটোমেট করো

কিছু সার্ভারে ডিপ্লয় করতে git branch চেক আর স্ক্রিপ্ট রান করতে হতো। এটাও ফাংশনে নিয়ে আসো:

deploy-app() {
    ssh -p $appserver_port $appserver_user@$appserver_host \
    "cd /opt/myapp && git branch && ./deploy.sh"
}

এখন ডিপ্লয় করতে শুধু:

deploy-app

ফলাফল

এই সেটআপের পর:

  • আর কোনো IP, port, username মুখস্থ রাখতে হয় না।

  • SSH আর ফাইল ট্রান্সফার এক শব্দেই হয়।

  • ডিপ্লয়মেন্ট স্ক্রিপ্টেড, রিপিটেবল।

  • কোনো সার্ভারের IP বদলালে, শুধু .bashrc-এ এক লাইন এডিট করলেই হয়।

আগে যেটা করতে ২০–৩০ সেকেন্ড লাগত, এখন লাগে ২ সেকেন্ড। দিনে অনেকবার লগইন বা ফাইল ট্রান্সফার করতে হয়—এই সেভটাই বিশাল।


বোনাস: Passwordless SSH (Key দিয়ে)

প্রতিবার পাসওয়ার্ড টাইপ করাও বিরক্তিকর ছিল, তাই SSH key সেটআপ করেছিলাম:

ssh-keygen -t ed25519 -C "me@company.com"
ssh-copy-id -p 2202 devopsadmin@192.168.20.45

এখন আর পাসওয়ার্ড লাগে না। Alias-এর সাথে মিলিয়ে, আমার workflow এখন অনেক ফাস্ট।


# Aliases
alias ascii="man ascii | head -43 | tail -16"
alias ls='ls --color=auto'
alias ll='ls -la'
alias zconfig='nano ~/.zshrc'  # Or vim, if you prefer
alias zconfigcode='code -w ~/.zshrc && source ~/.zshrc'
alias myip="hostname -I | awk '{print \$1}'"

# Remote SSH access
alias moon="ssh \$moonusername@\$moonhost"
alias mars="ssh -i \$marspem \$marsusername@\$marshost"
alias simec-tutor="ssh -p 8098 devopsadmin@103.84.36.246"

# Functions
download-mars() {
    # Downloads file/folder from Mars server to Downloads
    scp -r -i "$marspem" "$marsusername@$marshost:$1" ~/Downloads/
}

download-simec-tutor() {
    # Downloads file/folder from Simec Tutor server to Downloads
    scp -P 8098 devopsadmin@103.84.36.246:"$1" ~/Downloads/
}

# Remote server config variables
export moonusername="your_moon_user"
export moonhost="your.moon.host"

export marsusername="your_mars_user"
export marshost="your.mars.host"
export marspem="$HOME/.ssh/mars.pem"

# Simec Tutor DevOps Server
export devopsuser="devopsadmin"
export devopshost="103.84.36.246"
export devopsport="8098"
export devopspem="$HOME/.ssh/simec-tutor.pem"  # Update with your private key for this server

# Additional Helpful Aliases (optional)
alias ll='ls -la --color=auto'   # More readable file listing
alias gst='git status'           # Shorten git status command
alias gco='git checkout'         # Shorten git checkout command

# Customize prompt (optional)
export PS1="[\u@\h \W]\$ "  # Display user@host directory in prompt

More from this blog

Low Level Design: গভীর থেকে বোঝা এবং আয়ত্ত করা

ভূমিকা: কেন এই Article? তুমি হয়তো programming শিখেছ। Variable, loop, function, data structure - সব জানো। কিন্তু যখন একটা বড় system বানাতে বসো, তখন মনে হয় কোথা থেকে শুরু করব? কীভাবে organize করব? Code লিখতে লিখতে হারিয়ে যাও একটা maze-এ। এই feeling...

Oct 15, 202520 min read71
Low Level Design: গভীর থেকে বোঝা এবং আয়ত্ত করা

Go-তে Interface কীভাবে Code Decouple করে?

একটা HTTP Server দিয়ে পুরো ব্যাপারটা বুঝে নেওয়া যাক আমরা সবাই জানি Go একটা সিম্পল ল্যাঙ্গুয়েজ, কিন্তু interface নিয়ে অনেকেরই confusion থাকে। আজকে আমরা দেখব কীভাবে interface আসলে তোমার code-কে flexible এবং maintainable বানায়। একটা real-world HTT...

Oct 14, 202520 min read5
Go-তে Interface কীভাবে Code Decouple করে?

তোমার Project-এ Coupled Code কীভাবে খুঁজে বের করবে?

Coupled code খোঁজা মানে হচ্ছে তোমার codebase-এ এমন জায়গা খুঁজে বের করা যেখানে একটা অংশ আরেকটার উপর বেশি depend করছে। এটা একটা detective work — তুমি clue খুঁজবে, pattern দেখবে, এবং সমস্যা চিহ্নিত করবে। চলো step by step শিখি কীভাবে এটা করতে হয়। কেন ...

Oct 14, 202510 min read2

Go-তে Object (Struct Instance) তৈরির সম্পূর্ণ গাইড

Go programming শেখার সময় একটা জিনিস খুব তাড়াতাড়ি বুঝতে হয় - কীভাবে object তৈরি করতে হয়। অন্য language যেমন Java বা Python এ class আছে, কিন্তু Go-তে আছে struct। আর struct এর instance বানানোই হলো object তৈরি করা। আজকের এই blog এ আমরা দেখব Go-তে ob...

Oct 13, 202524 min read3
Go-তে Object (Struct Instance) তৈরির সম্পূর্ণ গাইড
I

Imran Hasan

61 posts

Full-stack developer with experience in developing and managing web applications. Skilled in React, Node.js, HTML, CSS, and JavaScript. Experience in managing website hosting and security.