Terraform چیه دقیقاً؟Terraform یک ابزار Infrastructure as Code یا همان زیرساخت بهعنوان کد است.یعنی بهجای اینکه سرور، دیتابیس، شبکه، فایروال، Load Balancer یا سرویسهای ابری را دستی از داخل پنل AWS، Azure، Google Cloud یا هر سرویس دیگری بسازیم، آنها را با کد تعریف میکنیم.مثلاً به Terraform میگوییم:«من یک سرور با این مشخصات میخواهم، یک دیتابیس با این تنظیمات، یک شبکه با این دسترسیها و این تعداد Resource.»بعد Terraform میآید وضعیت فعلی زیرساخت را بررسی میکند، تفاوتش را با چیزی که در کد نوشتهایم میسنجد و همان تغییرات لازم را اعمال میکند.مزیت اصلی Terraform این است که زیرساخت ما:قابل تکرار میشود،قابل مستندسازی میشود،قابل نسخهبندی در Git میشود،و خطای انسانی در ساخت و تغییر زیرساخت کمتر میشود.به زبان سادهتر:Terraform مثل یک نقشه مهندسی برای زیرساخت است.شما نقشه را با کد مینویسید، Terraform طبق همان نقشه زیرساخت را میسازد یا اصلاح میکند.برای همین در تیمهای DevOps، Cloud، Platform Engineering و حتی تیمهای نرمافزاری مدرن، Terraform یکی از ابزارهای کلیدی محسوب میشود.چون در دنیای امروز، مدیریت زیرساخت فقط کلیککردن در پنلهای ابری نیست؛زیرساخت هم باید مثل نرمافزار، دقیق، قابل کنترل و قابل توسعه باشد.#Terraform #DevOps #Cloud #InfrastructureAsCode #IaaC #SoftwareEngineering
۲۳۵
۱۰:۳۹
۲۴۹
۱۴:۲۴
وقتی اینترنت بینالملل کند یا قطع میشود، نصب و آپدیت پکیجها در Ubuntu هم به مشکل میخورد.مثلاً همین دستور ساده:
sudo apt update
sudo apt install nginx
ممکن است خطا بدهد، چون سیستم نمیتواند به مخازن اصلی Ubuntu وصل شود. بله، حتی نصب nginx هم گاهی نیازمند صلح جهانی است.
---
میتوانیم از mirrorهای داخلی مثل ابر آروان استفاده کنیم تا پکیجها از یک مخزن داخلی دریافت شوند.
مزایا:
• سرعت بهتر• پایداری بیشتر در زمان اختلال اینترنت• کاهش وابستگی به اینترنت خارجی• مناسب برای سرورها و محیطهای سازمانی
---
اول نسخه سیستم را ببینید:
lsb_release -a
یا:
cat /etc/os-release
به کدنام نسخه دقت کنید:
• Ubuntu 24.04 → noble• Ubuntu 22.04 → jammy• Ubuntu 20.04 → focal
---
ابتدا backup بگیرید:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
فایل را باز کنید:
sudo nano /etc/apt/sources.list
برای Ubuntu 22.04 این موارد را قرار دهید:
deb http://mirror.arvancloud.ir/ubuntu/ jammy main restricted universe multiverse
deb http://mirror.arvancloud.ir/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirror.arvancloud.ir/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirror.arvancloud.ir/ubuntu/ jammy-security main restricted universe multiverse
بعد اجرا کنید:
sudo apt update
---
sudo apt install curl
اگر بدون خطا نصب شد، تنظیمات درست است.
---
قبل از تغییر repository همیشه backup بگیرید و کدنام نسخه Ubuntu را درست وارد کنید.برای سرورهای production هم اول روی محیط تست بررسی کنید، چون خراب کردن سرور اصلی هنر نیست؛ حادثه است.
---
در زمان اختلال اینترنت، استفاده از repository داخلی برای Ubuntu باعث میشود نصب و آپدیت پکیجها سریعتر و پایدارتر انجام شود.
برای تیمهای DevOps و SysAdmin، تنظیم mirror داخلی یک کار ضروری است، نه تزئینی.
#Ubuntu #Linux #DevOps #SysAdmin #Repository #Mirror #ArvanCloud
۲۵۹
۱۰:۰۶
در شرایطی که دسترسی به اینترنت بینالملل دچار اختلال میشود، یکی از اولین مشکلاتی که برای تیمهای فنی، DevOps، ادمینهای لینوکس و برنامهنویسها پیش میآید، نصب و آپدیت ابزارهاست.
مثلاً میخواهیم یک پکیج نصب کنیم، یک image از Docker بگیریم، وابستگیهای پروژه را نصب کنیم یا سرور را آپدیت کنیم؛ اما سیستم با افتخار اعلام میکند که به مخزن اصلی وصل نمیشود. خیلی هم باشکوه، دقیقاً وسط کار ضروری.
اینجاست که Repositoryها و Mirrorهای داخلی مثل ابر آروان و سرویسهای مشابه میتوانند کمککننده باشند.
---
Mirror داخلی یعنی یک نسخه کپیشده یا واسط از مخازن اصلی نرمافزاری که داخل کشور میزبانی میشود.
بهجای اینکه سیستم ما مستقیم به منابع خارجی مثل Docker Hub، Ubuntu Repository، PyPI یا npm وصل شود، درخواستها از طریق یک سرویس داخلی انجام میشود.
نتیجه چیست؟
• سرعت بهتر در دانلود• کاهش وابستگی به اینترنت بینالملل• پایداری بیشتر در زمان اختلال• مصرف کمتر ترافیک خارجی• مناسب برای سرورها و محیطهای سازمانی
---
در حالت عادی برای دریافت nginx مینویسیم:
docker pull nginx
اما اگر دسترسی به Docker Hub مشکل داشته باشد، میتوان از mirror داخلی استفاده کرد.
نمونه:
docker pull docker.arvancloud.ir/nginx
یا برای نسخه خاص:
docker pull docker.arvancloud.ir/nginx:alpine
همچنین میتوان mirror را در تنظیمات Docker تعریف کرد تا Docker بهصورت پیشفرض از آن استفاده کند.
فایل زیر را باز یا ایجاد کنید:
sudo nano /etc/docker/daemon.json
و مقدار زیر را قرار دهید:
{
"registry-mirrors": [
"https://docker.arvancloud.ir"
]
}
سپس Docker را ریاستارت کنید:
sudo systemctl restart docker
برای تست:
docker pull nginx
---
در سرورهای لینوکسی هم میتوان از mirrorهای داخلی برای نصب و آپدیت پکیجها استفاده کرد.
مثلاً بهجای اینکه Ubuntu یا Debian از سرورهای خارجی پکیجها را دانلود کند، میتوان source list را به mirror داخلی تغییر داد.
این کار مخصوصاً برای دیتاسنترها، شرکتها و سرورهایی که همیشه باید در دسترس باشند، بسیار مهم است.
---
در شرایط محدودیت یا اختلال، بهتر است برای ابزارهای زیر هم mirror داخلی یا cache داخلی در نظر گرفته شود:
• Docker Registry• Ubuntu / Debian Repository• npm Registry• PyPI برای Python• Composer برای PHP• Maven Repository• Git Mirror برای پروژههای مهم
---
استفاده از mirror داخلی مفید است، اما نباید کورکورانه انجام شود.
قبل از استفاده، باید مطمئن شویم:
• سرویس معتبر است• از HTTPS استفاده میکند• imageها و packageها دستکاری نشدهاند• نسخهها مشخص و قابل بررسی هستند• برای محیط production، سیاست امنیتی سازمان رعایت شده است
چون نصب پکیج از منبع نامطمئن یعنی دعوت رسمی از خرابکاری به سرور. آن هم با فرش قرمز.
---
برای تیمهای فنی بهتر است قبل از بحران، این موارد آماده شود:
• تنظیم mirror داخلی برای Docker• تعریف repository داخلی برای Linux• ساخت cache داخلی برای dependencyها• نگهداری imageهای مهم Docker در registry سازمانی• مستندسازی روش نصب ابزارهای ضروری• تست دورهای در شرایط بدون اینترنت خارجی
---
در زمان قطعی یا اختلال اینترنت، استفاده از repoها و mirrorهای داخلی مثل ابر آروان میتواند کار تیمهای فنی را نجات دهد.
اما این راهکار باید از قبل آماده شده باشد، نه زمانی که سرور production خوابیده و همه با چشمان نگران به ترمینال خیره شدهاند.
در DevOps همیشه یک اصل مهم وجود دارد:
زیرساختی که فقط در شرایط عادی کار کند، زیرساخت قابل اعتماد نیست.
#DevOps #Docker #Linux #Repository #ArvanCloud #Infrastructure #SysAdmin #Cloud
۲۹۶
۱۰:۱۷
terraform-sananetco.pdf
۲.۱۸ مگابایت
توی این فایل آموزشی با مفاهیم Infrastructure as Code (IaC) آشنا میشیم و یاد میگیریم چطور با Terraform زیرساختها رو به صورت کد مدیریت کنیم.موضوعات اصلی این آموزش:مفهوم IaC و اهمیتش تو مدیریت زیرساختمعرفی Terraform و مزایای استفاده از اوننصب و راهاندازی Terraformچرخه عمر (Cycle) ایجاد، تغییر و مدیریت زیرساختها با Terraform
۲۳۶
۱۲:۲۴
Let’s Encrypt یک Certificate Authority رایگان و معتبر است که به ما کمک میکند برای سایت یا سرویس خودمان SSL/TLS Certificate بگیریم.
یعنی ارتباط کاربر با سایت از حالت ناامن HTTP به حالت امن HTTPS تبدیل میشود.
اما Let’s Encrypt قبل از صدور Certificate باید مطمئن شود که ما واقعاً کنترل آن domain را داریم.
به این مرحله میگوییم:
روشهای رایج احراز هویت در Let’s Encrypt:
🧾 DNS Challengeدر این روش، باید یک TXT Record مخصوص داخل DNS دامنه قرار بدهیم. اگر Let’s Encrypt بتواند آن record را ببیند، مالکیت domain تأیید میشود. این روش برای wildcard certificate هم کاربرد دارد.
در پست بعدی میرویم سراغ اینکه چطور با Let’s Encrypt برای Nginx SSL بگیریم و آن را روی Nginx bind کنیم.
۲۴۴
۱۱:۱۳
nginx-and-letsencrypt-certbot.pdf
۲.۵ مگابایت
اگر با Nginx کار میکنی، دیر یا زود به SSL و HTTPS میرسی.
توی فایل آموزشی جدید، قدمبهقدم توضیح دادم که چطور با Let’s Encrypt و Certbot برای Nginx SSL Certificate بگیریم و آن را روی Nginx bind کنیم.
داخل این فایل یاد میگیری:
داخلش commandها، configurationها، تستها و نکات عملی آورده شده تا بتوانی واقعاً روی سرور اجرا کنی و نتیجه بگیری.
اگر میخواهی Nginx را برای HTTPS آماده کنی و دقیق بفهمی پشت SSL گرفتن چه اتفاقی میافتد، این فایل میتواند یک راهنمای کاربردی و مرحلهبهمرحله برایت باشد.
۲۹۰
۱۱:۱۵
معمولاً برای ورود به سرور با SSH از password استفاده میکنیم:
ssh user@server-ip
اما روش حرفهایتر این است که به جای password از SSH key استفاده کنیم.
در این روش دو کلید داریم:
`Private Key` → روی سیستم خودمان میماند و نباید share شود.`Public Key` → روی سرور قرار میگیرد.
ساخت key:
ssh-keygen -t ed25519 -C "your-email@example.com"
کپی کردن public key روی سرور:
ssh-copy-id user@server-ip
بعد از آن میتوانیم بدون وارد کردن password وارد شویم:
ssh user@server-ip
مزیتها:
نکته مهم:`Private Key` مثل کلید اصلی خانه شماست؛ هیچوقت آن را برای کسی نفرستید.
۱۲۹
۱۰:۰۲
اگر سرور Linux دارید، فقط راهاندازی SSH کافی نیست؛ باید آن را امنتر هم کنید.
چند کار مهم:
مثلاً در فایل:
/etc/ssh/sshd_config
میتوانیم تنظیماتی مثل این داشته باشیم:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
بعد هم SSH را restart میکنیم:
sudo systemctl restart ssh
۱۳۶
۱۰:۰۷
`Fail2Ban` لاگ سرویسها را مانیتور میکند، patternهای مشکوک را با filterهای regex تشخیص میدهد و بعد از رسیدن تعداد خطاها به حد مشخص، با actionهایی مثل `iptables` یا `nftables`، IP مهاجم را موقتاً ban میکند.
sudo apt updatesudo apt install fail2ban -ysudo systemctl enable --now fail2ban
ساخت تنظیمات جداگانه:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
نمونه jail برای SSH:
[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 5findtime = 10mbantime = 1h
نمونه jail برای Nginx authentication error:
[nginx-http-auth]enabled = trueport = http,httpsfilter = nginx-http-authlogpath = /var/log/nginx/error.logmaxretry = 5findtime = 10mbantime = 1h
`maxretry` یعنی چند تلاش ناموفق مجاز است.`findtime` یعنی این تلاشها در چه بازهای بررسی شوند.`bantime` یعنی IP چه مدت ban بماند.`filter` یعنی کدام regex pattern روی لاگها اعمال شود.`action` یعنی ban با چه مکانیزمی انجام شود.
بررسی وضعیت:
sudo fail2ban-client statussudo fail2ban-client status sshd
Restart بعد از تغییرات:
sudo systemctl restart fail2ban
۱۷۷
۱۳:۱۳