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

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

```bash
ssh -p 2202 devopsadmin@192.168.20.45
```

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

```bash
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`\-এর শুরুতে এইভাবে ভ্যারিয়েবল রাখো:

```bash
# 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 বানাও

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

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

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

```bash
appserver
```

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

---

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

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

```bash
# 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"
}
```

ব্যবহার:

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

---

### ৪. ডিপ্লয়মেন্ট অটোমেট করো

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

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

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

```bash
deploy-app
```

---

## ফলাফল

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

* আর কোনো IP, port, username মুখস্থ রাখতে হয় না।
    
* SSH আর ফাইল ট্রান্সফার এক শব্দেই হয়।
    
* ডিপ্লয়মেন্ট স্ক্রিপ্টেড, রিপিটেবল।
    
* কোনো সার্ভারের IP বদলালে, শুধু `.bashrc`\-এ এক লাইন এডিট করলেই হয়।
    

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

---

## বোনাস: Passwordless SSH (Key দিয়ে)

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

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

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

---

```bash
# 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
```
